Files
linux/drivers/md
Junxiao Bi 0d78b27b83 dm bufio: fix deadlock with loop device
commit bd293d071f upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-08-04 09:33:32 +02:00
..
2014-01-14 23:23:03 -05:00
2016-06-07 13:41:38 -06:00
2016-08-07 14:41:02 -06:00
2007-10-20 02:01:26 +01:00
2017-04-12 12:41:12 +02:00
2016-08-07 14:41:02 -06:00
2016-07-20 23:49:49 -04:00
2016-01-20 13:52:20 -08:00
2017-10-21 17:21:35 +02:00
2019-07-21 09:05:56 +02:00
2016-09-21 09:09:44 -07:00
2016-08-07 14:41:02 -06:00
2016-08-07 14:41:02 -06:00
2015-08-13 12:31:57 -06:00