cifs: move unix extension call to cifs_query_symlink()
authorSachin Prabhu <sprabhu@redhat.com>
Wed, 27 Nov 2013 13:27:12 +0000 (13:27 +0000)
committerSteve French <smfrench@gmail.com>
Mon, 20 Jan 2014 06:14:05 +0000 (00:14 -0600)
Unix extensions rigth now are only applicable to smb1 operations.
Move the check and subsequent unix extension call to the smb1
specific call to query_symlink() ie. cifs_query_symlink().

Signed-off-by: Sachin Prabhu <sprabhu@redhat.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <smfrench@gmail.com>
fs/cifs/link.c
fs/cifs/smb1ops.c

index 5988b60..38b9bf4 100644 (file)
@@ -518,10 +518,7 @@ cifs_follow_link(struct dentry *direntry, struct nameidata *nd)
                rc = query_mf_symlink(xid, tcon, cifs_sb, full_path,
                                      &target_path);
 
-       if ((rc != 0) && cap_unix(tcon->ses))
-               rc = CIFSSMBUnixQuerySymLink(xid, tcon, full_path, &target_path,
-                                            cifs_sb->local_nls);
-       else if (rc != 0 && server->ops->query_symlink)
+       if (rc != 0 && server->ops->query_symlink)
                rc = server->ops->query_symlink(xid, tcon, full_path,
                                                &target_path, cifs_sb);
 
index 1470ec4..988fddb 100644 (file)
@@ -918,23 +918,31 @@ cifs_query_symlink(const unsigned int xid, struct cifs_tcon *tcon,
 
        cifs_dbg(FYI, "%s: path: %s\n", __func__, full_path);
 
+       /* Check for unix extensions */
+       if (cap_unix(tcon->ses)) {
+               rc = CIFSSMBUnixQuerySymLink(xid, tcon, full_path, target_path,
+                                            cifs_sb->local_nls);
+               goto out;
+       }
+
        rc = CIFSSMBOpen(xid, tcon, full_path, FILE_OPEN,
                         FILE_READ_ATTRIBUTES, OPEN_REPARSE_POINT, &netfid,
                         &oplock, NULL, cifs_sb->local_nls,
                         cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);
        if (rc)
-               return rc;
+               goto out;
 
        rc = CIFSSMBQuerySymLink(xid, tcon, netfid, target_path,
                                 cifs_sb->local_nls);
-       if (rc) {
-               CIFSSMBClose(xid, tcon, netfid);
-               return rc;
-       }
+       if (rc)
+               goto out_close;
 
        convert_delimiter(*target_path, '/');
+out_close:
        CIFSSMBClose(xid, tcon, netfid);
-       cifs_dbg(FYI, "%s: target path: %s\n", __func__, *target_path);
+out:
+       if (!rc)
+               cifs_dbg(FYI, "%s: target path: %s\n", __func__, *target_path);
        return rc;
 }