• J. Bruce Fields's avatar
    nfsd: Cache R, RW, and W opens separately · ae3c57b5
    J. Bruce Fields authored
    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
    94415b06 "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: 94415b06 ("nfsd4: a client's own opens needn't prevent delegations")
    Tested-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
    ae3c57b5
filecache.c 26.8 KB