Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8b39f2b4 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

SUNRPC: Ensure we exit early in case of an encode error



All errors from call_encode(), with exception of EAGAIN are fatal, so we
should immediately return instead of proceeding to xprt_transmit().

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 2116271a
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -890,7 +890,6 @@ call_encode(struct rpc_task *task)
			task->tk_msg.rpc_argp);
	if (task->tk_status == -ENOMEM) {
		/* XXX: Is this sane? */
		rpc_delay(task, 3*HZ);
		task->tk_status = -EAGAIN;
	}
}
@@ -1048,9 +1047,15 @@ call_transmit(struct rpc_task *task)
		BUG_ON(task->tk_rqstp->rq_bytes_sent != 0);
		call_encode(task);
		/* Did the encode result in an error condition? */
		if (task->tk_status != 0)
		if (task->tk_status != 0) {
			/* Was the error nonfatal? */
			if (task->tk_status == -EAGAIN)
				rpc_delay(task, HZ >> 4);
			else
				rpc_exit(task, task->tk_status);
			return;
		}
	}
	xprt_transmit(task);
	if (task->tk_status < 0)
		return;