blk-mq: use blk_mq_rq_state() instead of testing REQ_ATOM_COMPLETE
authorTejun Heo <tj@kernel.org>
Tue, 9 Jan 2018 16:29:49 +0000 (08:29 -0800)
committerJens Axboe <axboe@kernel.dk>
Tue, 9 Jan 2018 16:31:15 +0000 (09:31 -0700)
blk_mq_check_inflight() and blk_mq_poll_hybrid_sleep() test
REQ_ATOM_COMPLETE to determine the request state.  Both uses are
speculative and we can test REQ_ATOM_STARTED and blk_mq_rq_state() for
equivalent results.  Replace the tests.  This will allow removing
REQ_ATOM_COMPLETE usages from blk-mq.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c

index 156203876c8c894c208bbdf071a872df84f59fc5..50dda2ff0d85bc69e2f3746a07d2c3868543ef84 100644 (file)
@@ -95,8 +95,7 @@ static void blk_mq_check_inflight(struct blk_mq_hw_ctx *hctx,
 {
        struct mq_inflight *mi = priv;
 
-       if (test_bit(REQ_ATOM_STARTED, &rq->atomic_flags) &&
-           !test_bit(REQ_ATOM_COMPLETE, &rq->atomic_flags)) {
+       if (blk_mq_rq_state(rq) == MQ_RQ_IN_FLIGHT) {
                /*
                 * index[0] counts the specific partition that was asked
                 * for. index[1] counts the ones that are active on the
@@ -3024,7 +3023,8 @@ static bool blk_mq_poll_hybrid_sleep(struct request_queue *q,
 
        hrtimer_init_sleeper(&hs, current);
        do {
-               if (test_bit(REQ_ATOM_COMPLETE, &rq->atomic_flags))
+               if (test_bit(REQ_ATOM_STARTED, &rq->atomic_flags) &&
+                   blk_mq_rq_state(rq) != MQ_RQ_IN_FLIGHT)
                        break;
                set_current_state(TASK_UNINTERRUPTIBLE);
                hrtimer_start_expires(&hs.timer, mode);