Commit 0cb3284b535bd5eacc287632b55150c8e5d9edc7

Authored by Trond Myklebust
1 parent a59c30acfb

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>

Showing 2 changed files with 1 additions and 6 deletions Side-by-side Diff

fs/nfs/callback_proc.c
... ... @@ -233,17 +233,13 @@
233 233 static u32 do_callback_layoutrecall(struct nfs_client *clp,
234 234 struct cb_layoutrecallargs *args)
235 235 {
236   - u32 res = NFS4ERR_DELAY;
  236 + u32 res;
237 237  
238 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 239 if (args->cbl_recall_type == RETURN_FILE)
242 240 res = initiate_file_draining(clp, args);
243 241 else
244 242 res = initiate_bulk_draining(clp, args);
245   - clear_bit(NFS4CLNT_LAYOUTRECALL, &clp->cl_state);
246   -out:
247 243 dprintk("%s returning %i\n", __func__, res);
248 244 return res;
249 245  
... ... @@ -20,7 +20,6 @@
20 20 NFS4CLNT_RECLAIM_REBOOT,
21 21 NFS4CLNT_RECLAIM_NOGRACE,
22 22 NFS4CLNT_DELEGRETURN,
23   - NFS4CLNT_LAYOUTRECALL,
24 23 NFS4CLNT_SESSION_RESET,
25 24 NFS4CLNT_RECALL_SLOT,
26 25 NFS4CLNT_LEASE_CONFIRM,