Staging: Pohmelfs: Sync fs before killing it, since dentry cache is shrunk before...
authorEvgeniy Polyakov <zbr@ioremap.net>
Fri, 27 Mar 2009 12:04:24 +0000 (15:04 +0300)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 17 Apr 2009 18:06:30 +0000 (11:06 -0700)
Signed-off-by: Evgeniy Polyakov <zbr@ioremap.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/pohmelfs/inode.c

index 3fef09fd712c008641af66c338a73f234a56e53d..af99f6620b7e7ad5974ea4286ff3fce15291c892 100644 (file)
@@ -1908,11 +1908,29 @@ static int pohmelfs_get_sb(struct file_system_type *fs_type,
                                mnt);
 }
 
+/*
+ * We need this to sync all inodes earlier, since when writeback
+ * is invoked from the umount/mntput path dcache is already shrunk,
+ * see generic_shutdown_super(), and no inodes can access the path.
+ */
+static void pohmelfs_kill_super(struct super_block *sb)
+{
+       struct writeback_control wbc = {
+               .sync_mode      = WB_SYNC_ALL,
+               .range_start    = 0,
+               .range_end      = LLONG_MAX,
+               .nr_to_write    = LONG_MAX,
+       };
+       generic_sync_sb_inodes(sb, &wbc);
+
+       kill_anon_super(sb);
+}
+
 static struct file_system_type pohmel_fs_type = {
        .owner          = THIS_MODULE,
        .name           = "pohmel",
        .get_sb         = pohmelfs_get_sb,
-       .kill_sb        = kill_anon_super,
+       .kill_sb        = pohmelfs_kill_super,
 };
 
 /*