summaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-05-30 12:51:00 -0400
committerJens Axboe <axboe@kernel.dk>2018-05-30 13:31:34 -0400
commitd250bf4e776ff09d51c97f83c7a19f65a9e1c5a5 (patch)
tree8b0d1aff3030f70300bd2be35b279ae24a131f8e /drivers/block
parent5e3c3a7ecefefaebc7c9a626fe4522cb85bbdaad (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.c12
-rw-r--r--drivers/block/nbd.c5
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
2728static void mtip_abort_cmd(struct request *req, void *data, 2728static 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
2744static void mtip_queue_cmd(struct request *req, void *data, 2740static 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
677static void nbd_clear_req(struct request *req, void *data, bool reserved) 677static 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}