Received: by 2002:a05:7412:d8a:b0:e2:908c:2ebd with SMTP id b10csp3648800rdg; Wed, 18 Oct 2023 01:36:07 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGENvyXN3yr2/7juXhwHXuD2Ldna/M2phxs4qw+8O3dBiCRdn5YayG4CCB+DuvIELdaa03s X-Received: by 2002:a17:902:d512:b0:1c9:d667:4e4e with SMTP id b18-20020a170902d51200b001c9d6674e4emr5308661plg.65.1697618167240; Wed, 18 Oct 2023 01:36:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697618167; cv=none; d=google.com; s=arc-20160816; b=JinZQabIVPXQqutGe3aE+CgGgcR/CmBfMUrnDs8hgWwiCsy+4uMt7U7bLx7iz74k/P o0UAfscKJm+HJp4y6z1ff8eM3V54Jw3p+SE8K4Qo2rilSqOQfgB3fPKfCQgkTvfaZLai 6a4fHDB44LG9aoI7M4m9qVPpiv8A/vo/g+ocXvF2NYis+2iakgVquXE8SG2lkm3qtEma Ly1ez/SmluxBm9uYu+1tUWNCKuVm9nVr7X6HNue9kVeIsH3FJZ+GjWOX45kKgK7+U8Fb Gpm//M2EXH8yM8GLTuuKO9+Ywr4puc2L0bW+4bRde1uY2rCOLJrhBgVYN2Bo/BsBD7rb v0tA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=A4PPVR0G/J/gaXf+tu12kkgFWbS3XgMetKDXEuF6qKA=; fh=px+UIZWL4hL0LvVNTB4n9iH0WgTJxx++tviKyX6FVwM=; b=TtmSSKURJRqHcuiO9qnuCDCnHR536fLic1EQUA7Ww+r410RFXLwJwqzmkVHCUelgn2 RPxT+x+Rs74Qg6QXxt7EmDneZ6RSKNplE/pp6Tz2wNltmFIUSIsGFHkVuXhfe4+kBNIx SgUlZXoSPqnvBCXNLNJ56YCXB1tqqB4RmDDBMupWw3Defu5lqbN76qUzZ/wHw4Ip2cWr XZTPl3ZRNQa70tuBhcFmMiNw/7RW4+4denqGggkNjP0iTp1UhzecfWR1BfIU3Sa2rA7h 0nhfSMdUN+w11psC18UA1t0HR0oMOdzMGD8WI+XocKPgAHO55YVTAOW2unaqNPx0sTu9 LhDg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Return-Path: Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id e7-20020a17090301c700b001c4749ee72csi3672796plh.503.2023.10.18.01.36.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Oct 2023 01:36:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 0C3378023991; Wed, 18 Oct 2023 01:36:04 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344678AbjJRIfq (ORCPT + 99 others); Wed, 18 Oct 2023 04:35:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56368 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235151AbjJRIfo (ORCPT ); Wed, 18 Oct 2023 04:35:44 -0400 Received: from out30-124.freemail.mail.aliyun.com (out30-124.freemail.mail.aliyun.com [115.124.30.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7458BBA; Wed, 18 Oct 2023 01:35:41 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R211e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046056;MF=guangguan.wang@linux.alibaba.com;NM=1;PH=DS;RN=14;SR=0;TI=SMTPD_---0VuQCMVo_1697618136; Received: from 30.221.100.193(mailfrom:guangguan.wang@linux.alibaba.com fp:SMTPD_---0VuQCMVo_1697618136) by smtp.aliyun-inc.com; Wed, 18 Oct 2023 16:35:37 +0800 Message-ID: Date: Wed, 18 Oct 2023 16:35:33 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH net v2 2/2] net/smc: correct the reason code in smc_listen_find_device when fallback Content-Language: en-US To: dust.li@linux.alibaba.com, kgraul@linux.ibm.com, wenjia@linux.ibm.com, jaka@linux.ibm.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: tonylu@linux.alibaba.com, alibuda@linux.alibaba.com, guwen@linux.alibaba.com, linux-s390@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org References: <20231017124234.99574-1-guangguan.wang@linux.alibaba.com> <20231017124234.99574-3-guangguan.wang@linux.alibaba.com> <20231018070142.GY92403@linux.alibaba.com> From: Guangguan Wang In-Reply-To: <20231018070142.GY92403@linux.alibaba.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-0.7 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Wed, 18 Oct 2023 01:36:04 -0700 (PDT) On 2023/10/18 15:01, Dust Li wrote: > On Tue, Oct 17, 2023 at 08:42:34PM +0800, Guangguan Wang wrote: >> The ini->rc is used to store the last error happened when finding usable >> ism or rdma device in smc_listen_find_device, and is set by calling smc_ >> find_device_store_rc. Once the ini->rc is assigned to an none-zero value, >> the value can not be overwritten anymore. So the ini-rc should be set to >> the error reason only when an error actually occurs. >> >> When finding ISM/RDMA devices, device not found is not a real error, as >> not all machine have ISM/RDMA devices. Failures after device found, when >> initializing device or when initializing connection, is real errors, and >> should be store in ini->rc. >> >> SMC_CLC_DECL_DIFFPREFIX also is not a real error, as for SMC-RV2, it is >> not require same prefix. >> >> Signed-off-by: Guangguan Wang >> --- >> net/smc/af_smc.c | 12 +++--------- >> 1 file changed, 3 insertions(+), 9 deletions(-) >> >> diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c >> index b3a67a168495..21e9c6ec4d01 100644 >> --- a/net/smc/af_smc.c >> +++ b/net/smc/af_smc.c >> @@ -2163,10 +2163,8 @@ static void smc_find_ism_v2_device_serv(struct smc_sock *new_smc, >> } >> mutex_unlock(&smcd_dev_list.mutex); >> >> - if (!ini->ism_dev[0]) { >> - smc_find_device_store_rc(SMC_CLC_DECL_NOSMCD2DEV, ini); >> + if (!ini->ism_dev[0]) > > Hi Guangguan, > > Generally, I think this is right. Fallback in one kind of device should > not be the final fallback reason. > > But what if we have more than one device and failed more than once, for > example: > Let's say we have an ISM device, a RDMA device. First we looked the ISM device > and failed during the initialization, we got a fallback reason A. Then we > looked for the RDMA device, and failed again, with another reason B. > Finally, we fallback to TCP. What should fallback reason be ? IMO, the order of finding devices is defined by preference. ISM v2, ISM v1, RDMA v2, RDMA v1, the former the prefer. I think it should return the most preferred device's failure reason if found and failed during the initialization. So, here should return the first reason(reason A). > > OTOH, SMC_CLC_DECL_NOSMCD2DEV is only used here. Removing it would mean > that we would never see SMC_CLC_DECL_NOSMCD2DEV in the fallback reason, > which makes it meaningless. > Is SMC_CLC_DECL_NOSMCD2DEV really necessary? There is no reason names SMC_CLC_DECL_NOSMCR2DEV. Thanks, Guangguan Wang > Best regards, > Dust > >> goto not_found; >> - } >> >> smc_ism_get_system_eid(&eid); >> if (!smc_clc_match_eid(ini->negotiated_eid, smc_v2_ext, >> @@ -2216,9 +2214,9 @@ static void smc_find_ism_v1_device_serv(struct smc_sock *new_smc, >> rc = smc_listen_ism_init(new_smc, ini); >> if (!rc) >> return; /* V1 ISM device found */ >> + smc_find_device_store_rc(rc, ini); >> >> not_found: >> - smc_find_device_store_rc(rc, ini); >> ini->smcd_version &= ~SMC_V1; >> ini->ism_dev[0] = NULL; >> ini->is_smcd = false; >> @@ -2267,10 +2265,8 @@ static void smc_find_rdma_v2_device_serv(struct smc_sock *new_smc, >> ini->smcrv2.saddr = new_smc->clcsock->sk->sk_rcv_saddr; >> ini->smcrv2.daddr = smc_ib_gid_to_ipv4(smc_v2_ext->roce); >> rc = smc_find_rdma_device(new_smc, ini); >> - if (rc) { >> - smc_find_device_store_rc(rc, ini); >> + if (rc) >> goto not_found; >> - } >> if (!ini->smcrv2.uses_gateway) >> memcpy(ini->smcrv2.nexthop_mac, pclc->lcl.mac, ETH_ALEN); >> >> @@ -2331,8 +2327,6 @@ static int smc_listen_find_device(struct smc_sock *new_smc, >> >> /* check for matching IP prefix and subnet length (V1) */ >> prfx_rc = smc_listen_prfx_check(new_smc, pclc); >> - if (prfx_rc) >> - smc_find_device_store_rc(prfx_rc, ini); >> >> /* get vlan id from IP device */ >> if (smc_vlan_by_tcpsk(new_smc->clcsock, ini)) >> -- >> 2.24.3 (Apple Git-128)