]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
cifs: return ENOENT for DFS lookup_cache_entry()
authorEnzo Matsumiya <ematsumiya@suse.de>
Wed, 18 May 2022 14:41:05 +0000 (11:41 -0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Jun 2022 08:29:51 +0000 (10:29 +0200)
[ Upstream commit 337b8b0e4343567221ef8d88aac5e418208d4ac1 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/cifs/connect.c
fs/cifs/dfs_cache.c
fs/cifs/misc.c

index 2a639fc79c300c55632b552b66c658527ae1b904..b28b1ff39fed3e1a91a999a011fdf39bf08fb4c5 100644 (file)
@@ -3406,8 +3406,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,
- * otherwise 0.
+ * Check if path is remote (i.e. a DFS share).
+ *
+ * Return -EREMOTE if it is, otherwise 0 or -errno.
  */
 static int is_path_remote(struct mount_ctx *mnt_ctx)
 {
@@ -3697,6 +3698,7 @@ int cifs_mount(struct cifs_sb_info *cifs_sb, struct smb3_fs_context *ctx)
        if (!isdfs)
                goto out;
 
+       /* proceed as DFS mount */
        uuid_gen(&mnt_ctx.mount_id);
        rc = connect_dfs_root(&mnt_ctx, &tl);
        dfs_cache_free_tgts(&tl);
index 956f8e5cf3e7423438b235a99711563c9ccbb205..c5dd6f7305bd161eac0fa34857ca62a72182cb8e 100644 (file)
@@ -654,7 +654,7 @@ static struct cache_entry *__lookup_cache_entry(const char *path, unsigned int h
                        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.
  *
- * 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)
 {
@@ -710,7 +710,7 @@ static struct cache_entry *lookup_cache_entry(const char *path)
                while (e > s && *e != sep)
                        e--;
        }
-       return ERR_PTR(-EEXIST);
+       return ERR_PTR(-ENOENT);
 }
 
 /**
index 114810e563a9baee5b33d55ba36e5c82a14d9561..5a803d6861464632b460a773e4a94f0a8f9ed44b 100644 (file)
@@ -1308,7 +1308,7 @@ int cifs_update_super_prepath(struct cifs_sb_info *cifs_sb, char *prefix)
  * for "\<server>\<dfsname>\<linkpath>" DFS reference,
  * 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,
                                       struct cifs_tcon *tcon,
@@ -1340,10 +1340,6 @@ int cifs_dfs_query_info_nonascii_quirk(const unsigned int xid,
                cifs_dbg(FYI, "DFS ref '%s' is found, emulate -EREMOTE\n",
                         dfspath);
                rc = -EREMOTE;
-       } else if (rc == -EEXIST) {
-               cifs_dbg(FYI, "DFS ref '%s' is not found, emulate -ENOENT\n",
-                        dfspath);
-               rc = -ENOENT;
        } else {
                cifs_dbg(FYI, "%s: dfs_cache_find returned %d\n", __func__, rc);
        }