linux/drivers/block/aoe
Maksim Kiselev 2499fa286f aoe: avoid potential deadlock at set_capacity
commit e169bd4fb2 upstream.

Move set_capacity() outside of the section procected by (&d->lock).
To avoid possible interrupt unsafe locking scenario:

        CPU0                    CPU1
        ----                    ----
[1] lock(&bdev->bd_size_lock);
                                local_irq_disable();
                            [2] lock(&d->lock);
                            [3] lock(&bdev->bd_size_lock);
   <Interrupt>
[4]  lock(&d->lock);

  *** DEADLOCK ***

Where [1](&bdev->bd_size_lock) hold by zram_add()->set_capacity().
[2]lock(&d->lock) hold by aoeblk_gdalloc(). And aoeblk_gdalloc()
is trying to acquire [3](&bdev->bd_size_lock) at set_capacity() call.
In this situation an attempt to acquire [4]lock(&d->lock) from
aoecmd_cfg_rsp() will lead to deadlock.

So the simplest solution is breaking lock dependency
[2](&d->lock) -> [3](&bdev->bd_size_lock) by moving set_capacity()
outside.

Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20240124072436.3745720-2-bigunclemax@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
[ Larry: backport to 5.15.y. Minor conflict resolved due to missing commit d9c2bd252a
  aoe: add error handling support for add_disk() ]
Signed-off-by: Larry Bassel <larry.bassel@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-07-17 18:30:48 +02:00
..
aoe.h aoe: replace ->special use with private data in the request 2018-11-10 08:03:49 -07:00
aoeblk.c aoe: avoid potential deadlock at set_capacity 2025-07-17 18:30:48 +02:00
aoechr.c aoe: remove unnecessary oom message 2021-06-09 09:41:48 -06:00
aoecmd.c aoe: fix the potential use-after-free problem in more places 2024-10-17 15:11:39 +02:00
aoedev.c aoe: clean device rq_list in aoedev_downdev() 2025-06-27 11:05:35 +01:00
aoemain.c aoe: add __exit annotation 2018-12-16 09:01:38 -07:00
aoenet.c aoe: fix the potential use-after-free problem in aoecmd_cfg_pkts 2024-03-26 18:21:15 -04:00
Makefile treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00