SuSE Linux: Version 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? [...]
Hinweis: Das System ist nicht in einer Endlosschleife! Der Bootvorgang wird nach einiger Zeit normal fortgeführt, dies kann u.U. jedoch recht lange dauern.
Die in Kernel 2.4.10 von SuSE Linux 7.3 verwendete JFS Version 1.0.5 enthält noch einen Bug in der Behandlung des Spezialfalls, daß die root-Partition beim Systemstart zuerst read-only gemounted wird. Der Linux-Kernel markiert device-inodes als "dirty", wenn auf diese schreibend zugegriffen wird. JFS nimmt an, daß der Versuch, einen inode auf einem schreibgeschützten Gerät als "dirty" zu markieren ein Fehler ist. Wenn das Dateisystem nicht sauber abgemeldet wurde, schreibt fsck.jfs beim nächsten mount-Vorgang sehr viele Daten auf das Dateisystem, was die oben genannte Warnmeldung verursacht. Da diese Zeilen für jede einzelnen inode ausgegeben werden, kann dieser Vorgang sehr lange dauern (besonders auf einer Framebuffer-Console).
Alternativ kann dieser spezielle Fehler durch Anwenden des folgenden Patches auf die SuSE 2.4.10 Kernelquellen (Paket kernel-source.rpm behoben werden.
--- 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; } /*
Im Moment empfehlen wir als Workaround, JFS nicht für die root-Partition zu verwenden (s. auch "Fehlermeldung beim Zwischenbooten bei der Installation (JFS)" (http://sdb.suse.de/de/sdb/html/jfs_root_73.html) und stattdessen auf alternative Journaling File Systeme (z.B. ReiserFS) auszuweichen.