Lines Matching defs:hc

94 		struct hash_cell *hc = container_of(n, struct hash_cell, name_node);
97 c = strcmp(hc->name, str);
99 dm_get(hc->md);
100 return hc;
113 struct hash_cell *hc = container_of(n, struct hash_cell, uuid_node);
116 c = strcmp(hc->uuid, str);
118 dm_get(hc->md);
119 return hc;
127 static void __unlink_name(struct hash_cell *hc)
129 if (hc->name_set) {
130 hc->name_set = false;
131 rb_erase(&hc->name_node, &name_rb_tree);
135 static void __unlink_uuid(struct hash_cell *hc)
137 if (hc->uuid_set) {
138 hc->uuid_set = false;
139 rb_erase(&hc->uuid_node, &uuid_rb_tree);
155 struct hash_cell *hc = container_of(*n, struct hash_cell, name_node);
158 c = strcmp(hc->name, new_hc->name);
161 n = c >= 0 ? &hc->name_node.rb_left : &hc->name_node.rb_right;
180 struct hash_cell *hc = container_of(*n, struct hash_cell, uuid_node);
183 c = strcmp(hc->uuid, new_hc->uuid);
186 n = c > 0 ? &hc->uuid_node.rb_left : &hc->uuid_node.rb_right;
196 struct hash_cell *hc;
202 hc = dm_get_mdptr(md);
203 if (!hc) {
208 return hc;
219 struct hash_cell *hc;
221 hc = kmalloc(sizeof(*hc), GFP_KERNEL);
222 if (!hc)
225 hc->name = kstrdup(name, GFP_KERNEL);
226 if (!hc->name) {
227 kfree(hc);
232 hc->uuid = NULL;
235 hc->uuid = kstrdup(uuid, GFP_KERNEL);
236 if (!hc->uuid) {
237 kfree(hc->name);
238 kfree(hc);
243 hc->name_set = hc->uuid_set = false;
244 hc->md = md;
245 hc->new_map = NULL;
246 return hc;
249 static void free_cell(struct hash_cell *hc)
251 if (hc) {
252 kfree(hc->name);
253 kfree(hc->uuid);
254 kfree(hc);
264 struct hash_cell *cell, *hc;
277 hc = __get_name_cell(name);
278 if (hc) {
279 dm_put(hc->md);
286 hc = __get_uuid_cell(uuid);
287 if (hc) {
289 dm_put(hc->md);
308 static struct dm_table *__hash_remove(struct hash_cell *hc)
316 __unlink_name(hc);
317 __unlink_uuid(hc);
319 dm_set_mdptr(hc->md, NULL);
322 table = dm_get_live_table(hc->md, &srcu_idx);
325 dm_put_live_table(hc->md, srcu_idx);
328 if (hc->new_map)
329 table = hc->new_map;
330 dm_put(hc->md);
331 free_cell(hc);
340 struct hash_cell *hc;
350 hc = container_of(n, struct hash_cell, name_node);
351 md = hc->md;
361 t = __hash_remove(hc);
394 static void __set_cell_uuid(struct hash_cell *hc, char *new_uuid)
397 hc->uuid = new_uuid;
400 __link_uuid(hc);
407 static char *__change_cell_name(struct hash_cell *hc, char *new_name)
414 __unlink_name(hc);
415 old_name = hc->name;
418 hc->name = new_name;
421 __link_name(hc);
430 struct hash_cell *hc;
449 hc = __get_uuid_cell(new);
451 hc = __get_name_cell(new);
453 if (hc) {
457 dm_put(hc->md);
466 hc = __get_name_cell(param->name);
467 if (!hc) {
478 if (change_uuid && hc->uuid) {
481 param->name, new, hc->uuid);
482 dm_put(hc->md);
489 __set_cell_uuid(hc, new_data);
491 old_name = __change_cell_name(hc, new_data);
496 table = dm_get_live_table(hc->md, &srcu_idx);
499 dm_put_live_table(hc->md, srcu_idx);
501 if (!dm_kobject_uevent(hc->md, KOBJ_CHANGE, param->event_nr, false))
504 md = hc->md;
567 static bool filter_device(struct hash_cell *hc, const char *pfx_name, const char *pfx_uuid)
572 val = hc->name;
580 val = hc->uuid ? hc->uuid : "";
594 struct hash_cell *hc;
607 hc = container_of(n, struct hash_cell, name_node);
608 if (!filter_device(hc, param->name, param->uuid))
610 needed += align_val(offsetof(struct dm_name_list, name) + strlen(hc->name) + 1);
612 if (param->flags & DM_UUID_FLAG && hc->uuid)
613 needed += align_val(strlen(hc->uuid) + 1);
634 hc = container_of(n, struct hash_cell, name_node);
635 if (!filter_device(hc, param->name, param->uuid))
640 disk = dm_disk(hc->md);
643 strcpy(nl->name, hc->name);
646 event_nr = align_ptr(nl->name + strlen(hc->name) + 1);
647 event_nr[0] = dm_get_event_nr(hc->md);
651 if (hc->uuid) {
653 strcpy(uuid_ptr, hc->uuid);
654 uuid_ptr = align_ptr(uuid_ptr + strlen(hc->uuid) + 1);
791 struct hash_cell *hc;
798 hc = dm_get_mdptr(md);
799 if (!hc) {
804 table = hc->new_map;
916 struct hash_cell *hc = NULL;
925 hc = __get_uuid_cell(param->uuid);
926 if (!hc)
935 hc = __get_name_cell(param->name);
936 if (!hc)
939 hc = __get_dev_cell(param->dev);
940 if (!hc)
949 strscpy(param->name, hc->name, sizeof(param->name));
950 if (hc->uuid)
951 strscpy(param->uuid, hc->uuid, sizeof(param->uuid));
955 if (hc->new_map)
960 return hc;
965 struct hash_cell *hc;
969 hc = __find_device_hash_cell(param);
970 if (hc)
971 md = hc->md;
979 struct hash_cell *hc;
985 hc = __find_device_hash_cell(param);
987 if (!hc) {
993 md = hc->md;
1005 DMDEBUG_LIMIT("unable to remove open device %s", hc->name);
1011 t = __hash_remove(hc);
1153 struct hash_cell *hc;
1160 hc = __find_device_hash_cell(param);
1161 if (!hc) {
1167 md = hc->md;
1169 new_map = hc->new_map;
1170 hc->new_map = NULL;
1188 hc = dm_get_mdptr(md);
1189 if (hc && !hc->new_map) {
1190 hc->new_map = new_map;
1517 struct hash_cell *hc;
1566 hc = dm_get_mdptr(md);
1567 if (!hc) {
1574 if (hc->new_map)
1575 old_map = hc->new_map;
1576 hc->new_map = t;
1603 struct hash_cell *hc;
1610 hc = __find_device_hash_cell(param);
1611 if (!hc) {
1617 if (hc->new_map) {
1618 old_map = hc->new_map;
1619 hc->new_map = NULL;
1623 md = hc->md;
2226 struct hash_cell *hc;
2232 hc = dm_get_mdptr(md);
2233 if (!hc) {
2239 strcpy(name, hc->name);
2241 strcpy(uuid, hc->uuid ? : "");