diff options
author | Will Drewry <wad@chromium.org> | 2010-08-31 16:47:07 -0400 |
---|---|---|
committer | Jens Axboe <jaxboe@fusionio.com> | 2010-09-15 10:14:03 -0400 |
commit | b5af921ec02333e943efb59aca4f56b78fc0e100 (patch) | |
tree | fcf966ccbee9c5f8b8f652100f033bc781b91b91 /block/genhd.c | |
parent | eec7ecfede74bb996060efefd5c157acd5794e8a (diff) |
init: add support for root devices specified by partition UUID
This is the third patch in a series which adds support for
storing partition metadata, optionally, off of the hd_struct.
One major use for that data is being able to resolve partition
by other identities than just the index on a block device. Device
enumeration varies by platform and there's a benefit to being able
to use something like EFI GPT's GUIDs to determine the correct
block device and partition to mount as the root.
This change adds that support to root= by adding support for
the following syntax:
root=PARTUUID=hex-uuid
Signed-off-by: Will Drewry <wad@chromium.org>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'block/genhd.c')
-rw-r--r-- | block/genhd.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/block/genhd.c b/block/genhd.c index c8da12055264..5c9c503de423 100644 --- a/block/genhd.c +++ b/block/genhd.c | |||
@@ -642,6 +642,7 @@ void __init printk_all_partitions(void) | |||
642 | struct hd_struct *part; | 642 | struct hd_struct *part; |
643 | char name_buf[BDEVNAME_SIZE]; | 643 | char name_buf[BDEVNAME_SIZE]; |
644 | char devt_buf[BDEVT_SIZE]; | 644 | char devt_buf[BDEVT_SIZE]; |
645 | u8 uuid[PARTITION_META_INFO_UUIDLTH * 2 + 1]; | ||
645 | 646 | ||
646 | /* | 647 | /* |
647 | * Don't show empty devices or things that have been | 648 | * Don't show empty devices or things that have been |
@@ -660,10 +661,14 @@ void __init printk_all_partitions(void) | |||
660 | while ((part = disk_part_iter_next(&piter))) { | 661 | while ((part = disk_part_iter_next(&piter))) { |
661 | bool is_part0 = part == &disk->part0; | 662 | bool is_part0 = part == &disk->part0; |
662 | 663 | ||
663 | printk("%s%s %10llu %s", is_part0 ? "" : " ", | 664 | uuid[0] = 0; |
665 | if (part->info) | ||
666 | part_unpack_uuid(part->info->uuid, uuid); | ||
667 | |||
668 | printk("%s%s %10llu %s %s", is_part0 ? "" : " ", | ||
664 | bdevt_str(part_devt(part), devt_buf), | 669 | bdevt_str(part_devt(part), devt_buf), |
665 | (unsigned long long)part->nr_sects >> 1, | 670 | (unsigned long long)part->nr_sects >> 1, |
666 | disk_name(disk, part->partno, name_buf)); | 671 | disk_name(disk, part->partno, name_buf), uuid); |
667 | if (is_part0) { | 672 | if (is_part0) { |
668 | if (disk->driverfs_dev != NULL && | 673 | if (disk->driverfs_dev != NULL && |
669 | disk->driverfs_dev->driver != NULL) | 674 | disk->driverfs_dev->driver != NULL) |