On Tue, Oct 18, 2022 at 03:57:18PM +0200, Christoph Hellwig wrote: > Now that blk_mq_destroy_queue does not release the queue reference, there > is no need for a second queue reference to be held by the scsi_device. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > drivers/scsi/scsi_scan.c | 1 - > drivers/scsi/scsi_sysfs.c | 1 - > 2 files changed, 2 deletions(-) > > diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c > index 5d27f5196de6f..0a95fa787fdf4 100644 > --- a/drivers/scsi/scsi_scan.c > +++ b/drivers/scsi/scsi_scan.c > @@ -344,7 +344,6 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget, > sdev->request_queue = q; > q->queuedata = sdev; > __scsi_init_queue(sdev->host, q); > - WARN_ON_ONCE(!blk_get_queue(q)); > > depth = sdev->host->cmd_per_lun ?: 1; > > diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c > index 1214c6f07bc64..c95177ca6ed26 100644 > --- a/drivers/scsi/scsi_sysfs.c > +++ b/drivers/scsi/scsi_sysfs.c > @@ -1478,7 +1478,6 @@ void __scsi_remove_device(struct scsi_device *sdev) > mutex_unlock(&sdev->state_mutex); > > blk_mq_destroy_queue(sdev->request_queue); > - blk_put_queue(sdev->request_queue); The above put is counter-pair of blk_get_queue() in scsi_alloc_sdev, and the original blk_put_queue() in blk_mq_destroy_queue() is counter-pair of the initial get in blk_alloc_queue(). Now blk_put_queue() is moved out of blk_mq_destroy_queue(), I am wondering how the scsi queue lifetime can work correctly with this patch? Or is there bug in current scsi code? Thanks, Ming