All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Horman <horms@kernel.org>
To: Ye Bin <yebin@huaweicloud.com>
Cc: trondmy@kernel.org, anna@kernel.org, chuck.lever@oracle.com,
	jlayton@kernel.org, neilb@suse.de, okorniev@redhat.com,
	Dai.Ngo@oracle.com, tom@talpey.com, davem@davemloft.net,
	edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
	joel.granados@kernel.org, linux@weissschuh.net,
	linux-nfs@vger.kernel.org, netdev@vger.kernel.org,
	yebin10@huawei.com, zhangxiaoxu5@huawei.com
Subject: Re: [PATCH] svcrdma: fix miss destroy percpu_counter in svc_rdma_proc_init()
Date: Fri, 1 Nov 2024 11:55:11 +0000	[thread overview]
Message-ID: <20241101115511.GA1845794@kernel.org> (raw)
In-Reply-To: <20241024015520.1448198-1-yebin@huaweicloud.com>

On Thu, Oct 24, 2024 at 09:55:20AM +0800, Ye Bin wrote:
> From: Ye Bin <yebin10@huawei.com>
> 
> There's issue as follows:
> RPC: Registered rdma transport module.
> RPC: Registered rdma backchannel transport module.
> RPC: Unregistered rdma transport module.
> RPC: Unregistered rdma backchannel transport module.
> BUG: unable to handle page fault for address: fffffbfff80c609a
> PGD 123fee067 P4D 123fee067 PUD 123fea067 PMD 10c624067 PTE 0
> Oops: Oops: 0000 [#1] PREEMPT SMP KASAN NOPTI
> RIP: 0010:percpu_counter_destroy_many+0xf7/0x2a0
> Call Trace:
>  <TASK>
>  __die+0x1f/0x70
>  page_fault_oops+0x2cd/0x860
>  spurious_kernel_fault+0x36/0x450
>  do_kern_addr_fault+0xca/0x100
>  exc_page_fault+0x128/0x150
>  asm_exc_page_fault+0x26/0x30
>  percpu_counter_destroy_many+0xf7/0x2a0
>  mmdrop+0x209/0x350
>  finish_task_switch.isra.0+0x481/0x840
>  schedule_tail+0xe/0xd0
>  ret_from_fork+0x23/0x80
>  ret_from_fork_asm+0x1a/0x30
>  </TASK>
> 
> If register_sysctl() return NULL, then svc_rdma_proc_cleanup() will not
> destroy the percpu counters which init in svc_rdma_proc_init().
> If CONFIG_HOTPLUG_CPU is enabled, residual nodes may be in the
> 'percpu_counters' list. The above issue may occur once the module is
> removed. If the CONFIG_HOTPLUG_CPU configuration is not enabled, memory
> leakage occurs.
> To solve above issue just destroy all percpu counters when
> register_sysctl() return NULL.
> 
> Fixes: 1e7e55731628 ("svcrdma: Restore read and write stats")
> Fixes: 22df5a22462e ("svcrdma: Convert rdma_stat_sq_starve to a per-CPU counter")
> Fixes: df971cd853c0 ("svcrdma: Convert rdma_stat_recv to a per-CPU counter")
> Signed-off-by: Ye Bin <yebin10@huawei.com>
> ---
>  net/sunrpc/xprtrdma/svc_rdma.c | 18 +++++++++++++-----
>  1 file changed, 13 insertions(+), 5 deletions(-)
> 
> diff --git a/net/sunrpc/xprtrdma/svc_rdma.c b/net/sunrpc/xprtrdma/svc_rdma.c
> index 58ae6ec4f25b..11dff4d58195 100644
> --- a/net/sunrpc/xprtrdma/svc_rdma.c
> +++ b/net/sunrpc/xprtrdma/svc_rdma.c
> @@ -233,25 +233,33 @@ static int svc_rdma_proc_init(void)
>  
>  	rc = percpu_counter_init(&svcrdma_stat_read, 0, GFP_KERNEL);
>  	if (rc)
> -		goto out_err;
> +		goto err;
>  	rc = percpu_counter_init(&svcrdma_stat_recv, 0, GFP_KERNEL);
>  	if (rc)
> -		goto out_err;
> +		goto err_read;
>  	rc = percpu_counter_init(&svcrdma_stat_sq_starve, 0, GFP_KERNEL);
>  	if (rc)
> -		goto out_err;
> +		goto err_recv;
>  	rc = percpu_counter_init(&svcrdma_stat_write, 0, GFP_KERNEL);
>  	if (rc)
> -		goto out_err;
> +		goto err_sq;
>  
>  	svcrdma_table_header = register_sysctl("sunrpc/svc_rdma",
>  					       svcrdma_parm_table);
> +	if (!svcrdma_table_header)

Hi Ye Bin,

Should rc be set to a negative error value here,
as is the case for other error cases above?

Flagged by Smatch.

> +		goto err_write;
> +
>  	return 0;
>  
> -out_err:
> +err_write:
> +	percpu_counter_destroy(&svcrdma_stat_write);
> +err_sq:
>  	percpu_counter_destroy(&svcrdma_stat_sq_starve);
> +err_recv:
>  	percpu_counter_destroy(&svcrdma_stat_recv);
> +err_read:
>  	percpu_counter_destroy(&svcrdma_stat_read);
> +err:
>  	return rc;
>  }
>  
> -- 
> 2.34.1
> 

  parent reply	other threads:[~2024-11-01 11:55 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-24  1:55 [PATCH] svcrdma: fix miss destroy percpu_counter in svc_rdma_proc_init() Ye Bin
2024-10-24 13:15 ` Chuck Lever
2024-11-01 11:55 ` Simon Horman [this message]
2024-11-01 16:27   ` Chuck Lever
2024-11-04 14:08     ` yebin

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=20241101115511.GA1845794@kernel.org \
    --to=horms@kernel.org \
    --cc=Dai.Ngo@oracle.com \
    --cc=anna@kernel.org \
    --cc=chuck.lever@oracle.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=jlayton@kernel.org \
    --cc=joel.granados@kernel.org \
    --cc=kuba@kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux@weissschuh.net \
    --cc=neilb@suse.de \
    --cc=netdev@vger.kernel.org \
    --cc=okorniev@redhat.com \
    --cc=pabeni@redhat.com \
    --cc=tom@talpey.com \
    --cc=trondmy@kernel.org \
    --cc=yebin10@huawei.com \
    --cc=yebin@huaweicloud.com \
    --cc=zhangxiaoxu5@huawei.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.