cifs: return ENOENT for DFS lookup_cache_entry()
EEXIST didn't make sense to use when dfs_cache_find() couldn't find a cache entry nor retrieve a referral target. It also doesn't make sense cifs_dfs_query_info_nonascii_quirk() to emulate ENOENT anymore. Signed-off-by: Enzo Matsumiya <ematsumiya@suse.de> Reviewed-by: Paulo Alcantara (SUSE) <pc@cjr.nz> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
421ef3d565
commit
337b8b0e43
@ -3420,8 +3420,9 @@ cifs_are_all_path_components_accessible(struct TCP_Server_Info *server,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if path is remote (e.g. a DFS share). Return -EREMOTE if it is,
|
* Check if path is remote (i.e. a DFS share).
|
||||||
* otherwise 0.
|
*
|
||||||
|
* Return -EREMOTE if it is, otherwise 0 or -errno.
|
||||||
*/
|
*/
|
||||||
static int is_path_remote(struct mount_ctx *mnt_ctx)
|
static int is_path_remote(struct mount_ctx *mnt_ctx)
|
||||||
{
|
{
|
||||||
@ -3711,6 +3712,7 @@ int cifs_mount(struct cifs_sb_info *cifs_sb, struct smb3_fs_context *ctx)
|
|||||||
if (!isdfs)
|
if (!isdfs)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
/* proceed as DFS mount */
|
||||||
uuid_gen(&mnt_ctx.mount_id);
|
uuid_gen(&mnt_ctx.mount_id);
|
||||||
rc = connect_dfs_root(&mnt_ctx, &tl);
|
rc = connect_dfs_root(&mnt_ctx, &tl);
|
||||||
dfs_cache_free_tgts(&tl);
|
dfs_cache_free_tgts(&tl);
|
||||||
|
@ -654,7 +654,7 @@ static struct cache_entry *__lookup_cache_entry(const char *path, unsigned int h
|
|||||||
return ce;
|
return ce;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ERR_PTR(-EEXIST);
|
return ERR_PTR(-ENOENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -662,7 +662,7 @@ static struct cache_entry *__lookup_cache_entry(const char *path, unsigned int h
|
|||||||
*
|
*
|
||||||
* Use whole path components in the match. Must be called with htable_rw_lock held.
|
* Use whole path components in the match. Must be called with htable_rw_lock held.
|
||||||
*
|
*
|
||||||
* Return ERR_PTR(-EEXIST) if the entry is not found.
|
* Return ERR_PTR(-ENOENT) if the entry is not found.
|
||||||
*/
|
*/
|
||||||
static struct cache_entry *lookup_cache_entry(const char *path)
|
static struct cache_entry *lookup_cache_entry(const char *path)
|
||||||
{
|
{
|
||||||
@ -710,7 +710,7 @@ static struct cache_entry *lookup_cache_entry(const char *path)
|
|||||||
while (e > s && *e != sep)
|
while (e > s && *e != sep)
|
||||||
e--;
|
e--;
|
||||||
}
|
}
|
||||||
return ERR_PTR(-EEXIST);
|
return ERR_PTR(-ENOENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1309,7 +1309,7 @@ int cifs_update_super_prepath(struct cifs_sb_info *cifs_sb, char *prefix)
|
|||||||
* for "\<server>\<dfsname>\<linkpath>" DFS reference,
|
* for "\<server>\<dfsname>\<linkpath>" DFS reference,
|
||||||
* where <dfsname> contains non-ASCII unicode symbols.
|
* where <dfsname> contains non-ASCII unicode symbols.
|
||||||
*
|
*
|
||||||
* Check such DFS reference and emulate -ENOENT if it is actual.
|
* Check such DFS reference.
|
||||||
*/
|
*/
|
||||||
int cifs_dfs_query_info_nonascii_quirk(const unsigned int xid,
|
int cifs_dfs_query_info_nonascii_quirk(const unsigned int xid,
|
||||||
struct cifs_tcon *tcon,
|
struct cifs_tcon *tcon,
|
||||||
@ -1341,10 +1341,6 @@ int cifs_dfs_query_info_nonascii_quirk(const unsigned int xid,
|
|||||||
cifs_dbg(FYI, "DFS ref '%s' is found, emulate -EREMOTE\n",
|
cifs_dbg(FYI, "DFS ref '%s' is found, emulate -EREMOTE\n",
|
||||||
dfspath);
|
dfspath);
|
||||||
rc = -EREMOTE;
|
rc = -EREMOTE;
|
||||||
} else if (rc == -EEXIST) {
|
|
||||||
cifs_dbg(FYI, "DFS ref '%s' is not found, emulate -ENOENT\n",
|
|
||||||
dfspath);
|
|
||||||
rc = -ENOENT;
|
|
||||||
} else {
|
} else {
|
||||||
cifs_dbg(FYI, "%s: dfs_cache_find returned %d\n", __func__, rc);
|
cifs_dbg(FYI, "%s: dfs_cache_find returned %d\n", __func__, rc);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user