cifs: propagate errors from cifs_get_root() to mount(2)
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 17 Jun 2011 14:02:59 +0000 (10:02 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 24 Jun 2011 22:39:43 +0000 (18:39 -0400)
... instead of just failing with -EINVAL

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 9a6696a5eb782e76a6af8ead9028e8ab2b88383d..35f9154615fa5ca7cc01fe857324b640b9533245 100644 (file)
@@ -554,7 +554,7 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb)
        full_path = cifs_build_path_to_root(vol, cifs_sb,
                                            cifs_sb_master_tcon(cifs_sb));
        if (full_path == NULL)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        cFYI(1, "Get root dentry for %s", full_path);
 
@@ -583,7 +583,7 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb)
                        dchild = d_alloc(dparent, &name);
                        if (dchild == NULL) {
                                dput(dparent);
-                               dparent = NULL;
+                               dparent = ERR_PTR(-ENOMEM);
                                goto out;
                        }
                }
@@ -601,7 +601,7 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb)
                        if (rc) {
                                dput(dchild);
                                dput(dparent);
-                               dparent = NULL;
+                               dparent = ERR_PTR(rc);
                                goto out;
                        }
                        alias = d_materialise_unique(dchild, inode);
@@ -609,7 +609,7 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb)
                                dput(dchild);
                                if (IS_ERR(alias)) {
                                        dput(dparent);
-                                       dparent = NULL;
+                                       dparent = ERR_PTR(-EINVAL); /* XXX */
                                        goto out;
                                }
                                dchild = alias;
@@ -704,10 +704,8 @@ cifs_do_mount(struct file_system_type *fs_type,
        }
 
        root = cifs_get_root(volume_info, sb);
-       if (root == NULL) {
-               root = ERR_PTR(-EINVAL); /* XXX */
+       if (IS_ERR(root))
                goto out_super;
-       }
 
        cFYI(1, "dentry root is: %p", root);
        goto out;