提交 cf4b50af 编写于 作者: J Jens Axboe

blk-mq: fix race in IO start accounting

Commit c6d600c6 opened up a small race where we could attempt to
account IO completion on a request, racing with IO start accounting.
Fix this up by ensuring that we've accounted for IO start before
inserting the request.
Signed-off-by: NJens Axboe <axboe@fb.com>
上级 4bb659b1
...@@ -1088,17 +1088,15 @@ static void blk_mq_make_request(struct request_queue *q, struct bio *bio) ...@@ -1088,17 +1088,15 @@ static void blk_mq_make_request(struct request_queue *q, struct bio *bio)
} }
if (!(hctx->flags & BLK_MQ_F_SHOULD_MERGE)) { if (!(hctx->flags & BLK_MQ_F_SHOULD_MERGE)) {
init_request_from_bio(rq, bio); blk_mq_bio_to_request(rq, bio);
spin_lock(&ctx->lock); spin_lock(&ctx->lock);
insert_rq: insert_rq:
__blk_mq_insert_request(hctx, rq, false); __blk_mq_insert_request(hctx, rq, false);
spin_unlock(&ctx->lock); spin_unlock(&ctx->lock);
blk_account_io_start(rq, 1);
} else { } else {
spin_lock(&ctx->lock); spin_lock(&ctx->lock);
if (!blk_mq_attempt_merge(q, ctx, bio)) { if (!blk_mq_attempt_merge(q, ctx, bio)) {
init_request_from_bio(rq, bio); blk_mq_bio_to_request(rq, bio);
goto insert_rq; goto insert_rq;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册