mirror of https://gitee.com/openkylin/linux.git
block: allocate bd_meta_info later in add_partitions
Move the allocation of bd_meta_info after initializing the struct device to avoid the special bdput error handling path. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Ming Lei <ming.lei@redhat.com> Link: https://lore.kernel.org/r/20210722075402.983367-5-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
d7a66574b3
commit
0468c53234
|
@ -356,13 +356,6 @@ static struct block_device *add_partition(struct gendisk *disk, int partno,
|
|||
bdev->bd_start_sect = start;
|
||||
bdev_set_nr_sectors(bdev, len);
|
||||
|
||||
if (info) {
|
||||
err = -ENOMEM;
|
||||
bdev->bd_meta_info = kmemdup(info, sizeof(*info), GFP_KERNEL);
|
||||
if (!bdev->bd_meta_info)
|
||||
goto out_bdput;
|
||||
}
|
||||
|
||||
pdev = &bdev->bd_device;
|
||||
dname = dev_name(ddev);
|
||||
if (isdigit(dname[strlen(dname) - 1]))
|
||||
|
@ -386,6 +379,13 @@ static struct block_device *add_partition(struct gendisk *disk, int partno,
|
|||
}
|
||||
pdev->devt = devt;
|
||||
|
||||
if (info) {
|
||||
err = -ENOMEM;
|
||||
bdev->bd_meta_info = kmemdup(info, sizeof(*info), GFP_KERNEL);
|
||||
if (!bdev->bd_meta_info)
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
/* delay uevent until 'holders' subdir is created */
|
||||
dev_set_uevent_suppress(pdev, 1);
|
||||
err = device_add(pdev);
|
||||
|
@ -415,9 +415,6 @@ static struct block_device *add_partition(struct gendisk *disk, int partno,
|
|||
kobject_uevent(&pdev->kobj, KOBJ_ADD);
|
||||
return bdev;
|
||||
|
||||
out_bdput:
|
||||
bdput(bdev);
|
||||
return ERR_PTR(err);
|
||||
out_del:
|
||||
kobject_put(bdev->bd_holder_dir);
|
||||
device_del(pdev);
|
||||
|
|
Loading…
Reference in New Issue