aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/mtip32xx/mtip32xx.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c
index 61b046f256ca..87717a1a5c89 100644
--- a/drivers/block/mtip32xx/mtip32xx.c
+++ b/drivers/block/mtip32xx/mtip32xx.c
@@ -950,7 +950,7 @@ static int mtip_quiesce_io(struct mtip_port *port, unsigned long timeout)
950 unsigned long to; 950 unsigned long to;
951 bool active = true; 951 bool active = true;
952 952
953 blk_mq_stop_hw_queues(port->dd->queue); 953 blk_mq_quiesce_queue(port->dd->queue);
954 954
955 to = jiffies + msecs_to_jiffies(timeout); 955 to = jiffies + msecs_to_jiffies(timeout);
956 do { 956 do {
@@ -970,10 +970,10 @@ static int mtip_quiesce_io(struct mtip_port *port, unsigned long timeout)
970 break; 970 break;
971 } while (time_before(jiffies, to)); 971 } while (time_before(jiffies, to));
972 972
973 blk_mq_start_stopped_hw_queues(port->dd->queue, true); 973 blk_mq_unquiesce_queue(port->dd->queue);
974 return active ? -EBUSY : 0; 974 return active ? -EBUSY : 0;
975err_fault: 975err_fault:
976 blk_mq_start_stopped_hw_queues(port->dd->queue, true); 976 blk_mq_unquiesce_queue(port->dd->queue);
977 return -EFAULT; 977 return -EFAULT;
978} 978}
979 979
@@ -2737,6 +2737,9 @@ static void mtip_abort_cmd(struct request *req, void *data,
2737 struct mtip_cmd *cmd = blk_mq_rq_to_pdu(req); 2737 struct mtip_cmd *cmd = blk_mq_rq_to_pdu(req);
2738 struct driver_data *dd = data; 2738 struct driver_data *dd = data;
2739 2739
2740 if (!blk_mq_request_started(req))
2741 return;
2742
2740 dbg_printk(MTIP_DRV_NAME " Aborting request, tag = %d\n", req->tag); 2743 dbg_printk(MTIP_DRV_NAME " Aborting request, tag = %d\n", req->tag);
2741 2744
2742 clear_bit(req->tag, dd->port->cmds_to_issue); 2745 clear_bit(req->tag, dd->port->cmds_to_issue);
@@ -2749,6 +2752,9 @@ static void mtip_queue_cmd(struct request *req, void *data,
2749{ 2752{
2750 struct driver_data *dd = data; 2753 struct driver_data *dd = data;
2751 2754
2755 if (!blk_mq_request_started(req))
2756 return;
2757
2752 set_bit(req->tag, dd->port->cmds_to_issue); 2758 set_bit(req->tag, dd->port->cmds_to_issue);
2753 blk_abort_request(req); 2759 blk_abort_request(req);
2754} 2760}
@@ -2814,6 +2820,8 @@ restart_eh:
2814 dev_warn(&dd->pdev->dev, 2820 dev_warn(&dd->pdev->dev,
2815 "Completion workers still active!"); 2821 "Completion workers still active!");
2816 2822
2823 blk_mq_quiesce_queue(dd->queue);
2824
2817 spin_lock(dd->queue->queue_lock); 2825 spin_lock(dd->queue->queue_lock);
2818 blk_mq_tagset_busy_iter(&dd->tags, 2826 blk_mq_tagset_busy_iter(&dd->tags,
2819 mtip_queue_cmd, dd); 2827 mtip_queue_cmd, dd);
@@ -2826,6 +2834,8 @@ restart_eh:
2826 mtip_abort_cmd, dd); 2834 mtip_abort_cmd, dd);
2827 2835
2828 clear_bit(MTIP_PF_TO_ACTIVE_BIT, &dd->port->flags); 2836 clear_bit(MTIP_PF_TO_ACTIVE_BIT, &dd->port->flags);
2837
2838 blk_mq_unquiesce_queue(dd->queue);
2829 } 2839 }
2830 2840
2831 if (test_bit(MTIP_PF_ISSUE_CMDS_BIT, &port->flags)) { 2841 if (test_bit(MTIP_PF_ISSUE_CMDS_BIT, &port->flags)) {
@@ -3995,8 +4005,9 @@ static int mtip_block_remove(struct driver_data *dd)
3995 dd->disk->disk_name); 4005 dd->disk->disk_name);
3996 4006
3997 blk_freeze_queue_start(dd->queue); 4007 blk_freeze_queue_start(dd->queue);
3998 blk_mq_stop_hw_queues(dd->queue); 4008 blk_mq_quiesce_queue(dd->queue);
3999 blk_mq_tagset_busy_iter(&dd->tags, mtip_no_dev_cleanup, dd); 4009 blk_mq_tagset_busy_iter(&dd->tags, mtip_no_dev_cleanup, dd);
4010 blk_mq_unquiesce_queue(dd->queue);
4000 4011
4001 /* 4012 /*
4002 * Delete our gendisk structure. This also removes the device 4013 * Delete our gendisk structure. This also removes the device