Revert "nfsd4: a client's own opens needn't prevent delegations"
authorJ. Bruce Fields <bfields@redhat.com>
Mon, 8 Mar 2021 15:52:29 +0000 (10:52 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 20 Mar 2021 09:43:44 +0000 (10:43 +0100)
commitdf8596f5774387f92133e0e5b7e05808ff6595d7
tree743fcffbe795cb1206c63414001fb9b7c68c217b
parent894ecf0cb505561b9f37b302b7479eea939b0790
Revert "nfsd4: a client's own opens needn't prevent delegations"

commit 6ee65a773096ab3f39d9b00311ac983be5bdeb7c upstream.

This reverts commit 94415b06eb8aed13481646026dc995f04a3a534a.

That commit claimed to allow a client to get a read delegation when it
was the only writer.  Actually it allowed a client to get a read
delegation when *any* client has a write open!

The main problem is that it's depending on nfs4_clnt_odstate structures
that are actually only maintained for pnfs exports.

This causes clients to miss writes performed by other clients, even when
there have been intervening closes and opens, violating close-to-open
cache consistency.

We can do this a different way, but first we should just revert this.

I've added pynfs 4.1 test DELEG19 to test for this, as I should have
done originally!

Cc: stable@vger.kernel.org
Reported-by: Timo Rothenpieler <timo@rothenpieler.org>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/locks.c
fs/nfsd/nfs4state.c