[PATCH V2 3/4] block: re-organize blk_add_partitions
From: Ming Lei <hidden>
Date: 2021-02-24 04:00:32
Subsystem:
block layer, the rest · Maintainers:
Jens Axboe, Linus Torvalds
No functional change, make code more readable, just split blk_add_partitions() into two helpers. Cc: Ewan D. Milne <redacted> Signed-off-by: Ming Lei <redacted> --- 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