lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 242/879] cifs: return ENOENT for DFS lookup_cache_entry()
    Date
    From: Enzo Matsumiya <ematsumiya@suse.de>

    [ 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 | 6 ++++--
    fs/cifs/dfs_cache.c | 6 +++---
    fs/cifs/misc.c | 6 +-----
    3 files changed, 8 insertions(+), 10 deletions(-)

    diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
    index 2a639fc79c30..b28b1ff39fed 100644
    --- a/fs/cifs/connect.c
    +++ b/fs/cifs/connect.c
    @@ -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);
    diff --git a/fs/cifs/dfs_cache.c b/fs/cifs/dfs_cache.c
    index 956f8e5cf3e7..c5dd6f7305bd 100644
    --- a/fs/cifs/dfs_cache.c
    +++ b/fs/cifs/dfs_cache.c
    @@ -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);
    }

    /**
    diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c
    index 114810e563a9..5a803d686146 100644
    --- a/fs/cifs/misc.c
    +++ b/fs/cifs/misc.c
    @@ -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);
    }
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-06-08 00:28    [W:3.093 / U:0.164 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site