Blob Blame History Raw
From: "D. Wythe" <alibuda@linux.alibaba.com>
Date: Tue, 15 Feb 2022 16:24:50 +0800
Subject: net/smc: return ETIMEDOUT when smc_connect_clc() timeout
Patch-mainline: v5.18-rc1
Git-commit: 1ce22047067490c3a465808556a99b2ab95bf046
References: jsc#PED-612

When smc_connect_clc() times out, it will return -EAGAIN(tcp_recvmsg
retuns -EAGAIN while timeout), then this value will passed to the
application, which is quite confusing to the applications, makes
inconsistency with TCP.

From the manual of connect, ETIMEDOUT is more suitable, and this patch
try convert EAGAIN to ETIMEDOUT in that case.

Signed-off-by: D. Wythe <alibuda@linux.alibaba.com>
Reviewed-by: Karsten Graul <kgraul@linux.ibm.com>
Link: https://lore.kernel.org/r/1644913490-21594-1-git-send-email-alibuda@linux.alibaba.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Acked-by: Lee, Chun-Yi <jlee@suse.com>
---
 net/smc/af_smc.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

--- a/net/smc/af_smc.c
+++ b/net/smc/af_smc.c
@@ -1382,8 +1382,14 @@ static int __smc_connect(struct smc_sock
 
 	/* perform CLC handshake */
 	rc = smc_connect_clc(smc, aclc2, ini);
-	if (rc)
+	if (rc) {
+		/* -EAGAIN on timeout, see tcp_recvmsg() */
+		if (rc == -EAGAIN) {
+			rc = -ETIMEDOUT;
+			smc->sk.sk_err = ETIMEDOUT;
+		}
 		goto vlan_cleanup;
+	}
 
 	/* check if smc modes and versions of CLC proposal and accept match */
 	rc = smc_connect_check_aclc(ini, aclc);