Messages in this thread Patch in this message | | | From | Tejun Heo <> | Subject | [PATCH 1/4] block: restart partition scan after resizing a device | Date | Thu, 13 May 2010 17:56:43 +0200 |
| |
Device resize via ->set_capacity() can reveal new partitions (e.g. in chained partition table formats such as dos extended parts). Restart partition scan from the beginning after resizing a device.
Signed-off-by: Tejun Heo <tj@kernel.org> Reported-by: Ben Hutchings <ben@decadent.org.uk> --- fs/partitions/check.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/fs/partitions/check.c b/fs/partitions/check.c index e238ab2..f80a58d 100644 --- a/fs/partitions/check.c +++ b/fs/partitions/check.c @@ -550,7 +550,7 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev) res = invalidate_partition(disk, 0); if (res) return res; - +rescan: disk_part_iter_init(&piter, disk, DISK_PITER_INCL_EMPTY); while ((part = disk_part_iter_next(&piter))) delete_partition(disk, part->partno); @@ -581,7 +581,7 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev) /* add partitions */ for (p = 1; p < state->limit; p++) { sector_t size, from; -try_scan: + size = state->parts[p].size; if (!size) continue; @@ -612,7 +612,8 @@ try_scan: check_disk_size_change(disk, bdev); bdev->bd_invalidated = 0; } - goto try_scan; + kfree(state); + goto rescan; } else { /* * we can not ignore partitions of broken tables -- 1.6.4.2
| |