|
@@ -527,6 +527,10 @@ static int xs_local_send_request(struct rpc_task *task)
|
|
|
true, &sent);
|
|
|
dprintk("RPC: %s(%u) = %d\n",
|
|
|
__func__, xdr->len - req->rq_bytes_sent, status);
|
|
|
+
|
|
|
+ if (status == -EAGAIN && sock_writeable(transport->inet))
|
|
|
+ status = -ENOBUFS;
|
|
|
+
|
|
|
if (likely(sent > 0) || status == 0) {
|
|
|
req->rq_bytes_sent += sent;
|
|
|
req->rq_xmit_bytes_sent += sent;
|
|
@@ -590,6 +594,9 @@ static int xs_udp_send_request(struct rpc_task *task)
|
|
|
if (status == -EPERM)
|
|
|
goto process_status;
|
|
|
|
|
|
+ if (status == -EAGAIN && sock_writeable(transport->inet))
|
|
|
+ status = -ENOBUFS;
|
|
|
+
|
|
|
if (sent > 0 || status == 0) {
|
|
|
req->rq_xmit_bytes_sent += sent;
|
|
|
if (sent >= req->rq_slen)
|
|
@@ -687,6 +694,8 @@ static int xs_tcp_send_request(struct rpc_task *task)
|
|
|
status = -EAGAIN;
|
|
|
break;
|
|
|
}
|
|
|
+ if (status == -EAGAIN && sk_stream_is_writeable(transport->inet))
|
|
|
+ status = -ENOBUFS;
|
|
|
|
|
|
switch (status) {
|
|
|
case -ENOTSOCK:
|