diff options
author | Andy Adamson <andros@netapp.com> | 2009-04-03 01:27:32 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@citi.umich.edu> | 2009-04-03 20:41:12 -0400 |
commit | 2f425878b6a71571341dcd3f9e9d1a6f6355da9c (patch) | |
tree | 52735958c1614458bd6b459040f977dfc3c3e9a9 /net/sunrpc/svc_xprt.c | |
parent | 20766016329eb4985c2c8b2a1b2333e0f865fdf9 (diff) |
nfsd: don't use the deferral service, return NFS4ERR_DELAY
On an NFSv4.1 server cache miss that causes an upcall, NFS4ERR_DELAY will be
returned. It is up to the NFSv4.1 client to resend only the operations that
have not been processed.
Initialize rq_usedeferral to 1 in svc_process(). It sill be turned off in
nfsd4_proc_compound() only when NFSv4.1 Sessions are used.
Note: this isn't an adequate solution on its own. It's acceptable as a way
to get some minimal 4.1 up and working, but we're going to have to find a
way to avoid returning DELAY in all common cases before 4.1 can really be
considered ready.
Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
[nfsd41: reverse rq_nodeferral negative logic]
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
[sunrpc: initialize rq_usedeferral]
Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Diffstat (limited to 'net/sunrpc/svc_xprt.c')
-rw-r--r-- | net/sunrpc/svc_xprt.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c index 1e66f2491460..600d0918e3ae 100644 --- a/net/sunrpc/svc_xprt.c +++ b/net/sunrpc/svc_xprt.c | |||
@@ -974,7 +974,7 @@ static struct cache_deferred_req *svc_defer(struct cache_req *req) | |||
974 | struct svc_rqst *rqstp = container_of(req, struct svc_rqst, rq_chandle); | 974 | struct svc_rqst *rqstp = container_of(req, struct svc_rqst, rq_chandle); |
975 | struct svc_deferred_req *dr; | 975 | struct svc_deferred_req *dr; |
976 | 976 | ||
977 | if (rqstp->rq_arg.page_len) | 977 | if (rqstp->rq_arg.page_len || !rqstp->rq_usedeferral) |
978 | return NULL; /* if more than a page, give up FIXME */ | 978 | return NULL; /* if more than a page, give up FIXME */ |
979 | if (rqstp->rq_deferred) { | 979 | if (rqstp->rq_deferred) { |
980 | dr = rqstp->rq_deferred; | 980 | dr = rqstp->rq_deferred; |