lkml.org 
[lkml]   [2022]   [Feb]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 132/196] NFS: LOOKUP_DIRECTORY is also ok with symlinks
    Date
    From: Trond Myklebust <trond.myklebust@hammerspace.com>

    commit e0caaf75d443e02e55e146fd75fe2efc8aed5540 upstream.

    Commit ac795161c936 (NFSv4: Handle case where the lookup of a directory
    fails) [1], part of Linux since 5.17-rc2, introduced a regression, where
    a symbolic link on an NFS mount to a directory on another NFS does not
    resolve(?) the first time it is accessed:

    Reported-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Fixes: ac795161c936 ("NFSv4: Handle case where the lookup of a directory fails")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Tested-by: Donald Buczek <buczek@molgen.mpg.de>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/nfs/dir.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/fs/nfs/dir.c
    +++ b/fs/nfs/dir.c
    @@ -1987,14 +1987,14 @@ no_open:
    if (!res) {
    inode = d_inode(dentry);
    if ((lookup_flags & LOOKUP_DIRECTORY) && inode &&
    - !S_ISDIR(inode->i_mode))
    + !(S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)))
    res = ERR_PTR(-ENOTDIR);
    else if (inode && S_ISREG(inode->i_mode))
    res = ERR_PTR(-EOPENSTALE);
    } else if (!IS_ERR(res)) {
    inode = d_inode(res);
    if ((lookup_flags & LOOKUP_DIRECTORY) && inode &&
    - !S_ISDIR(inode->i_mode)) {
    + !(S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode))) {
    dput(res);
    res = ERR_PTR(-ENOTDIR);
    } else if (inode && S_ISREG(inode->i_mode)) {

    \
     
     \ /
      Last update: 2022-02-21 19:22    [W:2.291 / U:2.196 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site