These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / scsi / hosts.c
index 8bb173e..82ac1cd 100644 (file)
@@ -217,6 +217,13 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev,
                error = scsi_mq_setup_tags(shost);
                if (error)
                        goto fail;
+       } else {
+               shost->bqt = blk_init_tags(shost->can_queue,
+                               shost->hostt->tag_alloc_policy);
+               if (!shost->bqt) {
+                       error = -ENOMEM;
+                       goto fail;
+               }
        }
 
        /*
@@ -326,6 +333,17 @@ static void scsi_host_dev_release(struct device *dev)
                kfree(queuedata);
        }
 
+       if (shost->shost_state == SHOST_CREATED) {
+               /*
+                * Free the shost_dev device name here if scsi_host_alloc()
+                * and scsi_host_put() have been called but neither
+                * scsi_host_add() nor scsi_host_remove() has been called.
+                * This avoids that the memory allocated for the shost_dev
+                * name is leaked.
+                */
+               kfree(dev_name(&shost->shost_dev));
+       }
+
        scsi_destroy_command_freelist(shost);
        if (shost_use_blk_mq(shost)) {
                if (shost->tag_set.tags)