cifs: move unix extension call to cifs_query_symlink()

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>
This commit is contained in:
Sachin Prabhu 2013-11-27 13:27:12 +00:00 committed by Steve French
parent 0f8dce1cb7
commit 0ecdb4f572
2 changed files with 15 additions and 10 deletions

View File

@ -518,10 +518,7 @@ cifs_follow_link(struct dentry *direntry, struct nameidata *nd)
rc = query_mf_symlink(xid, tcon, cifs_sb, full_path, rc = query_mf_symlink(xid, tcon, cifs_sb, full_path,
&target_path); &target_path);
if ((rc != 0) && cap_unix(tcon->ses)) if (rc != 0 && server->ops->query_symlink)
rc = CIFSSMBUnixQuerySymLink(xid, tcon, full_path, &target_path,
cifs_sb->local_nls);
else if (rc != 0 && server->ops->query_symlink)
rc = server->ops->query_symlink(xid, tcon, full_path, rc = server->ops->query_symlink(xid, tcon, full_path,
&target_path, cifs_sb); &target_path, cifs_sb);

View 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); 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, rc = CIFSSMBOpen(xid, tcon, full_path, FILE_OPEN,
FILE_READ_ATTRIBUTES, OPEN_REPARSE_POINT, &netfid, FILE_READ_ATTRIBUTES, OPEN_REPARSE_POINT, &netfid,
&oplock, NULL, cifs_sb->local_nls, &oplock, NULL, cifs_sb->local_nls,
cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);
if (rc) if (rc)
return rc; goto out;
rc = CIFSSMBQuerySymLink(xid, tcon, netfid, target_path, rc = CIFSSMBQuerySymLink(xid, tcon, netfid, target_path,
cifs_sb->local_nls); cifs_sb->local_nls);
if (rc) { if (rc)
CIFSSMBClose(xid, tcon, netfid); goto out_close;
return rc;
}
convert_delimiter(*target_path, '/'); convert_delimiter(*target_path, '/');
out_close:
CIFSSMBClose(xid, tcon, netfid); 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; return rc;
} }