fsync on unmounting root
PATCH 1/1 fsync on unmounting root
Hi guys,
Looks like the prerelease, and at least test13 don't fsync the device when someone does an unmount on /
mount -o remount works, just unmounting the root misses the fsync.
This patch works for me:
-chris
fs/super.c renamed from fs/super.c.1 +5 -1
@@ -1031,8 +1031,12 @@* we just try to remount it readonly. */ mntput (mnt); -if (!(sb->s_flags &MS_RDONLY )) +if (!(sb->s_flags &MS_RDONLY )) { +shrink_dcache_sb (sb); +fsync_dev (sb->s_dev); +acct_auto_close (sb->s_dev); retval =do_remount_sb (sb,MS_RDONLY ,0 ); + }return retval; }
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
Quoted 14 lines · Chris Mason
Hi guys,
Looks like the prerelease, and at least test13 don't fsync the device when someone does an unmount on /
mount -o remount works, just unmounting the root misses the fsync.
This patch works for me:
(quoted diff) +0
-1-chris
fs/super.c line 1039
Quoted 10 lines
fs/super.c renamed from fs/super.c.1 +5
-1@@ -1031,8 +1031,12 @@* we just try to remount it readonly. */ mntput (mnt); -if (!(sb->s_flags &MS_RDONLY )) +if (!(sb->s_flags &MS_RDONLY )) { +shrink_dcache_sb (sb); +fsync_dev (sb->s_dev); +acct_auto_close (sb->s_dev); retval =do_remount_sb (sb,MS_RDONLY ,0 ); + }
I have a better suggestion:
if (mnt == current->fs->rootmnt && !umount_root) {
mntput(mnt);
return do_remount("/", 0, NULL);
}-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
Quoted 8 lines · On Thursday, January 04, 2001 01:58:47 PM -0500 Alexander Viro…
Quoted 5 lines · Chris Mason
Looks like the prerelease, and at least test13 don't fsync the device when someone does an unmount on /
mount -o remount works, just unmounting the root misses the fsync. [snip]
Quoted 7 lines
I have a better suggestion:
if (mnt == current->fs->rootmnt && !umount_root) { mntput(mnt); return do_remount("/", 0, NULL); }
Ok, but I thought we would need an MS_RDONLY in there somewhere...How about this:
-chris
fs/super.c renamed from fs/super.c.1 +2 -4
@@ -54,6 +54,7 @@extern int root_mountflags;static int do_remount_sb (struct super_block *sb,int flags,char * data); +static int do_remount (const char *dir,int flags,char * data);/* this is initialized in init/main.c */ kdev_t ROOT_DEV ;
@@ -1025,15 +1026,12 @@* call reboot(9). Then init(8) could umount root and exec /reboot. */ if (mnt == current->fs->rootmnt && !umount_root) { -int retval =0 ;/* * Special case for "unmounting" root ... * we just try to remount it readonly. */ mntput (mnt); -if (!(sb->s_flags &MS_RDONLY )) - retval =do_remount_sb (sb,MS_RDONLY ,0 ); -return retval; +return do_remount ("/" ,MS_RDONLY ,NULL ); }spin_lock (&dcache_lock);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/