From: Tony Lu <tonylu@linux.alibaba.com>
To: Daxing Guo <guodaxing@huawei.com>
Cc: netdev@vger.kernel.org, chenzhe@huawei.com,
linux-s390@vger.kernel.org, greg@kroah.com
Subject: Re: [PATCH] net/smc: loop in smc_listen
Date: Mon, 22 Nov 2021 11:19:18 +0800 [thread overview]
Message-ID: <YZsMNsNJFYe2MUJs@TonyMac-Alibaba> (raw)
In-Reply-To: <20211120075451.16764-1-guodaxing@huawei.com>
On Sat, Nov 20, 2021 at 03:54:51PM +0800, Daxing Guo wrote:
> From: Guo DaXing <guodaxing@huawei.com>
>
> The kernel_listen function in smc_listen will fail when all the available
> ports are occupied. At this point smc->clcsock->sk->sk_data_ready has
> been changed to smc_clcsock_data_ready. When we call smc_listen again,
> now both smc->clcsock->sk->sk_data_ready and smc->clcsk_data_ready point
> to the smc_clcsock_data_ready function.
>
> The smc_clcsock_data_ready() function calls lsmc->clcsk_data_ready which
> now points to itself resulting in an infinite loop.
>
> This patch restores smc->clcsock->sk->sk_data_ready with the old value.
Hi Guo,
This indeed seems to be an issue. When listen fails, the original
clcsock's sk_data_ready overwrites by smc_clcsock_data_ready and can't
be recovered. I will also test it in my environment, thanks.
Cheers,
Tony Lu
>
> Signed-off-by: Guo DaXing <guodaxing@huawei.com>
> ---
> net/smc/af_smc.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
> index 59284da9116d..078f5edf6d4d 100644
> --- a/net/smc/af_smc.c
> +++ b/net/smc/af_smc.c
> @@ -2120,8 +2120,10 @@ static int smc_listen(struct socket *sock, int backlog)
> smc->clcsock->sk->sk_user_data =
> (void *)((uintptr_t)smc | SK_USER_DATA_NOCOPY);
> rc = kernel_listen(smc->clcsock, backlog);
> - if (rc)
> + if (rc) {
> + smc->clcsock->sk->sk_data_ready = smc->clcsk_data_ready;
> goto out;
> + }
> sk->sk_max_ack_backlog = backlog;
> sk->sk_ack_backlog = 0;
> sk->sk_state = SMC_LISTEN;
> --
> 2.20.1
next prev parent reply other threads:[~2021-11-22 3:19 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-20 7:54 [PATCH] net/smc: loop in smc_listen Daxing Guo
2021-11-22 3:19 ` Tony Lu [this message]
2021-11-22 7:28 ` Karsten Graul
2021-11-22 8:37 ` Tony Lu
[not found] <aec0a1e1964b4696b8636ce3945e6551@huawei.com>
2021-11-19 7:09 ` greg
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=YZsMNsNJFYe2MUJs@TonyMac-Alibaba \
--to=tonylu@linux.alibaba.com \
--cc=chenzhe@huawei.com \
--cc=greg@kroah.com \
--cc=guodaxing@huawei.com \
--cc=linux-s390@vger.kernel.org \
--cc=netdev@vger.kernel.org \
/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.