scsi: make sure that request queue queiesce and unquiesce balanced
authorMing Lei <ming.lei@redhat.com>
Tue, 9 Nov 2021 07:11:43 +0000 (15:11 +0800)
committerJens Axboe <axboe@kernel.dk>
Tue, 9 Nov 2021 15:14:27 +0000 (08:14 -0700)
commit93542fbfa7b726d053c01a9399577c03968c4f6b
tree8c51175536212413500e304da07ad81fb1ec19b8
parentd2b9f12b0f7cf95c43f5fd4a18688d958d39e423
scsi: make sure that request queue queiesce and unquiesce balanced

For fixing queue quiesce race between driver and block layer(elevator
switch, update nr_requests, ...), we need to support concurrent quiesce
and unquiesce, which requires the two call balanced.

It isn't easy to audit that in all scsi drivers, especially the two may
be called from different contexts, so do it in scsi core with one
per-device atomic variable to balance quiesce and unquiesce.

Reported-by: Yi Zhang <yi.zhang@redhat.com>
Fixes: e70feb8b3e68 ("blk-mq: support concurrent queue quiesce/unquiesce")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20211109071144.181581-4-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/scsi/scsi_lib.c
include/scsi/scsi_device.h