No functional change, make code more readable, just split blk_add_partitions() into two helpers. Cc: Ewan D. Milne <emilne@xxxxxxxxxx> Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> --- block/partitions/core.c | 50 +++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/block/partitions/core.c b/block/partitions/core.c index 07981f663f66..288ca362ccbd 100644 --- a/block/partitions/core.c +++ b/block/partitions/core.c @@ -603,17 +603,19 @@ static bool blk_add_partition(struct gendisk *disk, struct block_device *bdev, return true; } -int blk_add_partitions(struct gendisk *disk, struct block_device *bdev) +static int __blk_check_partitions(struct gendisk *disk, + struct block_device *bdev, struct parsed_partitions **s) { - struct parsed_partitions *state; - int ret = -EAGAIN, p; + struct parsed_partitions *state = NULL; + int ret = -EAGAIN; if (!disk_part_scan_enabled(disk)) - return 0; + goto out; state = check_partition(disk, bdev); if (!state) - return 0; + goto out; + if (IS_ERR(state)) { /* * I/O error reading the partition table. If we tried to read @@ -651,15 +653,45 @@ int blk_add_partitions(struct gendisk *disk, struct block_device *bdev) goto out_free_state; } +out: + *s = state; + return 0; + +out_free_state: + free_partitions(state); + *s = NULL; + return ret; +} + +static int __blk_add_partitions(struct gendisk *disk, + struct block_device *bdev, struct parsed_partitions *state) +{ + int p; + /* tell userspace that the media / partition table may have changed */ kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE); - for (p = 1; p < state->limit; p++) + for (p = 1; p < state->limit; p++) { if (!blk_add_partition(disk, bdev, state, p)) - goto out_free_state; + return -EAGAIN; + } + + return 0; +} + +int blk_add_partitions(struct gendisk *disk, struct block_device *bdev) +{ + struct parsed_partitions *state; + int ret; + + ret = __blk_check_partitions(disk, bdev, &state); + if (ret != 0) + return ret; + if (!state) + return 0; + + ret = __blk_add_partitions(disk, bdev, state); - ret = 0; -out_free_state: free_partitions(state); return ret; } -- 2.29.2