On Mon, Jan 09, 2017 at 03:20:31PM -0500, Jeff Moyer wrote: > Additionally, don't assign directly to disk->queue, otherwise > blk_put_queue (called via put_disk) will choke (panic) on the errno > stored there. > > Bug found by code inspection after Omar found a similar issue in > virtio_blk. Compile-tested only. > > Signed-off-by: Jeff Moyer <jmoyer@xxxxxxxxxx> Reviewed-by: Omar Sandoval <osandov@xxxxxx> Compile-reviewed only :) Josef can probably test it if he cares enough, but it looks right. > diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c > index 38c576f..50a2020 100644 > --- a/drivers/block/nbd.c > +++ b/drivers/block/nbd.c > @@ -1042,6 +1042,7 @@ static int __init nbd_init(void) > return -ENOMEM; > > for (i = 0; i < nbds_max; i++) { > + struct request_queue *q; > struct gendisk *disk = alloc_disk(1 << part_shift); > if (!disk) > goto out; > @@ -1067,12 +1068,13 @@ static int __init nbd_init(void) > * every gendisk to have its very own request_queue struct. > * These structs are big so we dynamically allocate them. > */ > - disk->queue = blk_mq_init_queue(&nbd_dev[i].tag_set); > - if (!disk->queue) { > + q = blk_mq_init_queue(&nbd_dev[i].tag_set); > + if (IS_ERR(q)) { > blk_mq_free_tag_set(&nbd_dev[i].tag_set); > put_disk(disk); > goto out; > } > + disk->queue = q; > > /* > * Tell the block layer that we are not a rotational device -- To unsubscribe from this list: send the line "unsubscribe linux-block" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html