lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.9 536/757] nfsd: Cache R, RW, and W opens separately
    Date
    From: J. Bruce Fields <bfields@redhat.com>

    [ Upstream commit ae3c57b5ca47665dc3416447a5534a9796096d86 ]

    The nfsd open code has always kept separate read-only, read-write, and
    write-only opens as necessary to ensure that when a client closes or
    downgrades, we don't retain more access than necessary.

    Also, I didn't realize the cache behaved this way when I wrote
    94415b06eb8a "nfsd4: a client's own opens needn't prevent delegations".
    There I assumed fi_fds[O_WRONLY] and fi_fds[O_RDWR] would always be
    distinct. The violation of that assumption is triggering a
    WARN_ON_ONCE() and could also cause the server to give out a delegation
    when it shouldn't.

    Fixes: 94415b06eb8a ("nfsd4: a client's own opens needn't prevent delegations")
    Tested-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/nfsd/filecache.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/fs/nfsd/filecache.c b/fs/nfsd/filecache.c
    index c8b9d2667ee6f..3c6c2f7d1688b 100644
    --- a/fs/nfsd/filecache.c
    +++ b/fs/nfsd/filecache.c
    @@ -889,7 +889,7 @@ nfsd_file_find_locked(struct inode *inode, unsigned int may_flags,

    hlist_for_each_entry_rcu(nf, &nfsd_file_hashtbl[hashval].nfb_head,
    nf_node, lockdep_is_held(&nfsd_file_hashtbl[hashval].nfb_lock)) {
    - if ((need & nf->nf_may) != need)
    + if (nf->nf_may != need)
    continue;
    if (nf->nf_inode != inode)
    continue;
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-10-27 17:40    [W:4.798 / U:0.500 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site