diff options
author | Jeff Layton <jlayton@redhat.com> | 2012-03-21 09:52:02 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2012-03-26 11:49:47 -0400 |
commit | a52d726bbd928164609e6abc4dc967e819dbf09c (patch) | |
tree | 604df65589a95311ab297f80ce377e82525ce597 /fs/nfsd/nfs4recover.c | |
parent | 1df00640c9111c881633d9b219f18e66c52599ec (diff) |
nfsd: convert nfs4_client->cl_cb_flags to a generic flags field
We'll need a way to flag the nfs4_client as already being recorded on
stable storage so that we don't continually upcall. Currently, that's
recorded in the cl_firststate field of the client struct. Using an
entire u32 to store a flag is rather wasteful though.
The cl_cb_flags field is only using 2 bits right now, so repurpose that
to a generic flags field. Rename NFSD4_CLIENT_KILL to
NFSD4_CLIENT_CB_KILL to make it evident that it's part of the callback
flags. Add a mask that we can use for existing checks that look to see
whether any flags are set, so that the new flags don't interfere.
Convert all references to cl_firstate to the NFSD4_CLIENT_STABLE flag,
and add a new NFSD4_CLIENT_RECLAIM_COMPLETE flag.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfs4recover.c')
-rw-r--r-- | fs/nfsd/nfs4recover.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c index 0b3e875d1abd..6523809839c3 100644 --- a/fs/nfsd/nfs4recover.c +++ b/fs/nfsd/nfs4recover.c | |||
@@ -126,9 +126,8 @@ void nfsd4_create_clid_dir(struct nfs4_client *clp) | |||
126 | 126 | ||
127 | dprintk("NFSD: nfsd4_create_clid_dir for \"%s\"\n", dname); | 127 | dprintk("NFSD: nfsd4_create_clid_dir for \"%s\"\n", dname); |
128 | 128 | ||
129 | if (clp->cl_firststate) | 129 | if (test_and_set_bit(NFSD4_CLIENT_STABLE, &clp->cl_flags)) |
130 | return; | 130 | return; |
131 | clp->cl_firststate = 1; | ||
132 | if (!rec_file) | 131 | if (!rec_file) |
133 | return; | 132 | return; |
134 | status = nfs4_save_creds(&original_cred); | 133 | status = nfs4_save_creds(&original_cred); |
@@ -271,13 +270,13 @@ nfsd4_remove_clid_dir(struct nfs4_client *clp) | |||
271 | const struct cred *original_cred; | 270 | const struct cred *original_cred; |
272 | int status; | 271 | int status; |
273 | 272 | ||
274 | if (!rec_file || !clp->cl_firststate) | 273 | if (!rec_file || !test_bit(NFSD4_CLIENT_STABLE, &clp->cl_flags)) |
275 | return; | 274 | return; |
276 | 275 | ||
277 | status = mnt_want_write_file(rec_file); | 276 | status = mnt_want_write_file(rec_file); |
278 | if (status) | 277 | if (status) |
279 | goto out; | 278 | goto out; |
280 | clp->cl_firststate = 0; | 279 | clear_bit(NFSD4_CLIENT_STABLE, &clp->cl_flags); |
281 | 280 | ||
282 | status = nfs4_save_creds(&original_cred); | 281 | status = nfs4_save_creds(&original_cred); |
283 | if (status < 0) | 282 | if (status < 0) |