On Mon, Nov 29, 2021 at 05:09:25PM +0100, Jan Kara wrote: > On Fri 26-11-21 12:58:07, Christoph Hellwig wrote: > > No need to create a new I/O context if there is none present yet in > > ->limit_depth. > > > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > > --- > > block/bfq-iosched.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c > > index c990c6409c119..ecc2e57e68630 100644 > > --- a/block/bfq-iosched.c > > +++ b/block/bfq-iosched.c > > @@ -663,7 +663,7 @@ static bool bfqq_request_over_limit(struct bfq_queue *bfqq, int limit) > > static void bfq_limit_depth(unsigned int op, struct blk_mq_alloc_data *data) > > { > > struct bfq_data *bfqd = data->q->elevator->elevator_data; > > - struct bfq_io_cq *bic = icq_to_bic(blk_mq_sched_get_icq(data->q)); > > + struct bfq_io_cq *bic = bfq_bic_lookup(data->q); > > Maybe I'm missing something but bfq_limit_depth() needs to know to which > BFQ queue (and consequently blkcg) this IO is going to be added. And to be > able to lookup this queue we are using IO context. So AFAICT we need the > IO context allocated already in bfq_limit_depth()? But by allocating it you won't now anything, as it will still be empty.