• J. Bruce Fields's avatar
    nfsd4: a client's own opens needn't prevent delegations · 94415b06
    J. Bruce Fields authored
    We recently fixed lease breaking so that a client's actions won't break
    its own delegations.
    
    But we still have an unnecessary self-conflict when granting
    delegations: a client's own write opens will prevent us from handing out
    a read delegation even when no other client has the file open for write.
    
    Fix that by turning off the checks for conflicting opens under
    vfs_setlease, and instead performing those checks in the nfsd code.
    
    We don't depend much on locks here: instead we acquire the delegation,
    then check for conflicts, and drop the delegation again if we find any.
    
    The check beforehand is an optimization of sorts, just to avoid
    acquiring the delegation unnecessarily.  There's a race where the first
    check could cause us to deny the delegation when we could have granted
    it.  But, that's OK, delegation grants are optional (and probably not
    even a good idea in that case).
    Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    94415b06
nfs4state.c 206 KB