block: fix race between request completion and timeout handling
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / block / blk-timeout.c
index 6e4744cbfb56b4ca0d99062a0d9b0437c894016d..5a6296ef9a81e62c4a074fa1e5a80f0b0cce3b26 100644 (file)
@@ -90,8 +90,8 @@ static void blk_rq_timed_out(struct request *req)
                __blk_complete_request(req);
                break;
        case BLK_EH_RESET_TIMER:
-               blk_clear_rq_complete(req);
                blk_add_timer(req);
+               blk_clear_rq_complete(req);
                break;
        case BLK_EH_NOT_HANDLED:
                /*
@@ -173,7 +173,6 @@ void blk_add_timer(struct request *req)
                return;
 
        BUG_ON(!list_empty(&req->timeout_list));
-       BUG_ON(test_bit(REQ_ATOM_COMPLETE, &req->atomic_flags));
 
        /*
         * Some LLDs, like scsi, peek at the timeout to prevent a