Skip to content

Commit

Permalink
Revert "dm bufio: fix deadlock with loop device"
Browse files Browse the repository at this point in the history
commit cf3591e upstream.

Revert the commit bd293d0. The proper
fix has been made available with commit d0a255e ("loop: set
PF_MEMALLOC_NOIO for the worker thread").

Note that the fix offered by commit bd293d0 doesn't really prevent
the deadlock from occuring - if we look at the stacktrace reported by
Junxiao Bi, we see that it hangs in bit_wait_io and not on the mutex -
i.e. it has already successfully taken the mutex. Changing the mutex
from mutex_lock to mutex_trylock won't help with deadlocks that happen
afterwards.

PID: 474    TASK: ffff8813e11f4600  CPU: 10  COMMAND: "kswapd0"
   #0 [ffff8813dedfb938] __schedule at ffffffff8173f405
   MiCode#1 [ffff8813dedfb990] schedule at ffffffff8173fa27
   MiCode#2 [ffff8813dedfb9b0] schedule_timeout at ffffffff81742fec
   MiCode#3 [ffff8813dedfba60] io_schedule_timeout at ffffffff8173f186
   MiCode#4 [ffff8813dedfbaa0] bit_wait_io at ffffffff8174034f
   MiCode#5 [ffff8813dedfbac0] __wait_on_bit at ffffffff8173fec8
   MiCode#6 [ffff8813dedfbb10] out_of_line_wait_on_bit at ffffffff8173ff81
   MiCode#7 [ffff8813dedfbb90] __make_buffer_clean at ffffffffa038736f [dm_bufio]
   MiCode#8 [ffff8813dedfbbb0] __try_evict_buffer at ffffffffa0387bb8 [dm_bufio]
   MiCode#9 [ffff8813dedfbbd0] dm_bufio_shrink_scan at ffffffffa0387cc3 [dm_bufio]
  MiCode#10 [ffff8813dedfbc40] shrink_slab at ffffffff811a87ce
  MiCode#11 [ffff8813dedfbd30] shrink_zone at ffffffff811ad778
  MiCode#12 [ffff8813dedfbdc0] kswapd at ffffffff811ae92f
  MiCode#13 [ffff8813dedfbec0] kthread at ffffffff810a8428
  MiCode#14 [ffff8813dedfbf50] ret_from_fork at ffffffff81745242

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org
Fixes: bd293d0 ("dm bufio: fix deadlock with loop device")
Depends-on: d0a255e ("loop: set PF_MEMALLOC_NOIO for the worker thread")
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Mikulas Patocka authored and acervenky committed Dec 7, 2019
1 parent a4fd644 commit 8d72e0c
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion drivers/md/dm-bufio.c
Expand Up @@ -1630,7 +1630,9 @@ dm_bufio_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
unsigned long freed;

c = container_of(shrink, struct dm_bufio_client, shrinker);
if (!dm_bufio_trylock(c))
if (sc->gfp_mask & __GFP_FS)
dm_bufio_lock(c);
else if (!dm_bufio_trylock(c))
return SHRINK_STOP;

freed = __scan(c, sc->nr_to_scan, sc->gfp_mask);
Expand Down

0 comments on commit 8d72e0c

Please sign in to comment.