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@xxxxxxxxxx> Reported-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx> --- 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-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html