> Il giorno 16 giu 2017, alle ore 18:15, Christoph Hellwig <hch@xxxxxx> ha scritto: > > icq_to_bic is a container_of operation, so we need to check for NULL > before it. Also move the check outside the spinlock while we're at > it. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > block/bfq-iosched.c | 15 +++++---------- > 1 file changed, 5 insertions(+), 10 deletions(-) > > diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c > index 4f69e39c2f89..f037b005faa1 100644 > --- a/block/bfq-iosched.c > +++ b/block/bfq-iosched.c > @@ -4398,16 +4398,17 @@ static int bfq_get_rq_private(struct request_queue *q, struct request *rq, > struct bio *bio) > { > struct bfq_data *bfqd = q->elevator->elevator_data; > - struct bfq_io_cq *bic = icq_to_bic(rq->elv.icq); > + struct bfq_io_cq *bic; > const int is_sync = rq_is_sync(rq); > struct bfq_queue *bfqq; > bool new_queue = false; > bool split = false; > > - spin_lock_irq(&bfqd->lock); Thanks for taking a step I feared here (basically for cowardice) ... > + if (!rq->elv.icq) > + return 1; > + bic = icq_to_bic(rq->elv.icq); > > - if (!bic) > - goto queue_fail; > + spin_lock_irq(&bfqd->lock); > > bfq_check_ioprio_change(bic, bio); > > @@ -4465,13 +4466,7 @@ static int bfq_get_rq_private(struct request_queue *q, struct request *rq, > bfq_handle_burst(bfqd, bfqq); > > spin_unlock_irq(&bfqd->lock); > - > return 0; > - > -queue_fail: > - spin_unlock_irq(&bfqd->lock); > - > - return 1; > } > > static void bfq_idle_slice_timer_body(struct bfq_queue *bfqq) > -- > 2.11.0 > Acked-by: Paolo Valente <paolo.valente@xxxxxxxxxx>