提交 4b5b3ba1 编写于 作者: A Andy Adamson 提交者: Trond Myklebust

SUNRPC move svc_drop to caller of svc_process_common

The NFSv4.1 shared back channel does not need to call svc_drop because the
callback service never outlives the single connection it services, and it
reuses it's buffers and keeps the trasport.
Signed-off-by: NAndy Adamson <andros@netapp.com>
Acked-by: NBruce Fields <bfields@redhat.com>
Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
上级 64c2ce8b
...@@ -1147,7 +1147,6 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) ...@@ -1147,7 +1147,6 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
dropit: dropit:
svc_authorise(rqstp); /* doesn't hurt to call this twice */ svc_authorise(rqstp); /* doesn't hurt to call this twice */
dprintk("svc: svc_process dropit\n"); dprintk("svc: svc_process dropit\n");
svc_drop(rqstp);
return 0; return 0;
err_short_len: err_short_len:
...@@ -1218,7 +1217,6 @@ svc_process(struct svc_rqst *rqstp) ...@@ -1218,7 +1217,6 @@ svc_process(struct svc_rqst *rqstp)
struct kvec *resv = &rqstp->rq_res.head[0]; struct kvec *resv = &rqstp->rq_res.head[0];
struct svc_serv *serv = rqstp->rq_server; struct svc_serv *serv = rqstp->rq_server;
u32 dir; u32 dir;
int error;
/* /*
* Setup response xdr_buf. * Setup response xdr_buf.
...@@ -1246,11 +1244,13 @@ svc_process(struct svc_rqst *rqstp) ...@@ -1246,11 +1244,13 @@ svc_process(struct svc_rqst *rqstp)
return 0; return 0;
} }
error = svc_process_common(rqstp, argv, resv); /* Returns 1 for send, 0 for drop */
if (error <= 0) if (svc_process_common(rqstp, argv, resv))
return error; return svc_send(rqstp);
else {
return svc_send(rqstp); svc_drop(rqstp);
return 0;
}
} }
#if defined(CONFIG_NFS_V4_1) #if defined(CONFIG_NFS_V4_1)
...@@ -1264,7 +1264,6 @@ bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req, ...@@ -1264,7 +1264,6 @@ bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req,
{ {
struct kvec *argv = &rqstp->rq_arg.head[0]; struct kvec *argv = &rqstp->rq_arg.head[0];
struct kvec *resv = &rqstp->rq_res.head[0]; struct kvec *resv = &rqstp->rq_res.head[0];
int error;
/* Build the svc_rqst used by the common processing routine */ /* Build the svc_rqst used by the common processing routine */
rqstp->rq_xprt = serv->bc_xprt; rqstp->rq_xprt = serv->bc_xprt;
...@@ -1292,12 +1291,15 @@ bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req, ...@@ -1292,12 +1291,15 @@ bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req,
svc_getu32(argv); /* XID */ svc_getu32(argv); /* XID */
svc_getnl(argv); /* CALLDIR */ svc_getnl(argv); /* CALLDIR */
error = svc_process_common(rqstp, argv, resv); /* Returns 1 for send, 0 for drop */
if (error <= 0) if (svc_process_common(rqstp, argv, resv)) {
return error; memcpy(&req->rq_snd_buf, &rqstp->rq_res,
sizeof(req->rq_snd_buf));
memcpy(&req->rq_snd_buf, &rqstp->rq_res, sizeof(req->rq_snd_buf)); return bc_send(req);
return bc_send(req); } else {
/* Nothing to do to drop request */
return 0;
}
} }
EXPORT_SYMBOL(bc_svc_process); EXPORT_SYMBOL(bc_svc_process);
#endif /* CONFIG_NFS_V4_1 */ #endif /* CONFIG_NFS_V4_1 */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册