[PATCH net 1/2] net/smc: non blocking recvmsg() return -EAGAIN when no data and signal_pending

From: Guangguan Wang
Date: Mon May 09 2022 - 07:58:57 EST


Non blocking sendmsg will return -EAGAIN when any signal pending
and no send space left, while non blocking recvmsg return -EINTR
when signal pending and no data received. This may makes confused.
As TCP returns -EAGAIN in the conditions descriped above. Align the
behavior of smc with TCP.

Signed-off-by: Guangguan Wang <guangguan.wang@xxxxxxxxxxxxxxxxx>
---
net/smc/smc_rx.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/smc/smc_rx.c b/net/smc/smc_rx.c
index 51e8eb2933ff..338b9ef806e8 100644
--- a/net/smc/smc_rx.c
+++ b/net/smc/smc_rx.c
@@ -355,12 +355,12 @@ int smc_rx_recvmsg(struct smc_sock *smc, struct msghdr *msg,
}
break;
}
+ if (!timeo)
+ return -EAGAIN;
if (signal_pending(current)) {
read_done = sock_intr_errno(timeo);
break;
}
- if (!timeo)
- return -EAGAIN;
}

if (!smc_rx_data_available(conn)) {
--
2.24.3 (Apple Git-128)