diff options
| -rw-r--r-- | drivers/block/mtip32xx/mtip32xx.c | 19 |
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; |
| 975 | err_fault: | 975 | err_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 |
