mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 16:24:13 +08:00
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: Andy Adamson <andros@netapp.com> Acked-by: Bruce Fields <bfields@redhat.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
64c2ce8b72
commit
4b5b3ba16b
@ -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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
{
|
{
|
||||||
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,
|
|||||||
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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user