nvme_poll_irqdisable(nvmeq, -1);
 }
 
+/*
+ * Called only on a device that has been disabled and after all other threads
+ * that can check this device's completion queues have synced. This is the
+ * last chance for the driver to see a natural completion before
+ * nvme_cancel_request() terminates all incomplete requests.
+ */
+static void nvme_reap_pending_cqes(struct nvme_dev *dev)
+{
+       u16 start, end;
+       int i;
+
+       for (i = dev->ctrl.queue_count - 1; i > 0; i--) {
+               nvme_process_cq(&dev->queues[i], &start, &end, -1);
+               nvme_complete_cqes(&dev->queues[i], start, end);
+       }
+}
+
 static int nvme_cmb_qdepth(struct nvme_dev *dev, int nr_io_queues,
                                int entry_size)
 {
                if (timeout == 0)
                        return false;
 
-               /* handle any remaining CQEs */
-               if (opcode == nvme_admin_delete_cq &&
-                   !test_bit(NVMEQ_DELETE_ERROR, &nvmeq->flags))
-                       nvme_poll_irqdisable(nvmeq, -1);
-
                sent--;
                if (nr_queues)
                        goto retry;
        nvme_suspend_io_queues(dev);
        nvme_suspend_queue(&dev->queues[0]);
        nvme_pci_disable(dev);
+       nvme_reap_pending_cqes(dev);
 
        blk_mq_tagset_busy_iter(&dev->tagset, nvme_cancel_request, &dev->ctrl);
        blk_mq_tagset_busy_iter(&dev->admin_tagset, nvme_cancel_request, &dev->ctrl);