Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[cascardo/linux.git] / drivers / scsi / hosts.c
index ec6381e..258a3f9 100644 (file)
@@ -246,10 +246,6 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev,
 
        shost->dma_dev = dma_dev;
 
-       error = device_add(&shost->shost_gendev);
-       if (error)
-               goto out_destroy_freelist;
-
        /*
         * Increase usage count temporarily here so that calling
         * scsi_autopm_put_host() will trigger runtime idle if there is
@@ -260,6 +256,10 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev,
        pm_runtime_enable(&shost->shost_gendev);
        device_enable_async_suspend(&shost->shost_gendev);
 
+       error = device_add(&shost->shost_gendev);
+       if (error)
+               goto out_destroy_freelist;
+
        scsi_host_set_state(shost, SHOST_RUNNING);
        get_device(shost->shost_gendev.parent);
 
@@ -309,6 +309,10 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev,
  out_del_gendev:
        device_del(&shost->shost_gendev);
  out_destroy_freelist:
+       device_disable_async_suspend(&shost->shost_gendev);
+       pm_runtime_disable(&shost->shost_gendev);
+       pm_runtime_set_suspended(&shost->shost_gendev);
+       pm_runtime_put_noidle(&shost->shost_gendev);
        scsi_destroy_command_freelist(shost);
  out_destroy_tags:
        if (shost_use_blk_mq(shost))