* [PATCH] block: Fix potential deadlock in blk_ia_range_sysfs_show()
@ 2022-06-03 2:19 Damien Le Moal
2022-06-03 5:05 ` Jens Axboe
0 siblings, 1 reply; 2+ messages in thread
From: Damien Le Moal @ 2022-06-03 2:19 UTC (permalink / raw)
To: Jens Axboe, linux-block; +Cc: Tyler Erickson, Muhammad Ahmad
When being read, a sysfs attribute is already protected against removal
with the kobject node active reference counter. As a result, in
blk_ia_range_sysfs_show(), there is no need to take the queue sysfs
lock when reading the value of a range attribute. Using the queue sysfs
lock in this function creates a potential deadlock situation with the
disk removal, something that a lockdep signals with a splat when the
device is removed:
[ 760.703551] Possible unsafe locking scenario:
[ 760.703551]
[ 760.703554] CPU0 CPU1
[ 760.703556] ---- ----
[ 760.703558] lock(&q->sysfs_lock);
[ 760.703565] lock(kn->active#385);
[ 760.703573] lock(&q->sysfs_lock);
[ 760.703579] lock(kn->active#385);
[ 760.703587]
[ 760.703587] *** DEADLOCK ***
Solve this by removing the mutex_lock()/mutex_unlock() calls from
blk_ia_range_sysfs_show().
Fixes: a2247f19ee1c ("block: Add independent access ranges support")
Cc: stable@vger.kernel.org
Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
---
block/blk-ia-ranges.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/block/blk-ia-ranges.c b/block/blk-ia-ranges.c
index 18c68d8b9138..56ed48d2954e 100644
--- a/block/blk-ia-ranges.c
+++ b/block/blk-ia-ranges.c
@@ -54,13 +54,8 @@ static ssize_t blk_ia_range_sysfs_show(struct kobject *kobj,
container_of(attr, struct blk_ia_range_sysfs_entry, attr);
struct blk_independent_access_range *iar =
container_of(kobj, struct blk_independent_access_range, kobj);
- ssize_t ret;
- mutex_lock(&iar->queue->sysfs_lock);
- ret = entry->show(iar, buf);
- mutex_unlock(&iar->queue->sysfs_lock);
-
- return ret;
+ return entry->show(iar, buf);
}
static const struct sysfs_ops blk_ia_range_sysfs_ops = {
--
2.36.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] block: Fix potential deadlock in blk_ia_range_sysfs_show()
2022-06-03 2:19 [PATCH] block: Fix potential deadlock in blk_ia_range_sysfs_show() Damien Le Moal
@ 2022-06-03 5:05 ` Jens Axboe
0 siblings, 0 replies; 2+ messages in thread
From: Jens Axboe @ 2022-06-03 5:05 UTC (permalink / raw)
To: damien.lemoal, linux-block; +Cc: muhammad.ahmad, tyler.erickson
On Fri, 3 Jun 2022 11:19:05 +0900, Damien Le Moal wrote:
> When being read, a sysfs attribute is already protected against removal
> with the kobject node active reference counter. As a result, in
> blk_ia_range_sysfs_show(), there is no need to take the queue sysfs
> lock when reading the value of a range attribute. Using the queue sysfs
> lock in this function creates a potential deadlock situation with the
> disk removal, something that a lockdep signals with a splat when the
> device is removed:
>
> [...]
Applied, thanks!
[1/1] block: Fix potential deadlock in blk_ia_range_sysfs_show()
commit: 41e46b3c2aa24f755b2ae9ec4ce931ba5f0d8532
Best regards,
--
Jens Axboe
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-06-03 5:05 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-03 2:19 [PATCH] block: Fix potential deadlock in blk_ia_range_sysfs_show() Damien Le Moal
2022-06-03 5:05 ` Jens Axboe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).