scsi: core: Remove the put_device() call from scsi_device_get()
scsi_device_get() may be called from atomic context, e.g. by shost_for_each_device(). A later commit will allow put_device() to sleep for SCSI devices. Hence remove the put_device() call from scsi_device_get(). According to Rusty Russell's "Module Refcount and Stuff mini-FAQ", calling module_put() from atomic context is allowed since considerable time. See also https://lkml.org/lkml/2002/11/18/330. Cc: Christoph Hellwig <hch@lst.de> Cc: Ming Lei <ming.lei@redhat.com> Cc: Hannes Reinecke <hare@suse.de> Cc: Mike Christie <michael.christie@oracle.com> Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Signed-off-by: Bart Van Assche <bvanassche@acm.org> Link: https://lore.kernel.org/r/20221015002418.30955-8-bvanassche@acm.org Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
6d1aa3b058
commit
195fae206e
@ -563,14 +563,14 @@ int scsi_device_get(struct scsi_device *sdev)
|
||||
{
|
||||
if (sdev->sdev_state == SDEV_DEL || sdev->sdev_state == SDEV_CANCEL)
|
||||
goto fail;
|
||||
if (!get_device(&sdev->sdev_gendev))
|
||||
goto fail;
|
||||
if (!try_module_get(sdev->host->hostt->module))
|
||||
goto fail_put_device;
|
||||
goto fail;
|
||||
if (!get_device(&sdev->sdev_gendev))
|
||||
goto fail_put_module;
|
||||
return 0;
|
||||
|
||||
fail_put_device:
|
||||
put_device(&sdev->sdev_gendev);
|
||||
fail_put_module:
|
||||
module_put(sdev->host->hostt->module);
|
||||
fail:
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user