]> git.baikalelectronics.ru Git - kernel.git/commit
nfsd4: a client's own opens needn't prevent delegations
authorJ. Bruce Fields <bfields@redhat.com>
Tue, 7 Jul 2020 13:28:05 +0000 (09:28 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 13 Jul 2020 21:28:46 +0000 (17:28 -0400)
commit035add27f10617a78383d43faec6b664c3731315
tree78d8843cb8a3b8fe4370f214f35be02ecdc77257
parent7f4a0c4f9e89c144fd888b93d60253fc4ffd1e8b
nfsd4: a client's own opens needn't prevent delegations

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: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/locks.c
fs/nfsd/nfs4state.c