diff options
Diffstat (limited to 'init/do_mounts.c')
-rw-r--r-- | init/do_mounts.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/init/do_mounts.c b/init/do_mounts.c index f8a66424360d..b28ec5819325 100644 --- a/init/do_mounts.c +++ b/init/do_mounts.c | |||
@@ -69,23 +69,28 @@ __setup("ro", readonly); | |||
69 | __setup("rw", readwrite); | 69 | __setup("rw", readwrite); |
70 | 70 | ||
71 | #ifdef CONFIG_BLOCK | 71 | #ifdef CONFIG_BLOCK |
72 | struct uuidcmp { | ||
73 | const char *uuid; | ||
74 | int len; | ||
75 | }; | ||
76 | |||
72 | /** | 77 | /** |
73 | * match_dev_by_uuid - callback for finding a partition using its uuid | 78 | * match_dev_by_uuid - callback for finding a partition using its uuid |
74 | * @dev: device passed in by the caller | 79 | * @dev: device passed in by the caller |
75 | * @data: opaque pointer to a 36 byte char array with a UUID | 80 | * @data: opaque pointer to the desired struct uuidcmp to match |
76 | * | 81 | * |
77 | * Returns 1 if the device matches, and 0 otherwise. | 82 | * Returns 1 if the device matches, and 0 otherwise. |
78 | */ | 83 | */ |
79 | static int match_dev_by_uuid(struct device *dev, void *data) | 84 | static int match_dev_by_uuid(struct device *dev, void *data) |
80 | { | 85 | { |
81 | u8 *uuid = data; | 86 | struct uuidcmp *cmp = data; |
82 | struct hd_struct *part = dev_to_part(dev); | 87 | struct hd_struct *part = dev_to_part(dev); |
83 | 88 | ||
84 | if (!part->info) | 89 | if (!part->info) |
85 | goto no_match; | 90 | goto no_match; |
86 | 91 | ||
87 | if (memcmp(uuid, part->info->uuid, sizeof(part->info->uuid))) | 92 | if (strncasecmp(cmp->uuid, part->info->uuid, cmp->len)) |
88 | goto no_match; | 93 | goto no_match; |
89 | 94 | ||
90 | return 1; | 95 | return 1; |
91 | no_match: | 96 | no_match: |
@@ -95,7 +100,7 @@ no_match: | |||
95 | 100 | ||
96 | /** | 101 | /** |
97 | * devt_from_partuuid - looks up the dev_t of a partition by its UUID | 102 | * devt_from_partuuid - looks up the dev_t of a partition by its UUID |
98 | * @uuid: min 36 byte char array containing a hex ascii UUID | 103 | * @uuid: char array containing ascii UUID |
99 | * | 104 | * |
100 | * The function will return the first partition which contains a matching | 105 | * The function will return the first partition which contains a matching |
101 | * UUID value in its partition_meta_info struct. This does not search | 106 | * UUID value in its partition_meta_info struct. This does not search |
@@ -106,11 +111,11 @@ no_match: | |||
106 | * | 111 | * |
107 | * Returns the matching dev_t on success or 0 on failure. | 112 | * Returns the matching dev_t on success or 0 on failure. |
108 | */ | 113 | */ |
109 | static dev_t devt_from_partuuid(char *uuid_str) | 114 | static dev_t devt_from_partuuid(const char *uuid_str) |
110 | { | 115 | { |
111 | dev_t res = 0; | 116 | dev_t res = 0; |
117 | struct uuidcmp cmp; | ||
112 | struct device *dev = NULL; | 118 | struct device *dev = NULL; |
113 | u8 uuid[16]; | ||
114 | struct gendisk *disk; | 119 | struct gendisk *disk; |
115 | struct hd_struct *part; | 120 | struct hd_struct *part; |
116 | int offset = 0; | 121 | int offset = 0; |
@@ -118,6 +123,9 @@ static dev_t devt_from_partuuid(char *uuid_str) | |||
118 | if (strlen(uuid_str) < 36) | 123 | if (strlen(uuid_str) < 36) |
119 | goto done; | 124 | goto done; |
120 | 125 | ||
126 | cmp.uuid = uuid_str; | ||
127 | cmp.len = 36; | ||
128 | |||
121 | /* Check for optional partition number offset attributes. */ | 129 | /* Check for optional partition number offset attributes. */ |
122 | if (uuid_str[36]) { | 130 | if (uuid_str[36]) { |
123 | char c = 0; | 131 | char c = 0; |
@@ -134,10 +142,8 @@ static dev_t devt_from_partuuid(char *uuid_str) | |||
134 | } | 142 | } |
135 | } | 143 | } |
136 | 144 | ||
137 | /* Pack the requested UUID in the expected format. */ | 145 | dev = class_find_device(&block_class, NULL, &cmp, |
138 | part_pack_uuid(uuid_str, uuid); | 146 | &match_dev_by_uuid); |
139 | |||
140 | dev = class_find_device(&block_class, NULL, uuid, &match_dev_by_uuid); | ||
141 | if (!dev) | 147 | if (!dev) |
142 | goto done; | 148 | goto done; |
143 | 149 | ||