> On Tue, Nov 01, 2022 at 11:11:37PM +0800, Jinlong Chen wrote: > > Add a helper blk_mq_alloc_request_nocache() to alloc request without > > cache. This makes blk_mq_alloc_request() more readable. > > > > Signed-off-by: Jinlong Chen <nickyc975@xxxxxxxxxx> > > --- > > block/blk-mq.c | 47 +++++++++++++++++++++++++++++------------------ > > 1 file changed, 29 insertions(+), 18 deletions(-) > > > > diff --git a/block/blk-mq.c b/block/blk-mq.c > > index 87a6348a0d0a..2fae111a42c8 100644 > > --- a/block/blk-mq.c > > +++ b/block/blk-mq.c > > @@ -572,36 +572,47 @@ static struct request *blk_mq_alloc_cached_request(struct request_queue *q, > > return rq; > > } > > > > +static struct request *blk_mq_alloc_request_nocache(struct request_queue *q, > > + blk_opf_t opf, blk_mq_req_flags_t flags) > > The name is a bit odd, but I can't think off a better one. > > > + struct blk_mq_alloc_data data = { > > .q = q, > > .flags = flags, > > .cmd_flags = opf, > > .nr_tags = 1, > > }; > > And this now has superflous indenation. Overall, while the separate > helper looks marginally nicer, I'm not really sure it is worth the > churn. I'll drop the patch if you think it is not worth the churn. But I started doing this because of the following goto statement: rq = blk_mq_alloc_cached_request(q, opf, flags); if (!rq) { [...] ret = blk_queue_enter(q, flags); [...] rq = __blk_mq_alloc_requests(&data); if (!rq) goto out_queue_exit; } [...] out_queue_exit: blk_queue_exit(q); return ERR_PTR(-EWOULDBLOCK); Queue entering has been moved into the fallback path, left queue exiting outside. Should I just eliminate the goto statement and move the error handling into the fallback path too? Like: rq = blk_mq_alloc_cached_request(q, opf, flags); if (!rq) { [...] ret = blk_queue_enter(q, flags); [...] rq = __blk_mq_alloc_requests(&data); if (!rq) { blk_queue_exit(q); return ERR_PTR(-EWOULDBLOCK); } } Thanks! Jinlong Chen