On 1/8/25 6:25 PM, Christoph Hellwig wrote: > queue_attr_store() always freezes a device queue before calling the > attribute store operation. For attributes that control queue limits, the > store operation will also lock the queue limits with a call to > queue_limits_start_update(). However, some drivers (e.g. SCSI sd) may > need to issue commands to a device to obtain limit values from the > hardware with the queue limits locked. This creates a potential ABBA > deadlock situation if a user attempts to modify a limit (thus freezing > the device queue) while the device driver starts a revalidation of the > device queue limits. > > Avoid such deadlock by not freezing the queue before calling the > ->store_limit() method in struct queue_sysfs_entry and instead use the > queue_limits_commit_update_frozen helper to freeze the queue after taking > the limits lock. > > (commit log adapted from a similar patch from Damien Le Moal) > > Fixes: ff956a3be95b ("block: use queue_limits_commit_update in queue_discard_max_store") > Fixes: 0327ca9d53bf ("block: use queue_limits_commit_update in queue_max_sectors_store") > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > Reviewed-by: Nilay Shroff <nilay@xxxxxxxxxxxxx> Reviewed-by: Damien Le Moal <dlemoal@xxxxxxxxxx> -- Damien Le Moal Western Digital Research