From: Fernando Luis Vazquez Cao <fernando@xxxxxxxxxxxxx> It makes no sense having the emergency thaw code in fs/buffer.c when all of it's operations are one superblocks and the code it executes is all in fs/super.c. Move the code there and clean it up. Cc: Christoph Hellwig <hch@xxxxxxxxxxxxx> Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> Signed-off-by: Fernando Luis Vazquez Cao <fernando@xxxxxxxxxxxxx> --- diff -urNp linux-3.5-rc5-orig/fs/buffer.c linux-3.5-rc5/fs/buffer.c --- linux-3.5-rc5-orig/fs/buffer.c 2012-07-06 15:19:57.122131765 +0900 +++ linux-3.5-rc5/fs/buffer.c 2012-07-06 15:20:08.129986675 +0900 @@ -511,37 +511,6 @@ repeat: return err; } -static void do_thaw_one(struct super_block *sb, void *unused) -{ - char b[BDEVNAME_SIZE]; - while (sb->s_bdev && !thaw_super_emergency(sb)) - printk(KERN_WARNING "Emergency Thaw on %s\n", - bdevname(sb->s_bdev, b)); -} - -static void do_thaw_all(struct work_struct *work) -{ - iterate_supers(do_thaw_one, NULL); - kfree(work); - printk(KERN_WARNING "Emergency Thaw complete\n"); -} - -/** - * emergency_thaw_all -- forcibly thaw every frozen filesystem - * - * Used for emergency unfreeze of all filesystems via SysRq - */ -void emergency_thaw_all(void) -{ - struct work_struct *work; - - work = kmalloc(sizeof(*work), GFP_ATOMIC); - if (work) { - INIT_WORK(work, do_thaw_all); - schedule_work(work); - } -} - /** * sync_mapping_buffers - write out & wait upon a mapping's "associated" buffers * @mapping: the mapping which wants those buffers written diff -urNp linux-3.5-rc5-orig/fs/super.c linux-3.5-rc5/fs/super.c --- linux-3.5-rc5-orig/fs/super.c 2012-07-06 15:18:06.157987473 +0900 +++ linux-3.5-rc5/fs/super.c 2012-07-06 15:20:08.129986675 +0900 @@ -1313,9 +1313,38 @@ EXPORT_SYMBOL(thaw_super); * @sb: the super to thaw * * Unlocks the filesystem and marks it writeable again after freeze_super(). - * This avoids taking the s_umount lock if it is already held. + * This avoids taking the s_umount lock because it is already held. */ -int thaw_super_emergency(struct super_block *sb) +static void thaw_super_emergency(struct super_block *sb, void *unused) { - return __thaw_super(sb, 1); + + if (sb->s_bdev) { + char b[BDEVNAME_SIZE]; + printk(KERN_WARNING "Emergency Thaw on %s.\n", + bdevname(sb->s_bdev, b)); + } + while (!__thaw_super(sb, 1)); +} + +static void do_thaw_all(struct work_struct *work) +{ + iterate_supers(thaw_super_emergency, NULL); + kfree(work); + printk(KERN_WARNING "Emergency Thaw complete\n"); +} + +/** + * emergency_thaw_all -- forcibly thaw every frozen filesystem + * + * Used for emergency unfreeze of all filesystems via SysRq + */ +void emergency_thaw_all(void) +{ + struct work_struct *work; + + work = kmalloc(sizeof(*work), GFP_ATOMIC); + if (work) { + INIT_WORK(work, do_thaw_all); + schedule_work(work); + } } diff -urNp linux-3.5-rc5-orig/include/linux/fs.h linux-3.5-rc5/include/linux/fs.h --- linux-3.5-rc5-orig/include/linux/fs.h 2012-07-06 15:19:57.122131765 +0900 +++ linux-3.5-rc5/include/linux/fs.h 2012-07-06 15:20:08.129986675 +0900 @@ -1944,7 +1944,6 @@ extern int fd_statfs(int, struct kstatfs extern int vfs_ustat(dev_t, struct kstatfs *); extern int freeze_super(struct super_block *super); extern int thaw_super(struct super_block *super); -extern int thaw_super_emergency(struct super_block *super); extern bool our_mnt(struct vfsmount *mnt); extern int current_umask(void); -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html