On Fri, Mar 08, 2019 at 10:07:23AM -0800, Bart Van Assche wrote: > On Fri, 2019-03-08 at 10:40 -0700, Keith Busch wrote: > > Drivers may need to know the state of their requets. > > Hi Keith, > > What makes you think that drivers should be able to check the state of their > requests? Please elaborate. Patches 4 and 5 in this series. > > diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h > > index faed9d9eb84c..db113aee48bb 100644 > > --- a/include/linux/blkdev.h > > +++ b/include/linux/blkdev.h > > @@ -241,6 +241,15 @@ struct request { > > struct request *next_rq; > > }; > > > > +/** > > + * blk_mq_rq_state() - read the current MQ_RQ_* state of a request > > + * @rq: target request. > > + */ > > +static inline enum mq_rq_state blk_mq_rq_state(struct request *rq) > > +{ > > + return READ_ONCE(rq->state); > > +} > > Please also explain how drivers can use this function without triggering a > race condition with the code that modifies rq->state. Either queisced or within a timeout handler that already locks the request lifetime.