diff options
author | J. Bruce Fields <bfields@redhat.com> | 2011-09-17 02:12:38 +0200 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2011-09-19 14:39:34 +0200 |
commit | f7a4d872078a5e143d88adb561627f637046b05a (patch) | |
tree | 9a61699ca2705a48a46e5c276f587f1825dd27a0 /fs/nfsd/state.h | |
parent | nfsd4: construct stateid from clientid and counter (diff) | |
download | linux-f7a4d872078a5e143d88adb561627f637046b05a.tar.xz linux-f7a4d872078a5e143d88adb561627f637046b05a.zip |
nfsd4: hash closed stateid's like any other
Look up closed stateid's in the stateid hash like any other stateid
rather than searching the close lru.
This is simpler, and fixes a bug: currently we handle only the case of a
close that is the last close for a given stateowner, but not the case of
a close for a stateowner that still has active opens on other files.
Thus in a case like:
open(owner, file1)
open(owner, file2)
close(owner, file2)
close(owner, file2)
the final close won't be recognized as a retransmission.
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/state.h')
-rw-r--r-- | fs/nfsd/state.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h index d6aec4f8d3dd..da68bf66a3d7 100644 --- a/fs/nfsd/state.h +++ b/fs/nfsd/state.h @@ -76,7 +76,9 @@ struct nfs4_stid { #define NFS4_OPEN_STID 1 #define NFS4_LOCK_STID 2 #define NFS4_DELEG_STID 4 - char sc_type; +/* For an open stateid kept around *only* to process close replays: */ +#define NFS4_CLOSED_STID 8 + unsigned char sc_type; struct list_head sc_hash; stateid_t sc_stateid; }; |