nfsd4: extend state lock over seqid replay logic
authorJ. Bruce Fields <bfields@redhat.com>
Tue, 30 Aug 2011 21:02:48 +0000 (17:02 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Thu, 1 Sep 2011 11:07:59 +0000 (07:07 -0400)
commit5ec094c1096ab3bb795651855d53f18daa26afde
treecb9cbbd50698cf039cf81823d40e073fbcdf53da
parent9072d5c66b17292e3cd055bc8057b2ce6af2fe34
nfsd4: extend state lock over seqid replay logic

There are currently a couple races in the seqid replay code: a
retransmission could come while we're still encoding the original reply,
or a new seqid-mutating call could come as we're encoding a replay.

So, extend the state lock over the encoding (both encoding of a replayed
reply and caching of the original encoded reply).

I really hate doing this, and previously added the stateowner
reference-counting code to avoid it (which was insufficient)--but I
don't see a less complicated alternative at the moment.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4proc.c
fs/nfsd/nfs4state.c