Skip to content

Commit

Permalink
btrfs: fix mount/umount race
Browse files Browse the repository at this point in the history
Do *NOT* skip doomed superblocks in btrfs_test_super(); we want
sget() to wait for their shutdown to complete.  Since we don't
mutilate ->s_fs_info in ->put_super() anymore (or free what it
used to point to until the superblock is past being findable
by sget()), we can just DTRT there and report a match.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
  • Loading branch information
Al Viro committed Jan 9, 2012
1 parent aea52e1 commit 6de1d09
Showing 1 changed file with 4 additions and 9 deletions.
13 changes: 4 additions & 9 deletions fs/btrfs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -733,20 +733,15 @@ static int btrfs_test_super(struct super_block *s, void *data)
struct btrfs_root *test_root = data;
struct btrfs_root *root = btrfs_sb(s);

/*
* If this super block is going away, return false as it
* can't match as an existing super block.
*/
if (!atomic_read(&s->s_active))
return 0;
return root->fs_info->fs_devices == test_root->fs_info->fs_devices;
}

static int btrfs_set_super(struct super_block *s, void *data)
{
s->s_fs_info = data;

return set_anon_super(s, data);
int err = set_anon_super(s, data);
if (!err)
s->s_fs_info = data;
return err;
}

/*
Expand Down

0 comments on commit 6de1d09

Please sign in to comment.