Hi, The 1st 3 patches cleans up current uses on q->sysfs_lock. The 4th patch adds one helper for checking if queue is registered. The last patch splits .sysfs_lock into two locks: one is only for sync .store/.show from sysfs, the other one is for pretecting kobjects registering/unregistering. Meantime avoid to acquire .sysfs_lock when removing mq & iosched kobjects, so that the reported deadlock can be fixed. V4: - address comments from Bart - update comments, add comments about releasing sysfs_lock in elevator_switch_mq - fix a race in blk_register_queue by holding sysfs_lock for emitting KOBJ_ADD - only the 5th patch is updated V3: - drop the 4th patch in V2, which is wrong, meantime not necesary for fixing this deadlock - replace comment with one WARN_ON_ONCE() in patch 2 - add reviewed-by tag V2: - remove several uses on .sysfs_lock - Remove blk_mq_register_dev() - add one helper for checking queue registered - split .sysfs_lock into two locks Bart Van Assche (1): block: Remove blk_mq_register_dev() Ming Lei (4): block: don't hold q->sysfs_lock in elevator_init_mq blk-mq: don't hold q->sysfs_lock in blk_mq_map_swqueue block: add helper for checking if queue is registered block: split .sysfs_lock into two locks block/blk-core.c | 1 + block/blk-mq-sysfs.c | 23 ++++---------- block/blk-mq.c | 7 ----- block/blk-sysfs.c | 50 +++++++++++++++++------------ block/blk-wbt.c | 2 +- block/blk.h | 2 +- block/elevator.c | 71 +++++++++++++++++++++++++++++++----------- include/linux/blk-mq.h | 1 - include/linux/blkdev.h | 2 ++ 9 files changed, 94 insertions(+), 65 deletions(-) Cc: Christoph Hellwig <hch@xxxxxxxxxxxxx> Cc: Hannes Reinecke <hare@xxxxxxxx> Cc: Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> Cc: Mike Snitzer <snitzer@xxxxxxxxxx> Cc: Bart Van Assche <bvanassche@xxxxxxx> Cc: Damien Le Moal <damien.lemoal@xxxxxxx> -- 2.20.1