From: Hyeonggon Yoo <42.hyeyoo@gmail.com>
To: Maurizio Lombardi <mlombard@redhat.com>
Cc: vbabka@suse.cz, linux-mm@kvack.org, rientjes@google.com,
penberg@kernel.org, iamjoonsoo.kim@lge.com,
akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
bigeasy@linutronix.de
Subject: Re: [PATCH V2] mm: slub: fix flush_cpu_slab()/__free_slab() invocations in task context.
Date: Thu, 15 Sep 2022 21:47:44 +0900 [thread overview]
Message-ID: <YyMe8LvKxc5juCfr@hyeyoo> (raw)
In-Reply-To: <20220912161140.34281-1-mlombard@redhat.com>
On Mon, Sep 12, 2022 at 06:11:40PM +0200, Maurizio Lombardi wrote:
> Commit 5a836bf6b09f ("mm: slub: move flush_cpu_slab() invocations
> __free_slab() invocations out of IRQ context") moved all flush_cpu_slab()
> invocations to the global workqueue to avoid a problem related
> with deactivate_slab()/__free_slab() being called from an IRQ context
> on PREEMPT_RT kernels.
>
> When the flush_all_cpu_locked() function is called from a task context
> it may happen that a workqueue with WQ_MEM_RECLAIM bit set ends up
> flushing the global workqueue, this will cause a dependency issue.
>
> workqueue: WQ_MEM_RECLAIM nvme-delete-wq:nvme_delete_ctrl_work [nvme_core]
> is flushing !WQ_MEM_RECLAIM events:flush_cpu_slab
> WARNING: CPU: 37 PID: 410 at kernel/workqueue.c:2637
> check_flush_dependency+0x10a/0x120
> Workqueue: nvme-delete-wq nvme_delete_ctrl_work [nvme_core]
> RIP: 0010:check_flush_dependency+0x10a/0x120[ 453.262125] Call Trace:
> __flush_work.isra.0+0xbf/0x220
> ? __queue_work+0x1dc/0x420
> flush_all_cpus_locked+0xfb/0x120
> __kmem_cache_shutdown+0x2b/0x320
> kmem_cache_destroy+0x49/0x100
> bioset_exit+0x143/0x190
> blk_release_queue+0xb9/0x100
> kobject_cleanup+0x37/0x130
> nvme_fc_ctrl_free+0xc6/0x150 [nvme_fc]
> nvme_free_ctrl+0x1ac/0x2b0 [nvme_core]
>
> Fix this bug by creating a workqueue for the flush operation with
> the WQ_MEM_RECLAIM bit set.
>
> v2: Create a workqueue with WQ_MEM_RECLAIM
> instead of trying to revert the changes.
>
> Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
> ---
> mm/slub.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/mm/slub.c b/mm/slub.c
> index 862dbd9af4f5..cdb8011884d0 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -310,6 +310,11 @@ static inline void stat(const struct kmem_cache *s, enum stat_item si)
> */
> static nodemask_t slab_nodes;
>
> +/*
> + * Workqueue used for flush_cpu_slab().
> + */
> +static struct workqueue_struct *flushwq;
> +
> /********************************************************************
> * Core slab cache functions
> *******************************************************************/
> @@ -2730,7 +2735,7 @@ static void flush_all_cpus_locked(struct kmem_cache *s)
> INIT_WORK(&sfw->work, flush_cpu_slab);
> sfw->skip = false;
> sfw->s = s;
> - schedule_work_on(cpu, &sfw->work);
> + queue_work_on(cpu, flushwq, &sfw->work);
> }
>
> for_each_online_cpu(cpu) {
> @@ -4858,6 +4863,8 @@ void __init kmem_cache_init(void)
>
> void __init kmem_cache_init_late(void)
> {
> + flushwq = create_workqueue("slub_flushwq");
> + BUG_ON(!flushwq);
> }
>
> struct kmem_cache *
> --
> 2.31.1
>
No objection about this patch,
but it seems create_workqueue is deprecated?
--
Thanks,
Hyeonggon
next prev parent reply other threads:[~2022-09-15 12:47 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-12 16:11 [PATCH V2] mm: slub: fix flush_cpu_slab()/__free_slab() invocations in task context Maurizio Lombardi
2022-09-15 12:47 ` Hyeonggon Yoo [this message]
2022-09-16 7:27 ` Maurizio Lombardi
2022-09-16 21:03 ` Vlastimil Babka
2022-09-16 21:02 ` Vlastimil Babka
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=YyMe8LvKxc5juCfr@hyeyoo \
--to=42.hyeyoo@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=bigeasy@linutronix.de \
--cc=iamjoonsoo.kim@lge.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mlombard@redhat.com \
--cc=penberg@kernel.org \
--cc=rientjes@google.com \
--cc=vbabka@suse.cz \
/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.