[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200210140343.09ac0f5d841a0c9ed5034107@linux-foundation.org>
Date: Mon, 10 Feb 2020 14:03:43 -0800
From: Andrew Morton <akpm@...ux-foundation.org>
To: Waiman Long <longman@...hat.com>
Cc: Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...hat.com>, Will Deacon <will@...nel.org>,
Christoph Lameter <cl@...ux.com>,
Pekka Enberg <penberg@...nel.org>,
David Rientjes <rientjes@...gle.com>,
Joonsoo Kim <iamjoonsoo.kim@....com>,
linux-kernel@...r.kernel.org, linux-mm@...ck.org
Subject: Re: [PATCH 3/3] mm/slub: Fix potential deadlock problem in
slab_attr_store()
On Mon, 10 Feb 2020 15:46:51 -0500 Waiman Long <longman@...hat.com> wrote:
> In order to fix this circular lock dependency problem, we need to do a
> mutex_trylock(&slab_mutex) in slab_attr_store() for CPU0 above. A simple
> trylock, however, is easy to fail causing user dissatisfaction. So the
> new mutex_timed_lock() function is now used to do a trylock with a
> 100ms timeout.
>
> ...
>
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -5536,7 +5536,12 @@ static ssize_t slab_attr_store(struct kobject *kobj,
> if (slab_state >= FULL && err >= 0 && is_root_cache(s)) {
> struct kmem_cache *c;
>
> - mutex_lock(&slab_mutex);
> + /*
> + * Timeout after 100ms
> + */
> + if (mutex_timed_lock(&slab_mutex, 100) < 0)
> + return -EBUSY;
> +
Oh dear. Surely there's a better fix here. Does slab really need to
hold slab_mutex while creating that sysfs file? Why?
If the issue is two threads trying to create the same sysfs file
(unlikely, given that both will need to have created the same cache)
then can we add a new mutex specifically for this purpose?
Or something else.
Powered by blists - more mailing lists