[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220417123307.1094747-1-yacanliu@163.com>
Date: Sun, 17 Apr 2022 20:33:07 +0800
From: yacanliu@....com
To: kgraul@...ux.ibm.com, davem@...emloft.net, kuba@...nel.org,
pabeni@...hat.com
Cc: linux-s390@...r.kernel.org, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org, liuyacan <liuyacan@...p.netease.com>
Subject: [PATCH] net/smc: sync err info when TCP connection is refused
From: liuyacan <liuyacan@...p.netease.com>
In the current implementation, when TCP initiates a connection
to an unavailable [ip,port], ECONNREFUSED will be stored in the
TCP socket, but SMC will not. However, some apps (like curl) use
getsockopt(,,SO_ERROR,,) to get the error information, which makes
them miss the error message and behave strangely.
Signed-off-by: liuyacan <liuyacan@...p.netease.com>
---
net/smc/af_smc.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
index fc7b6eb22..bbb1a4ce5 100644
--- a/net/smc/af_smc.c
+++ b/net/smc/af_smc.c
@@ -1475,6 +1475,8 @@ static void smc_connect_work(struct work_struct *work)
smc->sk.sk_state = SMC_CLOSED;
if (rc == -EPIPE || rc == -EAGAIN)
smc->sk.sk_err = EPIPE;
+ else if (rc == -ECONNREFUSED)
+ smc->sk.sk_err = ECONNREFUSED;
else if (signal_pending(current))
smc->sk.sk_err = -sock_intr_errno(timeo);
sock_put(&smc->sk); /* passive closing */
--
2.20.1
Powered by blists - more mailing lists