diff mbox series

[v3,08/14] blk-mq: remove unncessary error count and commit in blk_mq_plug_issue_direct

Message ID 20230111130159.3741753-9-shikemeng@huaweicloud.com (mailing list archive)
State New, archived
Headers show
Series A few bugfix and cleanup patches for blk-mq | expand

Commit Message

Kemeng Shi Jan. 11, 2023, 1:01 p.m. UTC
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>
---
 block/blk-mq.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

Comments

Christoph Hellwig Jan. 11, 2023, 5:06 a.m. UTC | #1
On Wed, Jan 11, 2023 at 09:01:53PM +0800, Kemeng Shi wrote:
> 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>
> ---
>  block/blk-mq.c | 14 ++++----------
>  1 file changed, 4 insertions(+), 10 deletions(-)
> 
> diff --git a/block/blk-mq.c b/block/blk-mq.c
> index 98f6003474f2..c6c84f44c7a6 100644
> --- a/block/blk-mq.c
> +++ b/block/blk-mq.c
> @@ -2706,11 +2706,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;

I think we need to initialize this to BLK_STS_OK here.

Otherwise looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>
diff mbox series

Patch

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 98f6003474f2..c6c84f44c7a6 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -2706,11 +2706,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;
 
 	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)
@@ -2726,20 +2725,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_plug_commit_rqs(hctx, &queued);
-			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_plug_commit_rqs(hctx, &queued);
 }