/* Not exported, helper to add_disk(). */
void register_disk(struct gendisk *disk)
{
+ struct parsed_partitions *state;
struct block_device *bdev;
char *s;
+ int j;
int err;
strlcpy(disk->kobj.name,disk->disk_name,KOBJ_NAME_LEN);
if (!bdev)
return;
- bdev->bd_invalidated = 1;
if (blkdev_get(bdev, FMODE_READ, 0) < 0)
return;
+ state = check_partition(disk, bdev);
+ if (state) {
+ for (j = 1; j < state->limit; j++) {
+ sector_t size = state->parts[j].size;
+ sector_t from = state->parts[j].from;
+ if (!size)
+ continue;
+ add_partition(disk, j, from, size);
+#ifdef CONFIG_BLK_DEV_MD
+ if (!state->parts[j].flags)
+ continue;
+ md_autodetect_dev(bdev->bd_dev+j);
+#endif
+ }
+ kfree(state);
+ }
blkdev_put(bdev);
}
if (disk->fops->revalidate_disk)
disk->fops->revalidate_disk(disk);
if (!get_capacity(disk) || !(state = check_partition(disk, bdev)))
- return 0;
+ return -EIO;
for (p = 1; p < state->limit; p++) {
sector_t size = state->parts[p].size;
sector_t from = state->parts[p].from;