summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKemeng Shi <shikemeng@huaweicloud.com>2023-01-18 17:37:20 +0800
committerJens Axboe <axboe@kernel.dk>2023-02-06 09:22:28 -0700
commit0d617a83e8d4d3149d76cc074d9779a3b0ee7baf (patch)
tree8fb8edace226c7f63d664b49077119d76a417d5b
parent34c9f547402f11c0241a44800574ec4fa38cccb8 (diff)
downloadlinux-stable-0d617a83e8d4d3149d76cc074d9779a3b0ee7baf.tar.gz
linux-stable-0d617a83e8d4d3149d76cc074d9779a3b0ee7baf.tar.bz2
linux-stable-0d617a83e8d4d3149d76cc074d9779a3b0ee7baf.zip
blk-mq: remove unncessary error count and commit in blk_mq_plug_issue_direct
We need only to explicitly commit in two error cases: -did not queue everything initially scheduled to queue -the last attempt to queue a request failed (see comment of blk_mq_commit_rqs for more details). Both cases can be checked with ret of last request which breaks list walk. Remove unnecessary error count and unnecessary commit triggered by error which is not covered by cases described above. Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--block/blk-mq.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 99d434315027..a58e5b5256c0 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -2700,11 +2700,10 @@ static void blk_mq_plug_issue_direct(struct blk_plug *plug)
struct blk_mq_hw_ctx *hctx = NULL;
struct request *rq;
int queued = 0;
- int errors = 0;
+ blk_status_t ret = BLK_STS_OK;
while ((rq = rq_list_pop(&plug->mq_list))) {
bool last = rq_list_empty(plug->mq_list);
- blk_status_t ret;
if (hctx != rq->mq_hctx) {
if (hctx) {
@@ -2722,20 +2721,15 @@ static void blk_mq_plug_issue_direct(struct blk_plug *plug)
case BLK_STS_RESOURCE:
case BLK_STS_DEV_RESOURCE:
blk_mq_request_bypass_insert(rq, false, true);
- blk_mq_commit_rqs(hctx, queued, false);
- return;
+ goto out;
default:
blk_mq_end_request(rq, ret);
- errors++;
break;
}
}
- /*
- * If we didn't flush the entire list, we could have told the driver
- * there was more coming, but that turned out to be a lie.
- */
- if (errors)
+out:
+ if (ret != BLK_STS_OK)
blk_mq_commit_rqs(hctx, queued, false);
}