• Gabriel Krisman Bertazi's avatar
    nvme: Suspend all queues before deletion · c21377f8
    Gabriel Krisman Bertazi authored
    When nvme_delete_queue fails in the first pass of the
    nvme_disable_io_queues() loop, we return early, failing to suspend all
    of the IO queues.  Later, on the nvme_pci_disable path, this causes us
    to disable MSI without actually having freed all the IRQs, which
    triggers the BUG_ON in free_msi_irqs(), as show below.
    
    This patch refactors nvme_disable_io_queues to suspend all queues before
    start submitting delete queue commands.  This way, we ensure that we
    have at least returned every IRQ before continuing with the removal
    path.
    
    [  487.529200] kernel BUG at ../drivers/pci/msi.c:368!
    cpu 0x46: Vector: 700 (Program Check) at [c0000078c5b83650]
        pc: c000000000627a50: free_msi_irqs+0x90/0x200
        lr: c000000000627a40: free_msi_irqs+0x80/0x200
        sp: c0000078c5b838d0
       msr: 9000000100029033
      current = 0xc0000078c5b40000
      paca    = 0xc000000002bd7600   softe: 0        irq_happened: 0x01
        pid   = 1376, comm = kworker/70:1H
    kernel BUG at ../drivers/pci/msi.c:368!
    Linux version 4.7.0.mainline+ (root@iod76) (gcc version 5.3.1 20160413
    (Ubuntu/IBM 5.3.1-14ubuntu2.1) ) #104 SMP Fri Jul 29 09:20:17 CDT 2016
    enter ? for help
    [c0000078c5b83920] d0000000363b0cd8 nvme_dev_disable+0x208/0x4f0 [nvme]
    [c0000078c5b83a10] d0000000363b12a4 nvme_timeout+0xe4/0x250 [nvme]
    [c0000078c5b83ad0] c0000000005690e4 blk_mq_rq_timed_out+0x64/0x110
    [c0000078c5b83b40] c00000000056c930 bt_for_each+0x160/0x170
    [c0000078c5b83bb0] c00000000056d928 blk_mq_queue_tag_busy_iter+0x78/0x110
    [c0000078c5b83c00] c0000000005675d8 blk_mq_timeout_work+0xd8/0x1b0
    [c0000078c5b83c50] c0000000000e8cf0 process_one_work+0x1e0/0x590
    [c0000078c5b83ce0] c0000000000e9148 worker_thread+0xa8/0x660
    [c0000078c5b83d80] c0000000000f2090 kthread+0x110/0x130
    [c0000078c5b83e30] c0000000000095f0 ret_from_kernel_thread+0x5c/0x6c
    Signed-off-by: default avatarGabriel Krisman Bertazi <krisman@linux.vnet.ibm.com>
    Cc: Brian King <brking@linux.vnet.ibm.com>
    Cc: Keith Busch <keith.busch@intel.com>
    Cc: linux-nvme@lists.infradead.org
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    c21377f8
pci.c 53.7 KB