Loading fs/dcache.c +7 −5 Original line number Diff line number Diff line Loading @@ -536,7 +536,7 @@ static void __shrink_dcache_sb(struct super_block *sb, int *count, int flags) */ static void prune_dcache(int count) { struct super_block *sb, *n; struct super_block *sb, *p = NULL; int w_count; int unused = dentry_stat.nr_unused; int prune_ratio; Loading @@ -550,7 +550,7 @@ static void prune_dcache(int count) else prune_ratio = unused / count; spin_lock(&sb_lock); list_for_each_entry_safe(sb, n, &super_blocks, s_list) { list_for_each_entry(sb, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; if (sb->s_nr_dentry_unused == 0) Loading Loading @@ -590,14 +590,16 @@ static void prune_dcache(int count) up_read(&sb->s_umount); } spin_lock(&sb_lock); /* lock was dropped, must reset next */ list_safe_reset_next(sb, n, s_list); if (p) __put_super(p); count -= pruned; __put_super(sb); p = sb; /* more work left to do? */ if (count <= 0) break; } if (p) __put_super(p); spin_unlock(&sb_lock); spin_unlock(&dcache_lock); } Loading fs/super.c +21 −15 Original line number Diff line number Diff line Loading @@ -363,10 +363,10 @@ EXPORT_SYMBOL(drop_super); */ void sync_supers(void) { struct super_block *sb, *n; struct super_block *sb, *p = NULL; spin_lock(&sb_lock); list_for_each_entry_safe(sb, n, &super_blocks, s_list) { list_for_each_entry(sb, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; if (sb->s_op->write_super && sb->s_dirt) { Loading @@ -379,11 +379,13 @@ void sync_supers(void) up_read(&sb->s_umount); spin_lock(&sb_lock); /* lock was dropped, must reset next */ list_safe_reset_next(sb, n, s_list); __put_super(sb); if (p) __put_super(p); p = sb; } } if (p) __put_super(p); spin_unlock(&sb_lock); } Loading @@ -397,10 +399,10 @@ void sync_supers(void) */ void iterate_supers(void (*f)(struct super_block *, void *), void *arg) { struct super_block *sb, *n; struct super_block *sb, *p = NULL; spin_lock(&sb_lock); list_for_each_entry_safe(sb, n, &super_blocks, s_list) { list_for_each_entry(sb, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; sb->s_count++; Loading @@ -412,10 +414,12 @@ void iterate_supers(void (*f)(struct super_block *, void *), void *arg) up_read(&sb->s_umount); spin_lock(&sb_lock); /* lock was dropped, must reset next */ list_safe_reset_next(sb, n, s_list); __put_super(sb); if (p) __put_super(p); p = sb; } if (p) __put_super(p); spin_unlock(&sb_lock); } Loading Loading @@ -577,10 +581,10 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force) static void do_emergency_remount(struct work_struct *work) { struct super_block *sb, *n; struct super_block *sb, *p = NULL; spin_lock(&sb_lock); list_for_each_entry_safe(sb, n, &super_blocks, s_list) { list_for_each_entry(sb, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; sb->s_count++; Loading @@ -594,10 +598,12 @@ static void do_emergency_remount(struct work_struct *work) } up_write(&sb->s_umount); spin_lock(&sb_lock); /* lock was dropped, must reset next */ list_safe_reset_next(sb, n, s_list); __put_super(sb); if (p) __put_super(p); p = sb; } if (p) __put_super(p); spin_unlock(&sb_lock); kfree(work); printk("Emergency Remount complete\n"); Loading Loading
fs/dcache.c +7 −5 Original line number Diff line number Diff line Loading @@ -536,7 +536,7 @@ static void __shrink_dcache_sb(struct super_block *sb, int *count, int flags) */ static void prune_dcache(int count) { struct super_block *sb, *n; struct super_block *sb, *p = NULL; int w_count; int unused = dentry_stat.nr_unused; int prune_ratio; Loading @@ -550,7 +550,7 @@ static void prune_dcache(int count) else prune_ratio = unused / count; spin_lock(&sb_lock); list_for_each_entry_safe(sb, n, &super_blocks, s_list) { list_for_each_entry(sb, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; if (sb->s_nr_dentry_unused == 0) Loading Loading @@ -590,14 +590,16 @@ static void prune_dcache(int count) up_read(&sb->s_umount); } spin_lock(&sb_lock); /* lock was dropped, must reset next */ list_safe_reset_next(sb, n, s_list); if (p) __put_super(p); count -= pruned; __put_super(sb); p = sb; /* more work left to do? */ if (count <= 0) break; } if (p) __put_super(p); spin_unlock(&sb_lock); spin_unlock(&dcache_lock); } Loading
fs/super.c +21 −15 Original line number Diff line number Diff line Loading @@ -363,10 +363,10 @@ EXPORT_SYMBOL(drop_super); */ void sync_supers(void) { struct super_block *sb, *n; struct super_block *sb, *p = NULL; spin_lock(&sb_lock); list_for_each_entry_safe(sb, n, &super_blocks, s_list) { list_for_each_entry(sb, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; if (sb->s_op->write_super && sb->s_dirt) { Loading @@ -379,11 +379,13 @@ void sync_supers(void) up_read(&sb->s_umount); spin_lock(&sb_lock); /* lock was dropped, must reset next */ list_safe_reset_next(sb, n, s_list); __put_super(sb); if (p) __put_super(p); p = sb; } } if (p) __put_super(p); spin_unlock(&sb_lock); } Loading @@ -397,10 +399,10 @@ void sync_supers(void) */ void iterate_supers(void (*f)(struct super_block *, void *), void *arg) { struct super_block *sb, *n; struct super_block *sb, *p = NULL; spin_lock(&sb_lock); list_for_each_entry_safe(sb, n, &super_blocks, s_list) { list_for_each_entry(sb, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; sb->s_count++; Loading @@ -412,10 +414,12 @@ void iterate_supers(void (*f)(struct super_block *, void *), void *arg) up_read(&sb->s_umount); spin_lock(&sb_lock); /* lock was dropped, must reset next */ list_safe_reset_next(sb, n, s_list); __put_super(sb); if (p) __put_super(p); p = sb; } if (p) __put_super(p); spin_unlock(&sb_lock); } Loading Loading @@ -577,10 +581,10 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force) static void do_emergency_remount(struct work_struct *work) { struct super_block *sb, *n; struct super_block *sb, *p = NULL; spin_lock(&sb_lock); list_for_each_entry_safe(sb, n, &super_blocks, s_list) { list_for_each_entry(sb, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; sb->s_count++; Loading @@ -594,10 +598,12 @@ static void do_emergency_remount(struct work_struct *work) } up_write(&sb->s_umount); spin_lock(&sb_lock); /* lock was dropped, must reset next */ list_safe_reset_next(sb, n, s_list); __put_super(sb); if (p) __put_super(p); p = sb; } if (p) __put_super(p); spin_unlock(&sb_lock); kfree(work); printk("Emergency Remount complete\n"); Loading