提交 78670e69 编写于 作者: L liuyacan 提交者: Zheng Zengkai

net/smc: sync err code when tcp connection was refused

stable inclusion
from stable-v5.10.114
commit 83d128daff2e7f92cde38ebf7b06f83f77d79ba0
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I5IY1V

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=83d128daff2e7f92cde38ebf7b06f83f77d79ba0

--------------------------------

[ Upstream commit 4e2e65e2 ]

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.

Fixes: 50717a37 ("net/smc: nonblocking connect rework")
Signed-off-by: Nliuyacan <liuyacan@corp.netease.com>
Reviewed-by: NTony Lu <tonylu@linux.alibaba.com>
Acked-by: NKarsten Graul <kgraul@linux.ibm.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
Signed-off-by: NSasha Levin <sashal@kernel.org>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
Acked-by: NXie XiuQi <xiexiuqi@huawei.com>
上级 895a9950
...@@ -1057,6 +1057,8 @@ static void smc_connect_work(struct work_struct *work) ...@@ -1057,6 +1057,8 @@ static void smc_connect_work(struct work_struct *work)
smc->sk.sk_state = SMC_CLOSED; smc->sk.sk_state = SMC_CLOSED;
if (rc == -EPIPE || rc == -EAGAIN) if (rc == -EPIPE || rc == -EAGAIN)
smc->sk.sk_err = EPIPE; smc->sk.sk_err = EPIPE;
else if (rc == -ECONNREFUSED)
smc->sk.sk_err = ECONNREFUSED;
else if (signal_pending(current)) else if (signal_pending(current))
smc->sk.sk_err = -sock_intr_errno(timeo); smc->sk.sk_err = -sock_intr_errno(timeo);
sock_put(&smc->sk); /* passive closing */ sock_put(&smc->sk); /* passive closing */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册