Hi, 在 2025/08/01 19:44, Ming Lei 写道:
Replace the spinlock in blk_mq_find_and_get_req() with an SRCU read lock around the tag iterators. This is done by: - Holding the SRCU read lock in blk_mq_queue_tag_busy_iter(), blk_mq_tagset_busy_iter(), and blk_mq_hctx_has_requests(). - Removing the now-redundant tags->lock from blk_mq_find_and_get_req(). This change improves performance by replacing a spinlock with a more scalable SRCU lock, and fixes lockup issue in scsi_host_busy() in case of shost->host_blocked. Meantime it becomes possible to use blk_mq_in_driver_rw() for io accounting. Signed-off-by: Ming Lei<ming.lei@xxxxxxxxxx> --- block/blk-mq-tag.c | 12 ++++++++---- block/blk-mq.c | 24 ++++-------------------- 2 files changed, 12 insertions(+), 24 deletions(-)
I think it's not good to use blk_mq_in_driver_rw() for io accounting, we start io accounting from blk_account_io_start(), where such io is not in driver yet. Otherwise, LGTM Reviewed-by: Yu Kuai <yukuai3@xxxxxxxxxx>