Message ID | 20220512030820.73848-1-guangguan.wang@linux.alibaba.com (mailing list archive) |
---|---|
State | Accepted |
Commit | f3c46e41b32b6266cf60b0985c61748f53bf1c61 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,v2] net/smc: non blocking recvmsg() return -EAGAIN when no data and signal_pending | expand |
On 12/05/2022 05:08, Guangguan Wang wrote: > 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 described above. Align the > behavior of smc with TCP. > > Fixes: 846e344eb722 ("net/smc: add receive timeout check") > Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com> > Reviewed-by: Tony Lu <tonylu@linux.alibaba.com> > --- Acked-by: Karsten Graul <kgraul@linux.ibm.com> Thank you.
Hello: This patch was applied to netdev/net.git (master) by Jakub Kicinski <kuba@kernel.org>: On Thu, 12 May 2022 11:08:20 +0800 you wrote: > 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 described above. Align the > behavior of smc with TCP. > > Fixes: 846e344eb722 ("net/smc: add receive timeout check") > Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com> > Reviewed-by: Tony Lu <tonylu@linux.alibaba.com> > > [...] Here is the summary with links: - [net,v2] net/smc: non blocking recvmsg() return -EAGAIN when no data and signal_pending https://git.kernel.org/netdev/net/c/f3c46e41b32b You are awesome, thank you!
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)) {