[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Ext3, orphans and read-only



Hi,
	I've seen a problem where on recovery after a crash the 
orphan cleanup code clears the read_only bit and does not reset 
it. This causes the the fsck to drop to the "fix filesystem" prompt 
simply because the root filesystem is now mounted rw. 

It looks like this:

Creating rootdevice
Mounting rootfilesystem
EXT3-fs: INFO: recovery required on readonly filesystem.
EXT3-fs: write access will be enabled during recovery.
kjournald starting.  Commit interval 5 seconds
EXT3-fs: sd(8,1): orphan cleanup on readonly fs
EXT3-fs: recovery complete.
EXT3-fs: mounted filesystem with ordered data mode.
Freeing unused kernel memory: 260k freed
INIT: version 2.78 booting
		Welcome to Red Hat Linux Advanced Server
		Press 'I' to enter interactive startup.
Mounting proc filesystem:  [  OK  ]
Unmounting initrd:  [  OK  ]
Configuring kernel parameters:  [  OK  ]
Setting clock  (utc): Tue Jan 28 18:10:13 EST 2003 [  OK  ]
Activating swap partitions:  [  OK  ]
Setting hostname test-p2:  [  OK  ]
Your system appears to have shut down uncleanly
Press Y within 1 seconds to force file system integrity check...
Checking root filesystem
/dev/sda1 is mounted.  e2fsck: Cannot continue, aborting.


[/sbin/fsck.ext3 (1) -- /] fsck.ext3 -a /dev/sda1 
[FAILED]

*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.
Give root password for maintenance
(or type Control-D for normal startup): 


Below is a simple fix that reorders the tests in orphan_cleanup. It
works on 2.4.9-e.10 and 2.4.18-19. A very similar patch should work on 
2.5.59.


--- linux-as/fs/ext3/super.c.orig	Wed Jan 29 08:53:59 2003
+++ linux-as/fs/ext3/super.c	Wed Jan 29 08:57:51 2003
@@ -815,12 +815,6 @@
 		return;
 	}
 
-	if (s_flags & MS_RDONLY) {
-		printk(KERN_INFO "EXT3-fs: %s: orphan cleanup on readonly fs\n",
-		       bdevname(sb->s_dev));
-		sb->s_flags &= ~MS_RDONLY;
-	}
-
 	if (sb->u.ext3_sb.s_mount_state & EXT3_ERROR_FS) {
 		if (es->s_last_orphan)
 			jbd_debug(1, "Errors on filesystem, "
@@ -830,6 +824,12 @@
 		return;
 	}
 
+	if (s_flags & MS_RDONLY) {
+		printk(KERN_INFO "EXT3-fs: %s: orphan cleanup on readonly fs\n",
+		       bdevname(sb->s_dev));
+		sb->s_flags &= ~MS_RDONLY;
+	}
+	
 	while (es->s_last_orphan) {
 		struct inode *inode;
 

Thanks,

Phil


-- 
Philip R. Auld, Ph.D.                  Technical Staff 
Egenera Corp.                        pauld egenera com
165 Forest St., Marlboro, MA 01752       (508)858-2600





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]