blk-mq: remove unnecessary blk_clear_rq_complete()
authorMing Lei <ming.lei@canoical.com>
Wed, 17 Sep 2014 09:47:58 +0000 (17:47 +0800)
committerJens Axboe <axboe@fb.com>
Mon, 22 Sep 2014 18:00:07 +0000 (12:00 -0600)
This patch removes two unnecessary blk_clear_rq_complete(),
the REQ_ATOM_COMPLETE flag is cleared inside blk_mq_start_request(),
so:

- The blk_clear_rq_complete() in blk_flush_restore_request()
needn't because the request will be freed later, and clearing
it here may open a small race window with timeout.

- The blk_clear_rq_complete() in blk_mq_requeue_request() isn't
necessary too, even though REQ_ATOM_STARTED is cleared in
__blk_mq_requeue_request(), in theory it still may cause a small
race window with timeout since the two clear_bit() may be
reordered.

Signed-off-by: Ming Lei <ming.lei@canoical.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-flush.c
block/blk-mq.c

index 698e692..c8e2576 100644 (file)
@@ -126,8 +126,6 @@ static void blk_flush_restore_request(struct request *rq)
        /* make @rq a normal request */
        rq->cmd_flags &= ~REQ_FLUSH_SEQ;
        rq->end_io = rq->flush.saved_end_io;
-
-       blk_clear_rq_complete(rq);
 }
 
 static bool blk_flush_queue_rq(struct request *rq, bool add_front)
index d12f198..3b277b4 100644 (file)
@@ -439,7 +439,6 @@ static void __blk_mq_requeue_request(struct request *rq)
 void blk_mq_requeue_request(struct request *rq)
 {
        __blk_mq_requeue_request(rq);
-       blk_clear_rq_complete(rq);
 
        BUG_ON(blk_queued_rq(rq));
        blk_mq_add_to_requeue_list(rq, true);