block: fix bd_size_lock use
authorDamien Le Moal <damien.lemoal@wdc.com>
Thu, 28 Jan 2021 06:36:19 +0000 (15:36 +0900)
committerJens Axboe <axboe@kernel.dk>
Thu, 28 Jan 2021 14:31:50 +0000 (07:31 -0700)
commit0fe37724f8e70fa4cb72948f60fca553702df768
tree3094f7e80c8206dd1842188de08e9c25b459a1dc
parent6c635caef410aa757befbd8857c1eadde5cc22ed
block: fix bd_size_lock use

Some block device drivers, e.g. the skd driver, call set_capacity() with
IRQ disabled. This results in lockdep ito complain about inconsistent
lock states ("inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage")
because set_capacity takes a block device bd_size_lock using the
functions spin_lock() and spin_unlock(). Ensure a consistent locking
state by replacing these calls with spin_lock_irqsave() and
spin_lock_irqrestore(). The same applies to bdev_set_nr_sectors().
With this fix, all lockdep complaints are resolved.

Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/genhd.c
block/partitions/core.c