Commit fa7c1d50 authored by Mateusz Guzik's avatar Mateusz Guzik Committed by Al Viro
Browse files

vfs: factor sb iteration out of do_emergency_remount



The intent is to reduce code duplication with other code
iterating the list.

No functional changes.

Signed-off-by: default avatarMateusz Guzik <mguzik@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 9e66317d
Loading
Loading
Loading
Loading
+36 −25
Original line number Diff line number Diff line
@@ -574,6 +574,28 @@ void drop_super_exclusive(struct super_block *sb)
}
EXPORT_SYMBOL(drop_super_exclusive);

static void __iterate_supers(void (*f)(struct super_block *))
{
	struct super_block *sb, *p = NULL;

	spin_lock(&sb_lock);
	list_for_each_entry(sb, &super_blocks, s_list) {
		if (hlist_unhashed(&sb->s_instances))
			continue;
		sb->s_count++;
		spin_unlock(&sb_lock);

		f(sb);

		spin_lock(&sb_lock);
		if (p)
			__put_super(p);
		p = sb;
	}
	if (p)
		__put_super(p);
	spin_unlock(&sb_lock);
}
/**
 *	iterate_supers - call function for all active superblocks
 *	@f: function to call
@@ -881,16 +903,8 @@ cancel_readonly:
	return retval;
}

static void do_emergency_remount(struct work_struct *work)
static void do_emergency_remount_callback(struct super_block *sb)
{
	struct super_block *sb, *p = NULL;

	spin_lock(&sb_lock);
	list_for_each_entry(sb, &super_blocks, s_list) {
		if (hlist_unhashed(&sb->s_instances))
			continue;
		sb->s_count++;
		spin_unlock(&sb_lock);
	down_write(&sb->s_umount);
	if (sb->s_root && sb->s_bdev && (sb->s_flags & SB_BORN) &&
	    !sb_rdonly(sb)) {
@@ -900,14 +914,11 @@ static void do_emergency_remount(struct work_struct *work)
		do_remount_sb(sb, SB_RDONLY, NULL, 1);
	}
	up_write(&sb->s_umount);
		spin_lock(&sb_lock);
		if (p)
			__put_super(p);
		p = sb;
}
	if (p)
		__put_super(p);
	spin_unlock(&sb_lock);

static void do_emergency_remount(struct work_struct *work)
{
	__iterate_supers(do_emergency_remount_callback);
	kfree(work);
	printk("Emergency Remount complete\n");
}