|
@@ -58,7 +58,6 @@ static void call_start(struct rpc_task *task);
|
|
static void call_reserve(struct rpc_task *task);
|
|
static void call_reserve(struct rpc_task *task);
|
|
static void call_reserveresult(struct rpc_task *task);
|
|
static void call_reserveresult(struct rpc_task *task);
|
|
static void call_allocate(struct rpc_task *task);
|
|
static void call_allocate(struct rpc_task *task);
|
|
-static void call_encode(struct rpc_task *task);
|
|
|
|
static void call_decode(struct rpc_task *task);
|
|
static void call_decode(struct rpc_task *task);
|
|
static void call_bind(struct rpc_task *task);
|
|
static void call_bind(struct rpc_task *task);
|
|
static void call_bind_status(struct rpc_task *task);
|
|
static void call_bind_status(struct rpc_task *task);
|
|
@@ -70,9 +69,9 @@ static void call_refreshresult(struct rpc_task *task);
|
|
static void call_timeout(struct rpc_task *task);
|
|
static void call_timeout(struct rpc_task *task);
|
|
static void call_connect(struct rpc_task *task);
|
|
static void call_connect(struct rpc_task *task);
|
|
static void call_connect_status(struct rpc_task *task);
|
|
static void call_connect_status(struct rpc_task *task);
|
|
-static __be32 * call_header(struct rpc_task *task);
|
|
|
|
-static __be32 * call_verify(struct rpc_task *task);
|
|
|
|
|
|
|
|
|
|
+static __be32 *rpc_encode_header(struct rpc_task *task);
|
|
|
|
+static __be32 *rpc_verify_header(struct rpc_task *task);
|
|
static int rpc_ping(struct rpc_clnt *clnt, int flags);
|
|
static int rpc_ping(struct rpc_clnt *clnt, int flags);
|
|
|
|
|
|
static void rpc_register_client(struct rpc_clnt *clnt)
|
|
static void rpc_register_client(struct rpc_clnt *clnt)
|
|
@@ -876,7 +875,7 @@ rpc_xdr_buf_init(struct xdr_buf *buf, void *start, size_t len)
|
|
* 3. Encode arguments of an RPC call
|
|
* 3. Encode arguments of an RPC call
|
|
*/
|
|
*/
|
|
static void
|
|
static void
|
|
-call_encode(struct rpc_task *task)
|
|
|
|
|
|
+rpc_xdr_encode(struct rpc_task *task)
|
|
{
|
|
{
|
|
struct rpc_rqst *req = task->tk_rqstp;
|
|
struct rpc_rqst *req = task->tk_rqstp;
|
|
kxdrproc_t encode;
|
|
kxdrproc_t encode;
|
|
@@ -891,13 +890,14 @@ call_encode(struct rpc_task *task)
|
|
(char *)req->rq_buffer + req->rq_callsize,
|
|
(char *)req->rq_buffer + req->rq_callsize,
|
|
req->rq_rcvsize);
|
|
req->rq_rcvsize);
|
|
|
|
|
|
- /* Encode header and provided arguments */
|
|
|
|
- encode = task->tk_msg.rpc_proc->p_encode;
|
|
|
|
- if (!(p = call_header(task))) {
|
|
|
|
- printk(KERN_INFO "RPC: call_header failed, exit EIO\n");
|
|
|
|
|
|
+ p = rpc_encode_header(task);
|
|
|
|
+ if (p == NULL) {
|
|
|
|
+ printk(KERN_INFO "RPC: couldn't encode RPC header, exit EIO\n");
|
|
rpc_exit(task, -EIO);
|
|
rpc_exit(task, -EIO);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ encode = task->tk_msg.rpc_proc->p_encode;
|
|
if (encode == NULL)
|
|
if (encode == NULL)
|
|
return;
|
|
return;
|
|
|
|
|
|
@@ -1056,7 +1056,7 @@ call_transmit(struct rpc_task *task)
|
|
/* Encode here so that rpcsec_gss can use correct sequence number. */
|
|
/* Encode here so that rpcsec_gss can use correct sequence number. */
|
|
if (rpc_task_need_encode(task)) {
|
|
if (rpc_task_need_encode(task)) {
|
|
BUG_ON(task->tk_rqstp->rq_bytes_sent != 0);
|
|
BUG_ON(task->tk_rqstp->rq_bytes_sent != 0);
|
|
- call_encode(task);
|
|
|
|
|
|
+ rpc_xdr_encode(task);
|
|
/* Did the encode result in an error condition? */
|
|
/* Did the encode result in an error condition? */
|
|
if (task->tk_status != 0) {
|
|
if (task->tk_status != 0) {
|
|
/* Was the error nonfatal? */
|
|
/* Was the error nonfatal? */
|
|
@@ -1240,8 +1240,7 @@ call_decode(struct rpc_task *task)
|
|
goto out_retry;
|
|
goto out_retry;
|
|
}
|
|
}
|
|
|
|
|
|
- /* Verify the RPC header */
|
|
|
|
- p = call_verify(task);
|
|
|
|
|
|
+ p = rpc_verify_header(task);
|
|
if (IS_ERR(p)) {
|
|
if (IS_ERR(p)) {
|
|
if (p == ERR_PTR(-EAGAIN))
|
|
if (p == ERR_PTR(-EAGAIN))
|
|
goto out_retry;
|
|
goto out_retry;
|
|
@@ -1259,7 +1258,7 @@ call_decode(struct rpc_task *task)
|
|
return;
|
|
return;
|
|
out_retry:
|
|
out_retry:
|
|
task->tk_status = 0;
|
|
task->tk_status = 0;
|
|
- /* Note: call_verify() may have freed the RPC slot */
|
|
|
|
|
|
+ /* Note: rpc_verify_header() may have freed the RPC slot */
|
|
if (task->tk_rqstp == req) {
|
|
if (task->tk_rqstp == req) {
|
|
req->rq_received = req->rq_rcv_buf.len = 0;
|
|
req->rq_received = req->rq_rcv_buf.len = 0;
|
|
if (task->tk_client->cl_discrtry)
|
|
if (task->tk_client->cl_discrtry)
|
|
@@ -1306,11 +1305,8 @@ call_refreshresult(struct rpc_task *task)
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- * Call header serialization
|
|
|
|
- */
|
|
|
|
static __be32 *
|
|
static __be32 *
|
|
-call_header(struct rpc_task *task)
|
|
|
|
|
|
+rpc_encode_header(struct rpc_task *task)
|
|
{
|
|
{
|
|
struct rpc_clnt *clnt = task->tk_client;
|
|
struct rpc_clnt *clnt = task->tk_client;
|
|
struct rpc_rqst *req = task->tk_rqstp;
|
|
struct rpc_rqst *req = task->tk_rqstp;
|
|
@@ -1330,11 +1326,8 @@ call_header(struct rpc_task *task)
|
|
return p;
|
|
return p;
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- * Reply header verification
|
|
|
|
- */
|
|
|
|
static __be32 *
|
|
static __be32 *
|
|
-call_verify(struct rpc_task *task)
|
|
|
|
|
|
+rpc_verify_header(struct rpc_task *task)
|
|
{
|
|
{
|
|
struct kvec *iov = &task->tk_rqstp->rq_rcv_buf.head[0];
|
|
struct kvec *iov = &task->tk_rqstp->rq_rcv_buf.head[0];
|
|
int len = task->tk_rqstp->rq_rcv_buf.len >> 2;
|
|
int len = task->tk_rqstp->rq_rcv_buf.len >> 2;
|
|
@@ -1408,7 +1401,7 @@ call_verify(struct rpc_task *task)
|
|
task->tk_action = call_bind;
|
|
task->tk_action = call_bind;
|
|
goto out_retry;
|
|
goto out_retry;
|
|
case RPC_AUTH_TOOWEAK:
|
|
case RPC_AUTH_TOOWEAK:
|
|
- printk(KERN_NOTICE "call_verify: server %s requires stronger "
|
|
|
|
|
|
+ printk(KERN_NOTICE "RPC: server %s requires stronger "
|
|
"authentication.\n", task->tk_client->cl_server);
|
|
"authentication.\n", task->tk_client->cl_server);
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|