Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit df40c01a authored by Al Viro's avatar Al Viro
Browse files

In get_super() and user_get_super() restarts are unconditional



If superblock had been still alive, we would've returned it...

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 1494583d
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -441,12 +441,13 @@ struct super_block * get_super(struct block_device *bdev)
			sb->s_count++;
			spin_unlock(&sb_lock);
			down_read(&sb->s_umount);
			/* still alive? */
			if (sb->s_root)
				return sb;
			up_read(&sb->s_umount);
			/* restart only when sb is no longer on the list */
			/* nope, got unmounted */
			spin_lock(&sb_lock);
			if (__put_super_and_need_restart(sb))
			__put_super(sb);
			goto rescan;
		}
	}
@@ -500,12 +501,13 @@ struct super_block * user_get_super(dev_t dev)
			sb->s_count++;
			spin_unlock(&sb_lock);
			down_read(&sb->s_umount);
			/* still alive? */
			if (sb->s_root)
				return sb;
			up_read(&sb->s_umount);
			/* restart only when sb is no longer on the list */
			/* nope, got unmounted */
			spin_lock(&sb_lock);
			if (__put_super_and_need_restart(sb))
			__put_super(sb);
			goto rescan;
		}
	}