cifs: don't call cifs_dfs_query_info_nonascii_quirk() if nodfs was set
Also return EOPNOTSUPP if path is remote but nodfs was set.
Fixes: a2809d0e16
("cifs: quirk for STATUS_OBJECT_NAME_INVALID returned for non-ASCII dfs refs")
Cc: stable@vger.kernel.org
Reviewed-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
Signed-off-by: Enzo Matsumiya <ematsumiya@suse.de>
Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
d80c69846d
commit
421ef3d565
|
@ -3432,6 +3432,7 @@ static int is_path_remote(struct mount_ctx *mnt_ctx)
|
|||
struct cifs_tcon *tcon = mnt_ctx->tcon;
|
||||
struct smb3_fs_context *ctx = mnt_ctx->fs_ctx;
|
||||
char *full_path;
|
||||
bool nodfs = cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_DFS;
|
||||
|
||||
if (!server->ops->is_path_accessible)
|
||||
return -EOPNOTSUPP;
|
||||
|
@ -3449,14 +3450,20 @@ static int is_path_remote(struct mount_ctx *mnt_ctx)
|
|||
rc = server->ops->is_path_accessible(xid, tcon, cifs_sb,
|
||||
full_path);
|
||||
#ifdef CONFIG_CIFS_DFS_UPCALL
|
||||
if (nodfs) {
|
||||
if (rc == -EREMOTE)
|
||||
rc = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* path *might* exist with non-ASCII characters in DFS root
|
||||
* try again with full path (only if nodfs is not set) */
|
||||
if (rc == -ENOENT && is_tcon_dfs(tcon))
|
||||
rc = cifs_dfs_query_info_nonascii_quirk(xid, tcon, cifs_sb,
|
||||
full_path);
|
||||
#endif
|
||||
if (rc != 0 && rc != -EREMOTE) {
|
||||
kfree(full_path);
|
||||
return rc;
|
||||
}
|
||||
if (rc != 0 && rc != -EREMOTE)
|
||||
goto out;
|
||||
|
||||
if (rc != -EREMOTE) {
|
||||
rc = cifs_are_all_path_components_accessible(server, xid, tcon,
|
||||
|
@ -3468,6 +3475,7 @@ static int is_path_remote(struct mount_ctx *mnt_ctx)
|
|||
}
|
||||
}
|
||||
|
||||
out:
|
||||
kfree(full_path);
|
||||
return rc;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue