diff options
author | Christoph Hellwig <hch@lst.de> | 2018-05-30 12:51:00 -0400 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2018-05-30 13:31:34 -0400 |
commit | d250bf4e776ff09d51c97f83c7a19f65a9e1c5a5 (patch) | |
tree | 8b0d1aff3030f70300bd2be35b279ae24a131f8e /drivers/block | |
parent | 5e3c3a7ecefefaebc7c9a626fe4522cb85bbdaad (diff) |
blk-mq: only iterate over inflight requests in blk_mq_tagset_busy_iter
We already check for started commands in all callbacks, but we should
also protect against already completed commands. Do this by taking
the checks to common code.
Acked-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/mtip32xx/mtip32xx.c | 12 | ||||
-rw-r--r-- | drivers/block/nbd.c | 5 |
2 files changed, 3 insertions, 14 deletions
diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c index 95657b814543..c73626decb46 100644 --- a/drivers/block/mtip32xx/mtip32xx.c +++ b/drivers/block/mtip32xx/mtip32xx.c | |||
@@ -2725,15 +2725,11 @@ static void mtip_softirq_done_fn(struct request *rq) | |||
2725 | blk_mq_end_request(rq, cmd->status); | 2725 | blk_mq_end_request(rq, cmd->status); |
2726 | } | 2726 | } |
2727 | 2727 | ||
2728 | static void mtip_abort_cmd(struct request *req, void *data, | 2728 | static void mtip_abort_cmd(struct request *req, void *data, bool reserved) |
2729 | bool reserved) | ||
2730 | { | 2729 | { |
2731 | struct mtip_cmd *cmd = blk_mq_rq_to_pdu(req); | 2730 | struct mtip_cmd *cmd = blk_mq_rq_to_pdu(req); |
2732 | struct driver_data *dd = data; | 2731 | struct driver_data *dd = data; |
2733 | 2732 | ||
2734 | if (!blk_mq_request_started(req)) | ||
2735 | return; | ||
2736 | |||
2737 | dbg_printk(MTIP_DRV_NAME " Aborting request, tag = %d\n", req->tag); | 2733 | dbg_printk(MTIP_DRV_NAME " Aborting request, tag = %d\n", req->tag); |
2738 | 2734 | ||
2739 | clear_bit(req->tag, dd->port->cmds_to_issue); | 2735 | clear_bit(req->tag, dd->port->cmds_to_issue); |
@@ -2741,14 +2737,10 @@ static void mtip_abort_cmd(struct request *req, void *data, | |||
2741 | mtip_softirq_done_fn(req); | 2737 | mtip_softirq_done_fn(req); |
2742 | } | 2738 | } |
2743 | 2739 | ||
2744 | static void mtip_queue_cmd(struct request *req, void *data, | 2740 | static void mtip_queue_cmd(struct request *req, void *data, bool reserved) |
2745 | bool reserved) | ||
2746 | { | 2741 | { |
2747 | struct driver_data *dd = data; | 2742 | struct driver_data *dd = data; |
2748 | 2743 | ||
2749 | if (!blk_mq_request_started(req)) | ||
2750 | return; | ||
2751 | |||
2752 | set_bit(req->tag, dd->port->cmds_to_issue); | 2744 | set_bit(req->tag, dd->port->cmds_to_issue); |
2753 | blk_abort_request(req); | 2745 | blk_abort_request(req); |
2754 | } | 2746 | } |
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index a6e3a6f05791..3ed1ef8ee528 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c | |||
@@ -676,11 +676,8 @@ static void recv_work(struct work_struct *work) | |||
676 | 676 | ||
677 | static void nbd_clear_req(struct request *req, void *data, bool reserved) | 677 | static void nbd_clear_req(struct request *req, void *data, bool reserved) |
678 | { | 678 | { |
679 | struct nbd_cmd *cmd; | 679 | struct nbd_cmd *cmd = blk_mq_rq_to_pdu(req); |
680 | 680 | ||
681 | if (!blk_mq_request_started(req)) | ||
682 | return; | ||
683 | cmd = blk_mq_rq_to_pdu(req); | ||
684 | cmd->status = BLK_STS_IOERR; | 681 | cmd->status = BLK_STS_IOERR; |
685 | blk_mq_complete_request(req); | 682 | blk_mq_complete_request(req); |
686 | } | 683 | } |