Commit d2c20edb authored by Christoph Hellwig's avatar Christoph Hellwig Committed by openeuler-sync-bot
Browse files

md: convert to blk_alloc_disk/blk_cleanup_disk

mainline inclusion
from mainline-v5.14-rc1
commit 0f1d2e06
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I81XCK

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0f1d2e0643c544df50dbc436da930201218fa1e2



--------------------------------

Convert the md driver to use the blk_alloc_disk and blk_cleanup_disk
helpers to simplify gendisk and request_queue allocation.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Reviewed-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Link: https://lore.kernel.org/r/20210521055116.1053587-15-hch@lst.de


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>

Conflict:
	drivers/md/md.c
	the merging order of commit ad3fc798 ("md: revert io
	stats accounting") is inconsistent.

Signed-off-by: default avatarLi Nan <linan122@huawei.com>
(cherry picked from commit 2d046fe6)
parent 95165e05
Loading
Loading
Loading
Loading
+9 −16
Original line number Diff line number Diff line
@@ -5653,12 +5653,10 @@ static void md_free(struct kobject *ko)
	if (mddev->sysfs_level)
		sysfs_put(mddev->sysfs_level);

	if (mddev->gendisk)
	if (mddev->gendisk) {
		del_gendisk(mddev->gendisk);
	if (mddev->queue)
		blk_cleanup_queue(mddev->queue);
	if (mddev->gendisk)
		put_disk(mddev->gendisk);
		blk_cleanup_disk(mddev->gendisk);
	}
	percpu_ref_exit(&mddev->writes_pending);

	bioset_exit(&mddev->bio_set);
@@ -5762,20 +5760,13 @@ static int md_alloc(dev_t dev, char *name)
		mddev->hold_active = UNTIL_STOP;

	error = -ENOMEM;
	mddev->queue = blk_alloc_queue(NUMA_NO_NODE);
	if (!mddev->queue)
	disk = blk_alloc_disk(NUMA_NO_NODE);
	if (!disk)
		goto abort;

	blk_set_stacking_limits(&mddev->queue->limits);

	disk = alloc_disk(1 << shift);
	if (!disk) {
		blk_cleanup_queue(mddev->queue);
		mddev->queue = NULL;
		goto abort;
	}
	disk->major = MAJOR(mddev->unit);
	disk->first_minor = unit << shift;
	disk->minors = 1 << shift;
	if (name)
		strcpy(disk->disk_name, name);
	else if (partitioned)
@@ -5784,7 +5775,9 @@ static int md_alloc(dev_t dev, char *name)
		sprintf(disk->disk_name, "md%d", unit);
	disk->fops = &md_fops;
	disk->private_data = mddev;
	disk->queue = mddev->queue;

	mddev->queue = disk->queue;
	blk_set_stacking_limits(&mddev->queue->limits);
	blk_queue_write_cache(mddev->queue, true, true);
	/* Allow extended partitions.  This makes the
	 * 'mdp' device redundant, but we can't really