On Mon, 2018-01-08 at 11:15 -0800, Tejun Heo wrote: > After the recent updates to use generation number and state based > synchronization, blk-mq no longer depends on REQ_ATOM_COMPLETE except > to avoid firing the same timeout multiple times. > > Remove all REQ_ATOM_COMPLETE usages and use a new rq_flags flag > RQF_MQ_TIMEOUT_EXPIRED to avoid firing the same timeout multiple > times. This removes atomic bitops from hot paths too. > > v2: Removed blk_clear_rq_complete() from blk_mq_rq_timed_out(). > > v3: Added RQF_MQ_TIMEOUT_EXPIRED flag. I think it's unfortunate that this patch spreads the request state over two struct request members, namely the lower two bits of gstate and the RQF_MQ_TIMEOUT_EXPIRED flag in req->rq_flags. Please consider to drop the RQF_MQ_TIMEOUT_EXPIRED flag and to represent the "timeout has been processed" state as a MQ_RQ_* state in gstate. That will avoid that every state update has to be reviewed whether or not perhaps an update of the RQF_MQ_TIMEOUT_EXPIRED flag is missing. Thanks, Bart.