]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/block/nvme-core.c
Merge remote-tracking branches 'regulator/fix/88pm800', 'regulator/fix/max8973',...
[karo-tx-linux.git] / drivers / block / nvme-core.c
index 34338d7438f56895f76ac8b110d8e92a120b3202..7920c2741b47d436b2ef37e99019f33938f2db04 100644 (file)
@@ -1474,6 +1474,7 @@ static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid,
        nvmeq->q_db = &dev->dbs[qid * 2 * dev->db_stride];
        nvmeq->q_depth = depth;
        nvmeq->qid = qid;
+       nvmeq->cq_vector = -1;
        dev->queues[qid] = nvmeq;
 
        /* make sure queue descriptor is set before queue count, for kthread */
@@ -1726,8 +1727,10 @@ static int nvme_configure_admin_queue(struct nvme_dev *dev)
 
        nvmeq->cq_vector = 0;
        result = queue_request_irq(dev, nvmeq, nvmeq->irqname);
-       if (result)
+       if (result) {
+               nvmeq->cq_vector = -1;
                goto free_nvmeq;
+       }
 
        return result;
 
@@ -2105,8 +2108,17 @@ static void nvme_alloc_ns(struct nvme_dev *dev, unsigned nsid)
                goto out_free_disk;
 
        add_disk(ns->disk);
-       if (ns->ms)
-               revalidate_disk(ns->disk);
+       if (ns->ms) {
+               struct block_device *bd = bdget_disk(ns->disk, 0);
+               if (!bd)
+                       return;
+               if (blkdev_get(bd, FMODE_READ, NULL)) {
+                       bdput(bd);
+                       return;
+               }
+               blkdev_reread_part(bd);
+               blkdev_put(bd, FMODE_READ);
+       }
        return;
  out_free_disk:
        kfree(disk);
@@ -2213,8 +2225,10 @@ static int nvme_setup_io_queues(struct nvme_dev *dev)
        dev->max_qid = nr_io_queues;
 
        result = queue_request_irq(dev, adminq, adminq->irqname);
-       if (result)
+       if (result) {
+               adminq->cq_vector = -1;
                goto free_queues;
+       }
 
        /* Free previously allocated queues that are no longer usable */
        nvme_free_queues(dev, nr_io_queues + 1);