diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-03-01 11:17:50 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-03-01 11:17:50 -0500 |
commit | 0cb3284b535bd5eacc287632b55150c8e5d9edc7 (patch) | |
tree | ef1bdc9d47837a16ff306c9c6fcfa2659511dc4b /fs/nfs/callback_proc.c | |
parent | a59c30acfbe701dc991f4f84abce27818120a2ac (diff) |
NFSv4.1: Get rid of NFS4CLNT_LAYOUTRECALL
The NFS4CLNT_LAYOUTRECALL bit is a long-term impediment to scalability. It
basically stops all other recalls by a given server once any layout recall
is requested.
If the recall is for a different file, then we don't care.
If the recall applies to the same file, then we're in one of two situations:
Either we are in the case of a replay of an existing request, in which case
the session is supposed to deal with matters, or we are dealing with a
completely different request, in which case we should just try to process
it.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/callback_proc.c')
-rw-r--r-- | fs/nfs/callback_proc.c | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c index f71978d107d0..0e0865e38065 100644 --- a/fs/nfs/callback_proc.c +++ b/fs/nfs/callback_proc.c | |||
@@ -233,17 +233,13 @@ static u32 initiate_bulk_draining(struct nfs_client *clp, | |||
233 | static u32 do_callback_layoutrecall(struct nfs_client *clp, | 233 | static u32 do_callback_layoutrecall(struct nfs_client *clp, |
234 | struct cb_layoutrecallargs *args) | 234 | struct cb_layoutrecallargs *args) |
235 | { | 235 | { |
236 | u32 res = NFS4ERR_DELAY; | 236 | u32 res; |
237 | 237 | ||
238 | dprintk("%s enter, type=%i\n", __func__, args->cbl_recall_type); | 238 | dprintk("%s enter, type=%i\n", __func__, args->cbl_recall_type); |
239 | if (test_and_set_bit(NFS4CLNT_LAYOUTRECALL, &clp->cl_state)) | ||
240 | goto out; | ||
241 | if (args->cbl_recall_type == RETURN_FILE) | 239 | if (args->cbl_recall_type == RETURN_FILE) |
242 | res = initiate_file_draining(clp, args); | 240 | res = initiate_file_draining(clp, args); |
243 | else | 241 | else |
244 | res = initiate_bulk_draining(clp, args); | 242 | res = initiate_bulk_draining(clp, args); |
245 | clear_bit(NFS4CLNT_LAYOUTRECALL, &clp->cl_state); | ||
246 | out: | ||
247 | dprintk("%s returning %i\n", __func__, res); | 243 | dprintk("%s returning %i\n", __func__, res); |
248 | return res; | 244 | return res; |
249 | 245 | ||