SuSE Linux: Versión 7.3
VFS: Mounted root (jfs filesystem) readonly. change_root: old root has d_count=2 Trying to unmount old root ... okay Freeing unused kernel memory: 124k freed Adding Swap: 128480k swap-space (priority 42) jfs_dirty inode called on read-only volume Is remount racy? jfs_dirty inode called on read-only volume Is remount racy? jfs_dirty inode called on read-only volume Is remount racy? jfs_dirty inode called on read-only volume Is remount racy? jfs_dirty inode called on read-only volume Is remount racy? jfs_dirty inode called on read-only volume Is remount racy? [...]
Nota: Esto no es un bucle sin fin - el sistema continuará y arrancará normalmente al cabo de un rato.
La versión 1.0.5 utilizada en el kernel 2.4.10 de SuSE Linux 7.3 tiene un "bug" que solamente afecta en el caso de que la partición raíz se monte en el arranque en modo solo-lectura. El problema es que si escribe en dispositivos de sólo-lectura causa que el kernel marque el inodo como como dirty. JFS asume que intentar marcar un inodo dirty en un volumen de sólo-lectura era un bug. Cuando el volumen es dirty, fsck.jfs escribe mucho en el volumen causando mensaje de aviso muchas veces. Utilizando un dispositivo de framebuffer la consola retrasará la salida de estos mensajes.
Alternativamente, este problema puede solucionar-se aplicando el parche para las fuentes del SuSE 2.4.10 (Paquete kernel-source.rpm y recompilar el módulo del kernel:
--- linux-2.4.10.SuSE/fs/jfs/inode.c Fri Sep 28 10:30:19 2001 +++ linux-2.4.10-suse+/fs/jfs/inode.c Sun Oct 28 15:27:52 2001 @@ -91,6 +91,9 @@ make_bad_inode(inode); } +/* This define is from fs/open.c */ +#define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m)) + /* * Workhorse of both fsync & write_inode */ @@ -98,13 +101,20 @@ { int rc = 0; int tid; + static int noisy = 5; jFYI(1, ("In jfs_commit_inode, inode = 0x%p\n", inode)); if (isReadOnly(inode)) { - jERROR(1,("jfs_commit_inode(0x%p) called on read-only volume\n", - inode)); - jERROR(1,("Is remount racy?\n")); + /* kernel allows writes to devices on read-only + * partitions and may think inode is dirty + */ + if(!special_file(inode->i_mode) && noisy) { + jERROR(1,("jfs_commit_inode(0x%p) called on " + "read-only volume\n", inode)); + jERROR(1,("Is remount racy?\n")); + noisy--; + } return 0; } @@ -176,9 +186,18 @@ #if LINUX_VERSION_CODE > KERNEL_VERSION(2,4,1) void jfs_dirty_inode(struct inode *inode) { + static int noisy = 5; + if (isReadOnly(inode)) { - jERROR(1,("jfs_dirty inode called on read-only volume\n")); - jERROR(1,("Is remount racy?\n")); + if(!special_file(inode->i_mode) && noisy) { + /* kernel allows writes to devices on read-only + * partitions and may try to mark inode dirty + */ + jERROR(1,("jfs_dirty_inode called on " + "read-only volume\n")); + jERROR(1,("Is remount racy?\n")); + noisy--; + } return; } /*
Recomendamos no utilizar JFS en una partición raíz y utilizar un sistema de ficheros con journal alternativo (p.e. ReiserFS).