On 11/12/18 2:23 AM, Jianchao Wang wrote: > Merge blk_mq_try_issue_directly and __blk_mq_try_issue_directly > into one interface to unify the interfaces to issue requests > directly. The merged interface takes over the requests totally, > it could insert, end or do nothing based on the return value of > .queue_rq and 'bypass' parameter. Then caller needn't any other > handling any more. > > To make code clearer, introduce new helpers enum mq_issue_decision > and blk_mq_make_decision to decide how to handle the non-issued > requests. > > Signed-off-by: Jianchao Wang <jianchao.w.wang@xxxxxxxxxx> > --- > block/blk-mq.c | 108 +++++++++++++++++++++++++++++++++------------------------ > 1 file changed, 63 insertions(+), 45 deletions(-) > > diff --git a/block/blk-mq.c b/block/blk-mq.c > index 364a53f..48b7a7c 100644 > --- a/block/blk-mq.c > +++ b/block/blk-mq.c > @@ -1766,77 +1766,95 @@ static blk_status_t __blk_mq_issue_directly(struct blk_mq_hw_ctx *hctx, > return ret; > } > > -static blk_status_t __blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx, > +enum mq_issue_decision { > + MQ_ISSUE_INSERT_QUEUE, > + MQ_ISSUE_END_REQUEST, > + MQ_ISSUE_DO_NOTHING, > +}; > + > +static inline enum mq_issue_decision > + blk_mq_make_dicision(blk_status_t ret, bool bypass) > +{ > + enum mq_issue_decision dec; > + > + switch(ret) { > + case BLK_STS_OK: > + dec = MQ_ISSUE_DO_NOTHING; > + break; > + case BLK_STS_DEV_RESOURCE: > + case BLK_STS_RESOURCE: > + dec = bypass ? MQ_ISSUE_DO_NOTHING : MQ_ISSUE_INSERT_QUEUE; > + break; > + default: > + dec = bypass ? MQ_ISSUE_DO_NOTHING : MQ_ISSUE_END_REQUEST; > + break; > + } > + > + return dec; > +} You seem to mix and match decision and dicision, the former is the right spelling. But more importantly, not sure I like where this is going, wrapping the return value in some other status code. That also makes it a bit fragile in terms of adding other status codes, another spot to update. Like the decent distinction between RESOURCE and DEV_RESOURCE. Maybe it is cleaner to just handle this in the caller still? -- Jens Axboe