cifs: more breakage on mount failures
Al Viro [Fri, 17 Jun 2011 13:50:44 +0000 (09:50 -0400)]
if cifs_get_root() fails, we end up with ->mount() returning NULL,
which is not what callers expect.  Moreover, in case of superblock
reuse we end up leaking a superblock reference...

Acked-by: Pavel Shilovsky <piastryyy@gmail.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

fs/cifs/cifsfs.c

index ba2b2da..234e9d0 100644 (file)
@@ -710,19 +710,16 @@ cifs_do_mount(struct file_system_type *fs_type,
 
        sb->s_flags |= MS_ACTIVE;
 
+out_shared:
        root = cifs_get_root(volume_info, sb);
-       if (root == NULL)
+       if (root == NULL) {
+               root = ERR_PTR(-EINVAL); /* XXX */
                goto out_super;
+       }
 
        cFYI(1, "dentry root is: %p", root);
        goto out;
 
-out_shared:
-       root = cifs_get_root(volume_info, sb);
-       if (root)
-               cFYI(1, "dentry root is: %p", root);
-       goto out;
-
 out_super:
        deactivate_locked_super(sb);
 out: