OSDN Git Service

md: convert to blk_alloc_disk/blk_cleanup_disk
authorChristoph Hellwig <hch@lst.de>
Fri, 21 May 2021 05:51:04 +0000 (07:51 +0200)
committerJens Axboe <axboe@kernel.dk>
Tue, 1 Jun 2021 13:42:23 +0000 (07:42 -0600)
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: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Link: https://lore.kernel.org/r/20210521055116.1053587-15-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/md.c

index 49f897f..d806be8 100644 (file)
@@ -5598,12 +5598,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);
@@ -5711,20 +5709,13 @@ static int md_alloc(dev_t dev, char *name)
                goto abort;
 
        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)
@@ -5733,7 +5724,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