Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0ecdb4f5 authored by Sachin Prabhu's avatar Sachin Prabhu Committed by Steve French
Browse files

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: default avatarSachin Prabhu <sprabhu@redhat.com>
Reviewed-by: default avatarJeff Layton <jlayton@redhat.com>
Signed-off-by: default avatarSteve French <smfrench@gmail.com>
parent 0f8dce1c
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -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);

+14 −6
Original line number Diff line number Diff line
@@ -918,22 +918,30 @@ 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);
out:
	if (!rc)
		cifs_dbg(FYI, "%s: target path: %s\n", __func__, *target_path);
	return rc;
}