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 cf3591ef832915892f2499b7e54b51d4c578b28c upstream.

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

Note that the fix offered by commit bd293d071ffe 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
   Dil3mm4#1 [ffff8813dedfb990] schedule at ffffffff8173fa27
   Dil3mm4#2 [ffff8813dedfb9b0] schedule_timeout at ffffffff81742fec
   Dil3mm4#3 [ffff8813dedfba60] io_schedule_timeout at ffffffff8173f186
   Dil3mm4#4 [ffff8813dedfbaa0] bit_wait_io at ffffffff8174034f
   Dil3mm4#5 [ffff8813dedfbac0] __wait_on_bit at ffffffff8173fec8
   Dil3mm4#6 [ffff8813dedfbb10] out_of_line_wait_on_bit at ffffffff8173ff81
   Dil3mm4#7 [ffff8813dedfbb90] __make_buffer_clean at ffffffffa038736f [dm_bufio]
   Dil3mm4#8 [ffff8813dedfbbb0] __try_evict_buffer at ffffffffa0387bb8 [dm_bufio]
   Dil3mm4#9 [ffff8813dedfbbd0] dm_bufio_shrink_scan at ffffffffa0387cc3 [dm_bufio]
  Dil3mm4#10 [ffff8813dedfbc40] shrink_slab at ffffffff811a87ce
  Dil3mm4#11 [ffff8813dedfbd30] shrink_zone at ffffffff811ad778
  Dil3mm4#12 [ffff8813dedfbdc0] kswapd at ffffffff811ae92f
  Dil3mm4#13 [ffff8813dedfbec0] kthread at ffffffff810a8428
  Dil3mm4#14 [ffff8813dedfbf50] ret_from_fork at ffffffff81745242

Signed-off-by: Mikulas Patocka <[email protected]>
Cc: [email protected]
Fixes: bd293d071ffe ("dm bufio: fix deadlock with loop device")
Depends-on: d0a255e795ab ("loop: set PF_MEMALLOC_NOIO for the worker thread")
Signed-off-by: Mike Snitzer <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
Mikulas Patocka authored and turex committed Nov 7, 2021
1 parent 86fd0e8 commit 86df8bf
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion drivers/md/dm-bufio.c
Original file line number Diff line number Diff line change
Expand Up @@ -1561,7 +1561,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 86df8bf

Please sign in to comment.