Commit 3f5ad13c authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull SCSI fix from James Bottomley:
 "A single fix for a race introduced by a fix that went into 5.14-rc5"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  scsi: core: Fix hang of freezing queue between blocking and running device
parents 447e238f 02c6dcd5
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -808,12 +808,15 @@ store_state_field(struct device *dev, struct device_attribute *attr,
	ret = scsi_device_set_state(sdev, state);
	/*
	 * If the device state changes to SDEV_RUNNING, we need to
	 * rescan the device to revalidate it, and run the queue to
	 * avoid I/O hang.
	 * run the queue to avoid I/O hang, and rescan the device
	 * to revalidate it. Running the queue first is necessary
	 * because another thread may be waiting inside
	 * blk_mq_freeze_queue_wait() and because that call may be
	 * waiting for pending I/O to finish.
	 */
	if (ret == 0 && state == SDEV_RUNNING) {
		scsi_rescan_device(dev);
		blk_mq_run_hw_queues(sdev->request_queue, true);
		scsi_rescan_device(dev);
	}
	mutex_unlock(&sdev->state_mutex);