linux/drivers/block
Christoph Hellwig 990e78116d block: loop: fix deadlock between open and remove
Commit c76f48eb5c ("block: take bd_mutex around delete_partitions in
del_gendisk") adds disk->part0->bd_mutex in del_gendisk(), this way
causes the following AB/BA deadlock between removing loop and opening
loop:

 1) loop_control_ioctl(LOOP_CTL_REMOVE)
     -> mutex_lock(&loop_ctl_mutex)
     -> del_gendisk
         -> mutex_lock(&disk->part0->bd_mutex)

 2) blkdev_get_by_dev
     -> mutex_lock(&disk->part0->bd_mutex)
     -> lo_open
         -> mutex_lock(&loop_ctl_mutex)

Add a new Lo_deleting state to remove the need for clearing
->private_data and thus holding loop_ctl_mutex in the ioctl
LOOP_CTL_REMOVE path.

Based on an analysis and earlier patch from
Ming Lei <ming.lei@redhat.com>.

Reported-by: Colin Ian King <colin.king@canonical.com>
Fixes: c76f48eb5c ("block: take bd_mutex around delete_partitions in del_gendisk")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: Colin Ian King <colin.king@canonical.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20210605140950.5800-1-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2021-06-11 11:50:54 -06:00
..
aoe block: Replace lkml.org links with lore 2021-02-10 20:07:21 -07:00
drbd drbd: Fix fall-through warnings for Clang 2021-04-20 15:23:30 -06:00
mtip32xx block: mtip32xx: mtip32xx: Mark debugging variable 'start' as __maybe_unused 2021-04-06 09:21:53 -06:00
null_blk for-5.13/drivers-2021-04-27 2021-04-28 14:39:37 -07:00
paride paride/pd: remove ->revalidate_disk 2021-03-29 07:02:56 -06:00
rnbd block/rnbd: Remove all likely and unlikely 2021-05-03 11:00:11 -06:00
rsxx rsxx: remove extraneous 'const' qualifier 2021-03-24 06:56:20 -06:00
xen-blkback xen-blkback: fix compatibility bug with single page rings 2021-04-23 09:34:07 +02:00
zram zram: fix broken page writeback 2021-03-13 11:27:31 -08:00
Kconfig swim: don't call blk_queue_bounce_limit 2021-04-06 09:29:47 -06:00
Makefile drivers/block: remove the umem driver 2021-03-24 06:57:40 -06:00
amiflop.c amiflop: use separate gendisks for Amiga vs MS-DOS mode 2020-11-16 08:14:30 -07:00
ataflop.c ataflop: fix off by one in ataflop_probe() 2021-04-21 09:15:27 -06:00
brd.c brd: expose number of allocated pages in debugfs 2021-04-21 10:54:48 -06:00
cryptoloop.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 30 2019-05-24 17:27:10 +02:00
floppy.c for-5.13/drivers-2021-04-27 2021-04-28 14:39:37 -07:00
loop.c block: loop: fix deadlock between open and remove 2021-06-11 11:50:54 -06:00
loop.h block: loop: fix deadlock between open and remove 2021-06-11 11:50:54 -06:00
n64cart.c n64: store dev instance into disk private data 2021-02-21 23:37:52 +01:00
nbd.c nbd: share nbd_put and return by goto put_nbd 2021-05-12 08:42:43 -06:00
pktcdvd.c block: move bio_list_copy_data to pktcdvd 2021-04-12 09:19:58 -06:00
ps3disk.c powerpc/ps3: make system bus's remove and shutdown callbacks return void 2020-12-04 01:01:22 +11:00
ps3vram.c block: store a block_device pointer in struct bio 2021-01-24 18:17:20 -07:00
rbd.c rbd: remove the ->set_read_only method 2021-01-24 18:15:57 -07:00
rbd_types.h libceph, rbd: replace zero-length array with flexible-array 2020-06-01 13:22:53 +02:00
sunvdc.c compat_ioctl: block: handle cdrom compat ioctl in non-cdrom drivers 2020-01-03 09:33:15 +01:00
swim.c swim: don't call blk_queue_bounce_limit 2021-04-06 09:29:47 -06:00
swim3.c swim3: support highmem 2021-04-06 09:30:09 -06:00
swim_asm.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
sx8.c block: remove unnecessary argument from blk_execute_rq_nowait 2021-01-24 21:52:39 -07:00
virtio_blk.c virtio: features, fixes 2021-02-25 12:21:08 -08:00
xen-blkfront.c for-5.13/drivers-2021-04-27 2021-04-28 14:39:37 -07:00
z2ram.c z2ram: use separate gendisk for the different modes 2020-11-16 08:14:31 -07:00