Prev: [PATCHSET] libata: implement ->set_capacity()
Next: [PATCH 1/1] staging: hv: Fix error checking in channel.c
From: Tejun Heo on 13 May 2010 12:00 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(a)kernel.org> Reported-by: Ben Hutchings <ben(a)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 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |