NVMe: End queued bio requests when freeing queue
authorKeith Busch <keith.busch@intel.com>
Mon, 20 Aug 2012 20:57:49 +0000 (14:57 -0600)
committerMatthew Wilcox <matthew.r.wilcox@intel.com>
Tue, 13 Nov 2012 14:13:49 +0000 (09:13 -0500)
If the queue has bios queued on it when it is freed, bio_endio() must be
called for them first.

Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
drivers/block/nvme.c

index 954a61018dc23bbddf7b906e18e87a036d3a1f3f..af88635e44e4e90a0f7a7e128c7764955945a134 100644 (file)
@@ -909,6 +909,10 @@ static void nvme_free_queue(struct nvme_dev *dev, int qid)
 
        spin_lock_irq(&nvmeq->q_lock);
        nvme_cancel_ios(nvmeq, false);
+       while (bio_list_peek(&nvmeq->sq_cong)) {
+               struct bio *bio = bio_list_pop(&nvmeq->sq_cong);
+               bio_endio(bio, -EIO);
+       }
        spin_unlock_irq(&nvmeq->q_lock);
 
        irq_set_affinity_hint(vector, NULL);