diff options
author | Junxiao Bi <junxiao.bi@oracle.com> | 2019-07-10 03:17:19 +0300 |
---|---|---|
committer | Mike Snitzer <snitzer@redhat.com> | 2019-07-12 16:59:37 +0300 |
commit | bd293d071ffe65e645b4d8104f9d8fe15ea13862 (patch) | |
tree | 29faa2ee05ac191581222287a36886738e33ef00 /drivers/md/dm-zoned-metadata.c | |
parent | 2e6023850e177dbaca21498ada04c5a5ac93f812 (diff) | |
download | linux-bd293d071ffe65e645b4d8104f9d8fe15ea13862.tar.xz |
dm bufio: fix deadlock with loop device
When thin-volume is built on loop device, if available memory is low,
the following deadlock can be triggered:
One process P1 allocates memory with GFP_FS flag, direct alloc fails,
memory reclaim invokes memory shrinker in dm_bufio, dm_bufio_shrink_scan()
runs, mutex dm_bufio_client->lock is acquired, then P1 waits for dm_buffer
IO to complete in __try_evict_buffer().
But this IO may never complete if issued to an underlying loop device
that forwards it using direct-IO, which allocates memory using
GFP_KERNEL (see: do_blockdev_direct_IO()). If allocation fails, memory
reclaim will invoke memory shrinker in dm_bufio, dm_bufio_shrink_scan()
will be invoked, and since the mutex is already held by P1 the loop
thread will hang, and IO will never complete. Resulting in ABBA
deadlock.
Cc: stable@vger.kernel.org
Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'drivers/md/dm-zoned-metadata.c')
0 files changed, 0 insertions, 0 deletions