* [PATCH net 0/2] Two fixes for SMC-R
@ 2023-09-08 3:31 Guangguan Wang
2023-09-08 3:31 ` [PATCH net 1/2] net/smc: bugfix for smcr v2 server connect success statistic Guangguan Wang
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Guangguan Wang @ 2023-09-08 3:31 UTC (permalink / raw)
To: wenjia, jaka, kgraul, davem, edumazet, kuba, pabeni
Cc: tonylu, alibuda, guwen, linux-s390, netdev, linux-kernel
Two fixes for SMC-R.
Guangguan Wang (2):
net/smc: bugfix for smcr v2 server connect success statistic
net/smc: use smc_lgr_list.lock to protect smc_lgr_list.list iterate in
smcr_port_add
net/smc/smc_core.c | 2 ++
net/smc/smc_stats.h | 3 ++-
2 files changed, 4 insertions(+), 1 deletion(-)
--
2.24.3 (Apple Git-128)
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net 1/2] net/smc: bugfix for smcr v2 server connect success statistic
2023-09-08 3:31 [PATCH net 0/2] Two fixes for SMC-R Guangguan Wang
@ 2023-09-08 3:31 ` Guangguan Wang
2023-09-08 9:42 ` Wenjia Zhang
2023-09-08 3:31 ` [PATCH net 2/2] net/smc: use smc_lgr_list.lock to protect smc_lgr_list.list iterate in smcr_port_add Guangguan Wang
2023-09-08 9:42 ` [PATCH net 0/2] Two fixes for SMC-R Wenjia Zhang
2 siblings, 1 reply; 5+ messages in thread
From: Guangguan Wang @ 2023-09-08 3:31 UTC (permalink / raw)
To: wenjia, jaka, kgraul, davem, edumazet, kuba, pabeni
Cc: tonylu, alibuda, guwen, linux-s390, netdev, linux-kernel
In the macro SMC_STAT_SERV_SUCC_INC, the smcd_version is used
to determin whether to increase the v1 statistic or the v2
statistic. It is correct for SMCD. But for SMCR, smcr_version
should be used.
Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
---
net/smc/smc_stats.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/smc/smc_stats.h b/net/smc/smc_stats.h
index b60fe1eb37ab..aa8928975cc6 100644
--- a/net/smc/smc_stats.h
+++ b/net/smc/smc_stats.h
@@ -243,8 +243,9 @@ while (0)
#define SMC_STAT_SERV_SUCC_INC(net, _ini) \
do { \
typeof(_ini) i = (_ini); \
- bool is_v2 = (i->smcd_version & SMC_V2); \
bool is_smcd = (i->is_smcd); \
+ u8 version = is_smcd ? i->smcd_version : i->smcr_version; \
+ bool is_v2 = (version & SMC_V2); \
typeof(net->smc.smc_stats) smc_stats = (net)->smc.smc_stats; \
if (is_v2 && is_smcd) \
this_cpu_inc(smc_stats->smc[SMC_TYPE_D].srv_v2_succ_cnt); \
--
2.24.3 (Apple Git-128)
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH net 2/2] net/smc: use smc_lgr_list.lock to protect smc_lgr_list.list iterate in smcr_port_add
2023-09-08 3:31 [PATCH net 0/2] Two fixes for SMC-R Guangguan Wang
2023-09-08 3:31 ` [PATCH net 1/2] net/smc: bugfix for smcr v2 server connect success statistic Guangguan Wang
@ 2023-09-08 3:31 ` Guangguan Wang
2023-09-08 9:42 ` [PATCH net 0/2] Two fixes for SMC-R Wenjia Zhang
2 siblings, 0 replies; 5+ messages in thread
From: Guangguan Wang @ 2023-09-08 3:31 UTC (permalink / raw)
To: wenjia, jaka, kgraul, davem, edumazet, kuba, pabeni
Cc: tonylu, alibuda, guwen, linux-s390, netdev, linux-kernel
While doing smcr_port_add, there maybe linkgroup add into or delete
from smc_lgr_list.list at the same time, which may result kernel crash.
So, use smc_lgr_list.lock to protect smc_lgr_list.list iterate in
smcr_port_add.
The crash calltrace show below:
BUG: kernel NULL pointer dereference, address: 0000000000000000
PGD 0 P4D 0
Oops: 0000 [#1] SMP NOPTI
CPU: 0 PID: 559726 Comm: kworker/0:92 Kdump: loaded Tainted: G
Hardware name: Alibaba Cloud Alibaba Cloud ECS, BIOS 449e491 04/01/2014
Workqueue: events smc_ib_port_event_work [smc]
RIP: 0010:smcr_port_add+0xa6/0xf0 [smc]
RSP: 0000:ffffa5a2c8f67de0 EFLAGS: 00010297
RAX: 0000000000000001 RBX: ffff9935e0650000 RCX: 0000000000000000
RDX: 0000000000000010 RSI: ffff9935e0654290 RDI: ffff9935c8560000
RBP: 0000000000000000 R08: 0000000000000000 R09: ffff9934c0401918
R10: 0000000000000000 R11: ffffffffb4a5c278 R12: ffff99364029aae4
R13: ffff99364029aa00 R14: 00000000ffffffed R15: ffff99364029ab08
FS: 0000000000000000(0000) GS:ffff994380600000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000000 CR3: 0000000f06a10003 CR4: 0000000002770ef0
PKRU: 55555554
Call Trace:
smc_ib_port_event_work+0x18f/0x380 [smc]
process_one_work+0x19b/0x340
worker_thread+0x30/0x370
? process_one_work+0x340/0x340
kthread+0x114/0x130
? __kthread_cancel_work+0x50/0x50
ret_from_fork+0x1f/0x30
Fixes: 1f90a05d9ff9 ("net/smc: add smcr_port_add() and smcr_link_up() processing")
Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
---
net/smc/smc_core.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/smc/smc_core.c b/net/smc/smc_core.c
index 3f465faf2b68..6aa3db47a956 100644
--- a/net/smc/smc_core.c
+++ b/net/smc/smc_core.c
@@ -1654,6 +1654,7 @@ void smcr_port_add(struct smc_ib_device *smcibdev, u8 ibport)
{
struct smc_link_group *lgr, *n;
+ spin_lock_bh(&smc_lgr_list.lock);
list_for_each_entry_safe(lgr, n, &smc_lgr_list.list, list) {
struct smc_link *link;
@@ -1669,6 +1670,7 @@ void smcr_port_add(struct smc_ib_device *smcibdev, u8 ibport)
if (link)
smc_llc_add_link_local(link);
}
+ spin_unlock_bh(&smc_lgr_list.lock);
}
/* link is down - switch connections to alternate link,
--
2.24.3 (Apple Git-128)
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net 1/2] net/smc: bugfix for smcr v2 server connect success statistic
2023-09-08 3:31 ` [PATCH net 1/2] net/smc: bugfix for smcr v2 server connect success statistic Guangguan Wang
@ 2023-09-08 9:42 ` Wenjia Zhang
0 siblings, 0 replies; 5+ messages in thread
From: Wenjia Zhang @ 2023-09-08 9:42 UTC (permalink / raw)
To: Guangguan Wang, jaka, kgraul, davem, edumazet, kuba, pabeni
Cc: tonylu, alibuda, guwen, linux-s390, netdev, linux-kernel
On 08.09.23 05:31, Guangguan Wang wrote:
> In the macro SMC_STAT_SERV_SUCC_INC, the smcd_version is used
> to determin whether to increase the v1 statistic or the v2
> statistic. It is correct for SMCD. But for SMCR, smcr_version
> should be used.
>
> Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
> ---
> net/smc/smc_stats.h | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/net/smc/smc_stats.h b/net/smc/smc_stats.h
> index b60fe1eb37ab..aa8928975cc6 100644
> --- a/net/smc/smc_stats.h
> +++ b/net/smc/smc_stats.h
> @@ -243,8 +243,9 @@ while (0)
> #define SMC_STAT_SERV_SUCC_INC(net, _ini) \
> do { \
> typeof(_ini) i = (_ini); \
> - bool is_v2 = (i->smcd_version & SMC_V2); \
> bool is_smcd = (i->is_smcd); \
> + u8 version = is_smcd ? i->smcd_version : i->smcr_version; \
> + bool is_v2 = (version & SMC_V2); \
> typeof(net->smc.smc_stats) smc_stats = (net)->smc.smc_stats; \
> if (is_v2 && is_smcd) \
> this_cpu_inc(smc_stats->smc[SMC_TYPE_D].srv_v2_succ_cnt); \
ohje, that is because the statistic was implemented first, then SMCR_v2.
Good catch! Thank you!
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net 0/2] Two fixes for SMC-R
2023-09-08 3:31 [PATCH net 0/2] Two fixes for SMC-R Guangguan Wang
2023-09-08 3:31 ` [PATCH net 1/2] net/smc: bugfix for smcr v2 server connect success statistic Guangguan Wang
2023-09-08 3:31 ` [PATCH net 2/2] net/smc: use smc_lgr_list.lock to protect smc_lgr_list.list iterate in smcr_port_add Guangguan Wang
@ 2023-09-08 9:42 ` Wenjia Zhang
2 siblings, 0 replies; 5+ messages in thread
From: Wenjia Zhang @ 2023-09-08 9:42 UTC (permalink / raw)
To: Guangguan Wang, jaka, kgraul, davem, edumazet, kuba, pabeni
Cc: tonylu, alibuda, guwen, linux-s390, netdev, linux-kernel
On 08.09.23 05:31, Guangguan Wang wrote:
> Two fixes for SMC-R.
>
> Guangguan Wang (2):
> net/smc: bugfix for smcr v2 server connect success statistic
> net/smc: use smc_lgr_list.lock to protect smc_lgr_list.list iterate in
> smcr_port_add
>
> net/smc/smc_core.c | 2 ++
> net/smc/smc_stats.h | 3 ++-
> 2 files changed, 4 insertions(+), 1 deletion(-)
>
Thank you for fixing them!
The sign is for the two patches:
Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-09-08 9:42 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-08 3:31 [PATCH net 0/2] Two fixes for SMC-R Guangguan Wang
2023-09-08 3:31 ` [PATCH net 1/2] net/smc: bugfix for smcr v2 server connect success statistic Guangguan Wang
2023-09-08 9:42 ` Wenjia Zhang
2023-09-08 3:31 ` [PATCH net 2/2] net/smc: use smc_lgr_list.lock to protect smc_lgr_list.list iterate in smcr_port_add Guangguan Wang
2023-09-08 9:42 ` [PATCH net 0/2] Two fixes for SMC-R Wenjia Zhang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).