diff mbox series

net/smc: sync err info when TCP connection is refused

Message ID 20220417123307.1094747-1-yacanliu@163.com (mailing list archive)
State Changes Requested
Delegated to: Netdev Maintainers
Headers show
Series net/smc: sync err info when TCP connection is refused | expand

Checks

Context Check Description
netdev/fixes_present success Fixes tag not required for -next series
netdev/subject_prefix warning Target tree name not specified in the subject
netdev/cover_letter success Single patches do not need cover letters
netdev/patch_count success Link
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 0 this patch: 0
netdev/cc_maintainers success CCed 6 of 6 maintainers
netdev/build_clang success Errors and warnings before: 0 this patch: 0
netdev/module_param success Was 0 now: 0
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 0 this patch: 0
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 8 lines checked
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0
netdev/tree_selection success Guessing tree name failed - patch did not apply

Commit Message

yacanliu@163.com April 17, 2022, 12:33 p.m. UTC
From: liuyacan <liuyacan@corp.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@corp.netease.com>
---
 net/smc/af_smc.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Tony Lu April 19, 2022, 10:23 a.m. UTC | #1
On Sun, Apr 17, 2022 at 08:33:07PM +0800, yacanliu@163.com wrote:
> From: liuyacan <liuyacan@corp.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@corp.netease.com>

This fix works for me. I have tested it with curl for unavailable
address.

This patch missed net or net-next tag, I think net is preferred.

Reviewed-by: Tony Lu <tonylu@linux.alibaba.com>

Thank you,
Tony Lu
Karsten Graul April 19, 2022, 10:37 a.m. UTC | #2
On 19/04/2022 12:23, Tony Lu wrote:
> On Sun, Apr 17, 2022 at 08:33:07PM +0800, yacanliu@163.com wrote:
>> From: liuyacan <liuyacan@corp.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@corp.netease.com>
> 
> This fix works for me. I have tested it with curl for unavailable
> address.
> 
> This patch missed net or net-next tag, I think net is preferred.
> 
> Reviewed-by: Tony Lu <tonylu@linux.alibaba.com>
> 
> Thank you,
> Tony Lu

Thank you both for the fix and the test!

Acked-by: Karsten Graul <kgraul@linux.ibm.com>
Paolo Abeni April 21, 2022, 8:09 a.m. UTC | #3
On Sun, 2022-04-17 at 20:33 +0800, yacanliu@163.com wrote:
> From: liuyacan <liuyacan@corp.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@corp.netease.com>

Could you please formally re-submit for -net (inclusing NET into the
patch subj) with a suitable 'fixes' tag? You can retain the already
collected reviewed/ack-by tags.

Thanks!

Paolo
diff mbox series

Patch

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 */