mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-16 01:42:43 +00:00
Revert "scsi: Fix a bdi reregistration race"
The SCSI sd driver probes SCSI devices asynchronously. The sd_remove() function, called indirectly by device_del(), waits until asynchronous probing has finished. Since the block layer queue must only be cleaned up after probing has finished, device_del() has to be called before blk_cleanup_queue(). Hence revert commit bf2cf3baa20b. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Cc: <stable@vger.kernel.org> Signed-off-by: James Bottomley <JBottomley@Odin.com>
This commit is contained in:
parent
8005c49d9a
commit
e619e6cbec
@ -1110,7 +1110,9 @@ void __scsi_remove_device(struct scsi_device *sdev)
|
|||||||
device_unregister(&sdev->sdev_dev);
|
device_unregister(&sdev->sdev_dev);
|
||||||
transport_remove_device(dev);
|
transport_remove_device(dev);
|
||||||
scsi_dh_remove_device(sdev);
|
scsi_dh_remove_device(sdev);
|
||||||
}
|
device_del(dev);
|
||||||
|
} else
|
||||||
|
put_device(&sdev->sdev_dev);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Stop accepting new requests and wait until all queuecommand() and
|
* Stop accepting new requests and wait until all queuecommand() and
|
||||||
@ -1121,16 +1123,6 @@ void __scsi_remove_device(struct scsi_device *sdev)
|
|||||||
blk_cleanup_queue(sdev->request_queue);
|
blk_cleanup_queue(sdev->request_queue);
|
||||||
cancel_work_sync(&sdev->requeue_work);
|
cancel_work_sync(&sdev->requeue_work);
|
||||||
|
|
||||||
/*
|
|
||||||
* Remove the device after blk_cleanup_queue() has been called such
|
|
||||||
* a possible bdi_register() call with the same name occurs after
|
|
||||||
* blk_cleanup_queue() has called bdi_destroy().
|
|
||||||
*/
|
|
||||||
if (sdev->is_visible)
|
|
||||||
device_del(dev);
|
|
||||||
else
|
|
||||||
put_device(&sdev->sdev_dev);
|
|
||||||
|
|
||||||
if (sdev->host->hostt->slave_destroy)
|
if (sdev->host->hostt->slave_destroy)
|
||||||
sdev->host->hostt->slave_destroy(sdev);
|
sdev->host->hostt->slave_destroy(sdev);
|
||||||
transport_destroy_device(dev);
|
transport_destroy_device(dev);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user