From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tejun Heo Subject: [PATCH 1/4] block: restart partition scan after resizing a device Date: Thu, 13 May 2010 17:56:43 +0200 Message-ID: <1273766206-17402-2-git-send-email-tj@kernel.org> References: <1273766206-17402-1-git-send-email-tj@kernel.org> Return-path: In-Reply-To: <1273766206-17402-1-git-send-email-tj@kernel.org> Sender: linux-ide-owner@vger.kernel.org To: jeff@garzik.org, linux-ide@vger.kernel.org, jens.axboe@oracle.com, linux-scsi@vger.kernel.org, James.Bottomley@suse.de, linux-kernel@vger.kernel.org Cc: ben@decadent.org.uk, Tejun Heo List-Id: linux-scsi@vger.kernel.org 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 Reported-by: Ben Hutchings --- 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