Merge tag 'for-linus-20190118' of git://git.kernel.dk/linux-block
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 19 Jan 2019 21:12:50 +0000 (09:12 +1200)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 19 Jan 2019 21:12:50 +0000 (09:12 +1200)
Pull block fixes from Jens Axboe:

 - block size setting fixes for loop/nbd (Jan Kara)

 - md bio_alloc_mddev() cleanup (Marcos)

 - Ensure we don't lose the REQ_INTEGRITY flag (Ming)

 - Two NVMe fixes by way of Christoph:
    - Fix NVMe IRQ calculation (Ming)
    - Uninitialized variable in nvmet-tcp (Sagi)

 - BFQ comment fix (Paolo)

 - License cleanup for recently added blk-mq-debugfs-zoned (Thomas)

* tag 'for-linus-20190118' of git://git.kernel.dk/linux-block:
  block: Cleanup license notice
  nvme-pci: fix nvme_setup_irqs()
  nvmet-tcp: fix uninitialized variable access
  block: don't lose track of REQ_INTEGRITY flag
  blockdev: Fix livelocks on loop device
  nbd: Use set_blocksize() to set device blocksize
  md: Make bio_alloc_mddev use bio_alloc_bioset
  block, bfq: fix comments on __bfq_deactivate_entity

1  2 
drivers/nvme/host/pci.c

diff --combined drivers/nvme/host/pci.c
index deb1a66bf117a8896d2aeb0d13a9b2453657a49f,89f9dd72135a74fc235c3e696e054d4475402f47..9bc585415d9ba6b639bdbfd023d217a5b126084c
@@@ -1496,8 -1496,8 +1496,8 @@@ static int nvme_alloc_queue(struct nvme
        if (dev->ctrl.queue_count > qid)
                return 0;
  
 -      nvmeq->cqes = dma_zalloc_coherent(dev->dev, CQ_SIZE(depth),
 -                                        &nvmeq->cq_dma_addr, GFP_KERNEL);
 +      nvmeq->cqes = dma_alloc_coherent(dev->dev, CQ_SIZE(depth),
 +                                       &nvmeq->cq_dma_addr, GFP_KERNEL);
        if (!nvmeq->cqes)
                goto free_nvmeq;
  
@@@ -1927,8 -1927,8 +1927,8 @@@ static int __nvme_alloc_host_mem(struc
        if (dev->ctrl.hmmaxd && dev->ctrl.hmmaxd < max_entries)
                max_entries = dev->ctrl.hmmaxd;
  
 -      descs = dma_zalloc_coherent(dev->dev, max_entries * sizeof(*descs),
 -                      &descs_dma, GFP_KERNEL);
 +      descs = dma_alloc_coherent(dev->dev, max_entries * sizeof(*descs),
 +                                 &descs_dma, GFP_KERNEL);
        if (!descs)
                goto out;
  
@@@ -2041,14 -2041,18 +2041,18 @@@ static int nvme_setup_host_mem(struct n
        return ret;
  }
  
+ /* irq_queues covers admin queue */
  static void nvme_calc_io_queues(struct nvme_dev *dev, unsigned int irq_queues)
  {
        unsigned int this_w_queues = write_queues;
  
+       WARN_ON(!irq_queues);
        /*
-        * Setup read/write queue split
+        * Setup read/write queue split, assign admin queue one independent
+        * irq vector if irq_queues is > 1.
         */
-       if (irq_queues == 1) {
+       if (irq_queues <= 2) {
                dev->io_queues[HCTX_TYPE_DEFAULT] = 1;
                dev->io_queues[HCTX_TYPE_READ] = 0;
                return;
  
        /*
         * If 'write_queues' is set, ensure it leaves room for at least
-        * one read queue
+        * one read queue and one admin queue
         */
        if (this_w_queues >= irq_queues)
-               this_w_queues = irq_queues - 1;
+               this_w_queues = irq_queues - 2;
  
        /*
         * If 'write_queues' is set to zero, reads and writes will share
         * a queue set.
         */
        if (!this_w_queues) {
-               dev->io_queues[HCTX_TYPE_DEFAULT] = irq_queues;
+               dev->io_queues[HCTX_TYPE_DEFAULT] = irq_queues - 1;
                dev->io_queues[HCTX_TYPE_READ] = 0;
        } else {
                dev->io_queues[HCTX_TYPE_DEFAULT] = this_w_queues;
-               dev->io_queues[HCTX_TYPE_READ] = irq_queues - this_w_queues;
+               dev->io_queues[HCTX_TYPE_READ] = irq_queues - this_w_queues - 1;
        }
  }
  
@@@ -2095,7 -2099,7 +2099,7 @@@ static int nvme_setup_irqs(struct nvme_
                this_p_queues = nr_io_queues - 1;
                irq_queues = 1;
        } else {
-               irq_queues = nr_io_queues - this_p_queues;
+               irq_queues = nr_io_queues - this_p_queues + 1;
        }
        dev->io_queues[HCTX_TYPE_POLL] = this_p_queues;
  
                 * If we got a failure and we're down to asking for just
                 * 1 + 1 queues, just ask for a single vector. We'll share
                 * that between the single IO queue and the admin queue.
+                * Otherwise, we assign one independent vector to admin queue.
                 */
-               if (result >= 0 && irq_queues > 1)
+               if (irq_queues > 1)
                        irq_queues = irq_sets[0] + irq_sets[1] + 1;
  
                result = pci_alloc_irq_vectors_affinity(pdev, irq_queues,