diff options
Diffstat (limited to 'fs/buffer.c')
| -rw-r--r-- | fs/buffer.c | 26 | 
1 files changed, 9 insertions, 17 deletions
| diff --git a/fs/buffer.c b/fs/buffer.c index c9c266db062..e8aa7081d25 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -275,6 +275,7 @@ void invalidate_bdev(struct block_device *bdev)  		return;  	invalidate_bh_lrus(); +	lru_add_drain_all();	/* make sure all lru add caches are flushed */  	invalidate_mapping_pages(mapping, 0, -1);  }  EXPORT_SYMBOL(invalidate_bdev); @@ -560,26 +561,17 @@ repeat:  	return err;  } -static void do_thaw_all(struct work_struct *work) +static void do_thaw_one(struct super_block *sb, void *unused)  { -	struct super_block *sb;  	char b[BDEVNAME_SIZE]; +	while (sb->s_bdev && !thaw_bdev(sb->s_bdev, sb)) +		printk(KERN_WARNING "Emergency Thaw on %s\n", +		       bdevname(sb->s_bdev, b)); +} -	spin_lock(&sb_lock); -restart: -	list_for_each_entry(sb, &super_blocks, s_list) { -		sb->s_count++; -		spin_unlock(&sb_lock); -		down_read(&sb->s_umount); -		while (sb->s_bdev && !thaw_bdev(sb->s_bdev, sb)) -			printk(KERN_WARNING "Emergency Thaw on %s\n", -			       bdevname(sb->s_bdev, b)); -		up_read(&sb->s_umount); -		spin_lock(&sb_lock); -		if (__put_super_and_need_restart(sb)) -			goto restart; -	} -	spin_unlock(&sb_lock); +static void do_thaw_all(struct work_struct *work) +{ +	iterate_supers(do_thaw_one, NULL);  	kfree(work);  	printk(KERN_WARNING "Emergency Thaw complete\n");  } | 
