Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=436058a49e0fb91c74454dbee9cfee6fb53b4336
Commit:     436058a49e0fb91c74454dbee9cfee6fb53b4336
Parent:     63b6be55e8b51cb718468794d343058e96c7462c
Author:     David Howells <[EMAIL PROTECTED]>
AuthorDate: Thu Apr 26 15:56:24 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Thu Apr 26 15:56:24 2007 -0700

    [AFS]: Handle multiple mounts of an AFS superblock correctly.
    
    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]>
---
 fs/afs/super.c |   26 ++++++++++++++++----------
 1 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/fs/afs/super.c b/fs/afs/super.c
index efc4fe6..77e6875 100644
--- a/fs/afs/super.c
+++ b/fs/afs/super.c
@@ -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;
@@ -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);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to