Skip to content

Commit

Permalink
[AFS]: Handle multiple mounts of an AFS superblock correctly.
Browse files Browse the repository at this point in the history
Handle multiple mounts of an AFS superblock correctly, checking to see
whether the superblock is already initialised after calling sget()
rather than just unconditionally stamping all over it.

Also delete the "silent" parameter to afs_fill_super() as it's not
used and can, in any case, be obtained from sb->s_flags.

Signed-off-by: David Howells <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
dhowells authored and davem330 committed Apr 26, 2007
1 parent 63b6be5 commit 436058a
Showing 1 changed file with 16 additions and 10 deletions.
26 changes: 16 additions & 10 deletions fs/afs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ static int afs_test_super(struct super_block *sb, void *data)
/*
* fill in the superblock
*/
static int afs_fill_super(struct super_block *sb, void *data, int silent)
static int afs_fill_super(struct super_block *sb, void *data)
{
struct afs_mount_params *params = data;
struct afs_super_info *as = NULL;
Expand Down Expand Up @@ -319,17 +319,23 @@ static int afs_get_sb(struct file_system_type *fs_type,
goto error;
}

sb->s_flags = flags;

ret = afs_fill_super(sb, &params, flags & MS_SILENT ? 1 : 0);
if (ret < 0) {
up_write(&sb->s_umount);
deactivate_super(sb);
goto error;
if (!sb->s_root) {
/* initial superblock/root creation */
_debug("create");
sb->s_flags = flags;
ret = afs_fill_super(sb, &params);
if (ret < 0) {
up_write(&sb->s_umount);
deactivate_super(sb);
goto error;
}
sb->s_flags |= MS_ACTIVE;
} else {
_debug("reuse");
ASSERTCMP(sb->s_flags, &, MS_ACTIVE);
}
sb->s_flags |= MS_ACTIVE;
simple_set_mnt(mnt, sb);

simple_set_mnt(mnt, sb);
afs_put_volume(params.volume);
afs_put_cell(params.default_cell);
_leave(" = 0 [%p]", sb);
Expand Down

0 comments on commit 436058a

Please sign in to comment.