On Wed, 2018-05-16 at 14:51 +0200, Christoph Hellwig wrote: > I've been looking at this carefully, and I don't think we need cmpxchg64 > at all, and we don't need anywhere near as many cmpxchg operations either. > > The only reason to include the deadline in the atomic operation is the > blk_abort_request case, as the blk_mq_add_timer never modifies the > deadline of a request that someone could be racing with. So if we > introduce a new aborted state for use by blk_abort_request we can modify > the deadline separately (and in fact have a common field with the legacy > path). There is another reason the deadline is included in the atomic operation, namely to handle races between the BLK_EH_RESET_TIMER case in blk_mq_rq_timed_out() and blk_mq_complete_request(). I don't think that race is addressed properly by your patch. I will see what I can do to address that race without using 64-bit atomic operations. Bart.