diff options
-rw-r--r-- | common/partitions/dos.c | 3 | ||||
-rw-r--r-- | common/partitions/efi.c | 2 | ||||
-rw-r--r-- | fs/devfs-core.c | 14 | ||||
-rw-r--r-- | include/driver.h | 1 |
4 files changed, 20 insertions, 0 deletions
diff --git a/common/partitions/dos.c b/common/partitions/dos.c index 597d7bf9bc..566c8dd949 100644 --- a/common/partitions/dos.c +++ b/common/partitions/dos.c @@ -182,6 +182,9 @@ static void dos_partition(void *buf, struct block_device *blk, struct disk_signature_priv *dsp; uint32_t signature = get_unaligned_le32(buf + 0x1b8); + if (signature) + sprintf(blk->cdev.uuid, "%08x", signature); + table = (struct partition_entry *)&buffer[446]; for (i = 0; i < 4; i++) { diff --git a/common/partitions/efi.c b/common/partitions/efi.c index 6d811bfb3b..0787b93f12 100644 --- a/common/partitions/efi.c +++ b/common/partitions/efi.c @@ -445,6 +445,8 @@ static void efi_partition(void *buf, struct block_device *blk, return; } + snprintf(blk->cdev.uuid, sizeof(blk->cdev.uuid), "%pUl", &gpt->disk_guid); + nb_part = le32_to_cpu(gpt->num_partition_entries); if (nb_part > MAX_PARTITION) { diff --git a/fs/devfs-core.c b/fs/devfs-core.c index 82e4811b38..2475ab959a 100644 --- a/fs/devfs-core.c +++ b/fs/devfs-core.c @@ -107,6 +107,20 @@ struct cdev *cdev_by_partuuid(const char *partuuid) return NULL; } +struct cdev *cdev_by_diskuuid(const char *diskuuid) +{ + struct cdev *cdev; + + if (!diskuuid) + return NULL; + + list_for_each_entry(cdev, &cdev_list, list) { + if (!cdev->master && !strcasecmp(cdev->uuid, diskuuid)) + return cdev; + } + return NULL; +} + /** * device_find_partition - find a partition belonging to a physical device * diff --git a/include/driver.h b/include/driver.h index 62a1782847..3ef8bfb8a3 100644 --- a/include/driver.h +++ b/include/driver.h @@ -488,6 +488,7 @@ struct cdev *lcdev_by_name(const char *filename); struct cdev *cdev_readlink(struct cdev *cdev); struct cdev *cdev_by_device_node(struct device_node *node); struct cdev *cdev_by_partuuid(const char *partuuid); +struct cdev *cdev_by_diskuuid(const char *partuuid); struct cdev *cdev_open(const char *name, unsigned long flags); struct cdev *cdev_create_loop(const char *path, ulong flags, loff_t offset); void cdev_remove_loop(struct cdev *cdev); |