• NeilBrown's avatar
    NFSv4: When returning a delegation, don't reclaim an incompatible open mode. · 39f897fd
    NeilBrown authored
    It is possible to have an active open with one mode, and a delegation
    for the same file with a different mode.
    In particular, a WR_ONLY open and an RD_ONLY delegation.
    This happens if a WR_ONLY open is followed by a RD_ONLY open which
    provides a delegation, but is then close.
    
    When returning the delegation, we currently try to claim opens for
    every open type (n_rdwr, n_rdonly, n_wronly).  As there is no harm
    in claiming an open for a mode that we already have, this is often
    simplest.
    
    However if the delegation only provides a subset of the modes that we
    currently have open, this will produce an error from the server.
    
    So when claiming open modes prior to returning a delegation, skip the
    open request if the mode is not covered by the delegation - the open_stateid
    must already cover that mode, so there is nothing to do.
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
    39f897fd
nfs4proc.c 235 KB