From: Dust Li <dust.li@linux.alibaba.com>
To: Guangguan Wang <guangguan.wang@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
Subject: Re: [PATCH net] net/smc: correct the reason code in smc_listen_find_device when fallback
Date: Tue, 17 Oct 2023 15:37:33 +0800 [thread overview]
Message-ID: <20231017073733.GV92403@linux.alibaba.com> (raw)
In-Reply-To: <20231016061153.40057-1-guangguan.wang@linux.alibaba.com>
On Mon, Oct 16, 2023 at 02:11:53PM +0800, Guangguan Wang wrote:
Hi guangguan,
This patch doesn't apply clearly on net because it conflict with my
previous patch 4abbd2e3c1db(net/smc: return the right falback reason
when prefix checks fail), pls rebase.
>The function smc_find_ism_store_rc is not only used for ism, so it is
>reasonable to change the function name to smc_find_device_store_rc.
>
>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.
I think it's better to seperate this patch into 2:
- one for changing the name from smc_find_ism_store_rc to smc_find_device_store_rc.
- one for fixing the return reason.
More comments below.
>
>Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
>---
> net/smc/af_smc.c | 23 +++++++++--------------
> 1 file changed, 9 insertions(+), 14 deletions(-)
>
>diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
>index bacdd971615e..15d8ad7af75d 100644
>--- a/net/smc/af_smc.c
>+++ b/net/smc/af_smc.c
>@@ -2121,7 +2121,7 @@ static void smc_check_ism_v2_match(struct smc_init_info *ini,
> }
> }
>
>-static void smc_find_ism_store_rc(u32 rc, struct smc_init_info *ini)
>+static void smc_find_device_store_rc(u32 rc, struct smc_init_info *ini)
> {
> if (!ini->rc)
> ini->rc = rc;
>@@ -2162,10 +2162,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_ism_store_rc(SMC_CLC_DECL_NOSMCD2DEV, ini);
>+ if (!ini->ism_dev[0])
> goto not_found;
>- }
>
> smc_ism_get_system_eid(&eid);
> if (!smc_clc_match_eid(ini->negotiated_eid, smc_v2_ext,
>@@ -2180,7 +2178,7 @@ static void smc_find_ism_v2_device_serv(struct smc_sock *new_smc,
> ini->ism_selected = i;
> rc = smc_listen_ism_init(new_smc, ini);
> if (rc) {
>- smc_find_ism_store_rc(rc, ini);
>+ smc_find_device_store_rc(rc, ini);
> /* try next active ISM device */
> continue;
> }
>@@ -2213,11 +2211,12 @@ static void smc_find_ism_v1_device_serv(struct smc_sock *new_smc,
> goto not_found;
> ini->ism_selected = 0;
> rc = smc_listen_ism_init(new_smc, ini);
>- if (!rc)
>+ if (!rc) {
>+ smc_find_device_store_rc(rc, ini);
This smc_find_device_store_rc() seems useless when rc == 0 here ?
> return; /* V1 ISM device found */
>+ }
>
> not_found:
>- smc_find_ism_store_rc(rc, ini);
> ini->smcd_version &= ~SMC_V1;
> ini->ism_dev[0] = NULL;
> ini->is_smcd = false;
>@@ -2266,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_ism_store_rc(rc, ini);
>+ if (rc)
> goto not_found;
>- }
> if (!ini->smcrv2.uses_gateway)
> memcpy(ini->smcrv2.nexthop_mac, pclc->lcl.mac, ETH_ALEN);
>
>@@ -2284,7 +2281,7 @@ static void smc_find_rdma_v2_device_serv(struct smc_sock *new_smc,
> if (!rc)
> return;
> ini->smcr_version = smcr_version;
>- smc_find_ism_store_rc(rc, ini);
>+ smc_find_device_store_rc(rc, ini);
>
> not_found:
> ini->smcr_version &= ~SMC_V2;
>@@ -2330,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_ism_store_rc(prfx_rc, ini);
>
> /* get vlan id from IP device */
> if (smc_vlan_by_tcpsk(new_smc->clcsock, ini))
>@@ -2358,7 +2353,7 @@ static int smc_listen_find_device(struct smc_sock *new_smc,
> int rc;
>
> rc = smc_find_rdma_v1_device_serv(new_smc, pclc, ini);
>- smc_find_ism_store_rc(rc, ini);
>+ smc_find_device_store_rc(rc, ini);
> return (!rc) ? 0 : ini->rc;
> }
> return SMC_CLC_DECL_NOSMCDEV;
>--
>2.24.3 (Apple Git-128)
next prev parent reply other threads:[~2023-10-17 8:07 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-16 6:11 [PATCH net] net/smc: correct the reason code in smc_listen_find_device when fallback Guangguan Wang
2023-10-17 7:37 ` Dust Li [this message]
2023-10-17 8:52 ` Guangguan Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231017073733.GV92403@linux.alibaba.com \
--to=dust.li@linux.alibaba.com \
--cc=alibuda@linux.alibaba.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=guangguan.wang@linux.alibaba.com \
--cc=guwen@linux.alibaba.com \
--cc=jaka@linux.ibm.com \
--cc=kgraul@linux.ibm.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=tonylu@linux.alibaba.com \
--cc=wenjia@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.