Commit 4a1fa41d authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

block: pass a request_queue to __blk_alloc_disk



Pass in a request_queue and assign disk->queue in __blk_alloc_disk to
ensure struct gendisk always has a valid ->queue pointer.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20210816131910.615153-8-hch@lst.de


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent a58bd768
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -3143,12 +3143,11 @@ struct gendisk *__blk_mq_alloc_disk(struct blk_mq_tag_set *set, void *queuedata,
	if (IS_ERR(q))
		return ERR_CAST(q);

	disk = __alloc_disk_node(set->numa_node, lkclass);
	disk = __alloc_disk_node(q, set->numa_node, lkclass);
	if (!disk) {
		blk_cleanup_queue(q);
		return ERR_PTR(-ENOMEM);
	}
	disk->queue = q;
	return disk;
}
EXPORT_SYMBOL(__blk_mq_alloc_disk);
+4 −3
Original line number Diff line number Diff line
@@ -1254,7 +1254,8 @@ dev_t blk_lookup_devt(const char *name, int partno)
	return devt;
}

struct gendisk *__alloc_disk_node(int node_id, struct lock_class_key *lkclass)
struct gendisk *__alloc_disk_node(struct request_queue *q, int node_id,
		struct lock_class_key *lkclass)
{
	struct gendisk *disk;

@@ -1281,6 +1282,7 @@ struct gendisk *__alloc_disk_node(int node_id, struct lock_class_key *lkclass)
	disk_to_dev(disk)->type = &disk_type;
	device_initialize(disk_to_dev(disk));
	inc_diskseq(disk);
	disk->queue = q;
	lockdep_init_map(&disk->lockdep_map, "(bio completion)", lkclass, 0);
#ifdef CONFIG_BLOCK_HOLDER_DEPRECATED
	INIT_LIST_HEAD(&disk->slave_bdevs);
@@ -1307,12 +1309,11 @@ struct gendisk *__blk_alloc_disk(int node, struct lock_class_key *lkclass)
	if (!q)
		return NULL;

	disk = __alloc_disk_node(node, lkclass);
	disk = __alloc_disk_node(q, node, lkclass);
	if (!disk) {
		blk_cleanup_queue(q);
		return NULL;
	}
	disk->queue = q;
	return disk;
}
EXPORT_SYMBOL(__blk_alloc_disk);
+2 −2
Original line number Diff line number Diff line
@@ -40,7 +40,8 @@ int dasd_gendisk_alloc(struct dasd_block *block)
	if (base->devindex >= DASD_PER_MAJOR)
		return -EBUSY;

	gdp = __alloc_disk_node(NUMA_NO_NODE, &dasd_bio_compl_lkclass);
	gdp = __alloc_disk_node(block->request_queue, NUMA_NO_NODE,
				&dasd_bio_compl_lkclass);
	if (!gdp)
		return -ENOMEM;

@@ -76,7 +77,6 @@ int dasd_gendisk_alloc(struct dasd_block *block)
	    test_bit(DASD_FLAG_DEVICE_RO, &base->flags))
		set_disk_ro(gdp, 1);
	dasd_add_link_to_gendisk(gdp, base);
	gdp->queue = block->request_queue;
	block->gdp = gdp;
	set_capacity(block->gdp, 0);
	device_add_disk(&base->cdev->dev, block->gdp, NULL);
+2 −2
Original line number Diff line number Diff line
@@ -3409,7 +3409,8 @@ static int sd_probe(struct device *dev)
	if (!sdkp)
		goto out;

	gd = __alloc_disk_node(NUMA_NO_NODE, &sd_bio_compl_lkclass);
	gd = __alloc_disk_node(sdp->request_queue, NUMA_NO_NODE,
			       &sd_bio_compl_lkclass);
	if (!gd)
		goto out_free;

@@ -3459,7 +3460,6 @@ static int sd_probe(struct device *dev)

	gd->fops = &sd_fops;
	gd->private_data = &sdkp->driver;
	gd->queue = sdkp->device->request_queue;

	/* defaults, until the device tells us otherwise */
	sdp->sector_size = 512;
+2 −2
Original line number Diff line number Diff line
@@ -714,7 +714,8 @@ static int sr_probe(struct device *dev)

	kref_init(&cd->kref);

	disk = __alloc_disk_node(NUMA_NO_NODE, &sr_bio_compl_lkclass);
	disk = __alloc_disk_node(sdev->request_queue, NUMA_NO_NODE,
				 &sr_bio_compl_lkclass);
	if (!disk)
		goto fail_free;
	mutex_init(&cd->lock);
@@ -765,7 +766,6 @@ static int sr_probe(struct device *dev)

	set_capacity(disk, cd->capacity);
	disk->private_data = &cd->driver;
	disk->queue = sdev->request_queue;

	if (register_cdrom(disk, &cd->cdi))
		goto fail_minor;
Loading