From d033e495fad9cebc1206e84d07c3934e7edf3758 Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Sat, 15 May 2010 20:09:28 +0200 Subject: [PATCH] --- yaml --- r: 196873 b: refs/heads/master c: 56bca01738733709bef076e2e97bbd01e5659f24 h: refs/heads/master i: 196871: b29eed454437f4c66f732a042f8d375c2f31ec3e v: v3 --- [refs] | 2 +- trunk/fs/partitions/check.c | 16 ++++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index bd104bafa0f3..169c40c1faa6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fa4b9074cd8428958c2adf9dc0c831f46e27c193 +refs/heads/master: 56bca01738733709bef076e2e97bbd01e5659f24 diff --git a/trunk/fs/partitions/check.c b/trunk/fs/partitions/check.c index e238ab23a9e7..8f01df354f04 100644 --- a/trunk/fs/partitions/check.c +++ b/trunk/fs/partitions/check.c @@ -544,7 +544,7 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev) struct hd_struct *part; struct parsed_partitions *state; int p, highest, res; - +rescan: if (bdev->bd_part_count) return -EBUSY; res = invalidate_partition(disk, 0); @@ -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; @@ -596,7 +596,6 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev) if (from + size > get_capacity(disk)) { const struct block_device_operations *bdops = disk->fops; - unsigned long long capacity; printk(KERN_WARNING "%s: p%d size %llu exceeds device capacity, ", @@ -605,14 +604,11 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev) if (bdops->set_capacity && (disk->flags & GENHD_FL_NATIVE_CAPACITY) == 0) { printk(KERN_CONT "enabling native capacity\n"); - capacity = bdops->set_capacity(disk, ~0ULL); + bdops->set_capacity(disk, ~0ULL); disk->flags |= GENHD_FL_NATIVE_CAPACITY; - if (capacity > get_capacity(disk)) { - set_capacity(disk, capacity); - check_disk_size_change(disk, bdev); - bdev->bd_invalidated = 0; - } - goto try_scan; + /* free state and restart */ + kfree(state); + goto rescan; } else { /* * we can not ignore partitions of broken tables