summaryrefslogtreecommitdiff
path: root/block
diff options
context:
space:
mode:
authorWill Drewry <wad@chromium.org>2010-08-31 15:47:07 -0500
committerJens Axboe <jaxboe@fusionio.com>2010-09-15 16:14:03 +0200
commitb5af921ec02333e943efb59aca4f56b78fc0e100 (patch)
treefcf966ccbee9c5f8b8f652100f033bc781b91b91 /block
parenteec7ecfede74bb996060efefd5c157acd5794e8a (diff)
downloadkernel-common-b5af921ec02333e943efb59aca4f56b78fc0e100.tar.gz
kernel-common-b5af921ec02333e943efb59aca4f56b78fc0e100.tar.bz2
kernel-common-b5af921ec02333e943efb59aca4f56b78fc0e100.zip
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')
-rw-r--r--block/genhd.c9
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)
struct hd_struct *part;
char name_buf[BDEVNAME_SIZE];
char devt_buf[BDEVT_SIZE];
+ u8 uuid[PARTITION_META_INFO_UUIDLTH * 2 + 1];
/*
* Don't show empty devices or things that have been
@@ -660,10 +661,14 @@ void __init printk_all_partitions(void)
while ((part = disk_part_iter_next(&piter))) {
bool is_part0 = part == &disk->part0;
- printk("%s%s %10llu %s", is_part0 ? "" : " ",
+ uuid[0] = 0;
+ if (part->info)
+ part_unpack_uuid(part->info->uuid, uuid);
+
+ printk("%s%s %10llu %s %s", is_part0 ? "" : " ",
bdevt_str(part_devt(part), devt_buf),
(unsigned long long)part->nr_sects >> 1,
- disk_name(disk, part->partno, name_buf));
+ disk_name(disk, part->partno, name_buf), uuid);
if (is_part0) {
if (disk->driverfs_dev != NULL &&
disk->driverfs_dev->driver != NULL)