diff options
-rw-r--r-- | fs/buffer.c | 7 | ||||
-rw-r--r-- | fs/drop_caches.c | 8 | ||||
-rw-r--r-- | fs/quota/quota.c | 8 | ||||
-rw-r--r-- | fs/super.c | 8 |
4 files changed, 11 insertions, 20 deletions
diff --git a/fs/buffer.c b/fs/buffer.c index 021ec4da9932..ded29b0fdac3 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -562,12 +562,11 @@ repeat: static void do_thaw_all(struct work_struct *work) { - struct super_block *sb; + struct super_block *sb, *n; char b[BDEVNAME_SIZE]; spin_lock(&sb_lock); -restart: - list_for_each_entry(sb, &super_blocks, s_list) { + list_for_each_entry_safe(sb, n, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; sb->s_count++; @@ -578,8 +577,6 @@ restart: 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); kfree(work); diff --git a/fs/drop_caches.c b/fs/drop_caches.c index 9cd4e4a70f56..42728a1f795f 100644 --- a/fs/drop_caches.c +++ b/fs/drop_caches.c @@ -35,11 +35,10 @@ static void drop_pagecache_sb(struct super_block *sb) static void drop_pagecache(void) { - struct super_block *sb; + struct super_block *sb, *n; spin_lock(&sb_lock); -restart: - list_for_each_entry(sb, &super_blocks, s_list) { + list_for_each_entry_safe(sb, n, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; sb->s_count++; @@ -49,8 +48,7 @@ restart: drop_pagecache_sb(sb); up_read(&sb->s_umount); spin_lock(&sb_lock); - if (__put_super_and_need_restart(sb)) - goto restart; + __put_super(sb); } spin_unlock(&sb_lock); } diff --git a/fs/quota/quota.c b/fs/quota/quota.c index 4669e7e639bd..2196f8b07c1f 100644 --- a/fs/quota/quota.c +++ b/fs/quota/quota.c @@ -47,7 +47,7 @@ static int check_quotactl_permission(struct super_block *sb, int type, int cmd, static int quota_sync_all(int type) { - struct super_block *sb; + struct super_block *sb, *n; int ret; if (type >= MAXQUOTAS) @@ -57,8 +57,7 @@ static int quota_sync_all(int type) return ret; spin_lock(&sb_lock); -restart: - list_for_each_entry(sb, &super_blocks, s_list) { + list_for_each_entry_safe(sb, n, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; if (!sb->s_qcop || !sb->s_qcop->quota_sync) @@ -71,8 +70,7 @@ restart: sb->s_qcop->quota_sync(sb, type, 1); up_read(&sb->s_umount); spin_lock(&sb_lock); - if (__put_super_and_need_restart(sb)) - goto restart; + __put_super(sb); } spin_unlock(&sb_lock); diff --git a/fs/super.c b/fs/super.c index ba99524998f7..ccb2b5fa89bd 100644 --- a/fs/super.c +++ b/fs/super.c @@ -395,11 +395,10 @@ EXPORT_SYMBOL(drop_super); */ void sync_supers(void) { - struct super_block *sb; + struct super_block *sb, *n; spin_lock(&sb_lock); -restart: - list_for_each_entry(sb, &super_blocks, s_list) { + list_for_each_entry_safe(sb, n, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; if (sb->s_op->write_super && sb->s_dirt) { @@ -412,8 +411,7 @@ restart: up_read(&sb->s_umount); spin_lock(&sb_lock); - if (__put_super_and_need_restart(sb)) - goto restart; + __put_super(sb); } } spin_unlock(&sb_lock); |