Lines Matching refs:dm
85 char *build_dlid(struct dev_manager *dm, const char *lvid, const char *layer)
87 return _build_dlid(dm->mem, lvid, layer);
347 static int _percent_run(struct dev_manager *dm, const char *name,
403 if (!(segtype = get_segtype_from_string(dm->cmd, type)))
407 !segtype->ops->target_percent(&dm->target_state,
408 &percent_range, dm->mem,
409 dm->cmd, seg, params,
448 static int _percent(struct dev_manager *dm, const char *name, const char *dlid,
454 if (_percent_run(dm, NULL, dlid, target_type, wait, lv, percent,
457 else if (_percent_run(dm, NULL, dlid + sizeof(UUID_PREFIX) - 1,
463 if (name && _percent_run(dm, name, NULL, target_type, wait, lv, percent,
477 struct dev_manager *dm;
482 if (!(dm = dm_pool_zalloc(mem, sizeof(*dm))))
485 dm->cmd = cmd;
486 dm->mem = mem;
488 if (!(dm->vg_name = dm_pool_strdup(dm->mem, vg_name)))
491 dm->target_state = NULL;
495 return dm;
502 void dev_manager_destroy(struct dev_manager *dm)
504 dm_pool_destroy(dm->mem);
517 int dev_manager_snapshot_percent(struct dev_manager *dm,
527 if (!(name = build_dm_name(dm->mem, lv->vg->name, lv->name, NULL)))
530 if (!(dlid = build_dlid(dm, lv->lvid.s, NULL)))
537 if (!(_percent(dm, name, dlid, "snapshot", 0, NULL, percent,
549 int dev_manager_mirror_percent(struct dev_manager *dm,
561 if (!(name = build_dm_name(dm->mem, lv->vg->name, lv->name, suffix)))
566 if (!(dlid = build_dlid(dm, lv->lvid.s, suffix))) {
572 if (!(_percent(dm, name, dlid, "mirror", wait, lv, percent,
603 new_name = build_dm_name(dm->mem, dm->vg_name, dl->lv->name,
658 static int _add_dev_to_dtree(struct dev_manager *dm, struct dm_tree *dtree,
664 if (!(name = build_dm_name(dm->mem, lv->vg->name, lv->name, layer)))
667 if (!(dlid = build_dlid(dm, lv->lvid.s, layer)))
712 static int _add_lv_to_dtree(struct dev_manager *dm, struct dm_tree *dtree, struct logical_volume *lv)
714 if (!_add_dev_to_dtree(dm, dtree, lv, NULL))
718 if (!_add_dev_to_dtree(dm, dtree, lv, "real"))
721 if (!_add_dev_to_dtree(dm, dtree, lv, "cow"))
724 if (!_add_dev_to_dtree(dm, dtree, lv, "_mlog"))
730 static struct dm_tree *_create_partial_dtree(struct dev_manager *dm, struct logical_volume *lv)
742 if (!_add_lv_to_dtree(dm, dtree, lv))
747 if (!_add_lv_to_dtree(dm, dtree, dm_list_struct_base(snh, struct lv_segment, origin_list)->cow))
754 if (!_add_lv_to_dtree(dm, dtree, seg_lv(seg, s)))
765 static char *_add_error_device(struct dev_manager *dm, struct dm_tree *dtree,
788 if (!(id = build_dlid(dm, seg->lv->lvid.s, errid)))
791 if (!(name = build_dm_name(dm->mem, seg->lv->vg->name,
802 static int _add_error_area(struct dev_manager *dm, struct dm_tree_node *node,
808 if (!strcmp(dm->cmd->stripe_filler, "error")) {
814 dlid = _add_error_device(dm, *tree, seg, s);
821 dm->cmd->stripe_filler,
827 int add_areas_line(struct dev_manager *dm, struct lv_segment *seg,
841 if (!_add_error_area(dm, node, seg, s))
850 if (!(dlid = build_dlid(dm,
866 static int _add_origin_target_to_dtree(struct dev_manager *dm,
872 if (!(real_dlid = build_dlid(dm, lv->lvid.s, "real")))
881 static int _add_snapshot_target_to_dtree(struct dev_manager *dm,
895 if (!(origin_dlid = build_dlid(dm, snap_seg->origin->lvid.s, "real")))
898 if (!(cow_dlid = build_dlid(dm, snap_seg->cow->lvid.s, "cow")))
909 static int _add_target_to_dtree(struct dev_manager *dm,
921 return seg->segtype->ops->add_target_line(dm, dm->mem, dm->cmd,
922 &dm->target_state, seg,
925 &dm-> pvmove_mirror_count);
928 static int _add_new_lv_to_dtree(struct dev_manager *dm, struct dm_tree *dtree,
931 static int _add_segment_to_dtree(struct dev_manager *dm,
958 !_add_new_lv_to_dtree(dm, dtree, seg->log_lv, NULL))
967 if (!_add_new_lv_to_dtree(dm, dtree, seg->lv, "real"))
970 if (!_add_new_lv_to_dtree(dm, dtree, seg->lv, "cow"))
976 (!_add_new_lv_to_dtree(dm, dtree, seg_lv(seg, s), NULL)))
982 if (!_add_origin_target_to_dtree(dm, dnode, seg->lv))
985 if (!_add_snapshot_target_to_dtree(dm, dnode, seg->lv))
987 } else if (!_add_target_to_dtree(dm, dnode, seg))
993 if (!_add_new_lv_to_dtree(dm, dtree, dm_list_struct_base(snh, struct lv_segment, origin_list)->cow, NULL))
999 static int _add_new_lv_to_dtree(struct dev_manager *dm, struct dm_tree *dtree,
1011 if (!(name = build_dm_name(dm->mem, lv->vg->name, lv->name, layer)))
1014 if (!(dlid = build_dlid(dm, lv->lvid.s, layer)))
1022 if (!(lvlayer = dm_pool_alloc(dm->mem, sizeof(*lvlayer)))) {
1056 dm->pvmove_mirror_count = 0u;
1058 if (!_add_segment_to_dtree(dm, dtree, dnode, seg, layer))
1089 static int _create_lv_symlinks(struct dev_manager *dm, struct dm_tree_node *root)
1107 if (!dm_split_lvm_name(dm->mem, lvlayer->old_name, &old_vgname, &old_lvname, &old_layer)) {
1111 if (!dm_split_lvm_name(dm->mem, name, &new_vgname, &new_lvname, &new_layer)) {
1134 static int _remove_lv_symlinks(struct dev_manager *dm, struct dm_tree_node *root)
1142 if (!dm_split_lvm_name(dm->mem, dm_tree_node_get_name(child), &vgname, &lvname, &layer)) {
1154 fs_del_lv_byname(dm->cmd->dev_dir, vgname, lvname);
1160 static int _clean_tree(struct dev_manager *dm, struct dm_tree_node *root)
1175 if (!dm_split_lvm_name(dm->mem, name, &vgname, &lvname, &layer)) {
1196 static int _tree_action(struct dev_manager *dm, struct logical_volume *lv, action_t action)
1203 if (!(dtree = _create_partial_dtree(dm, lv)))
1211 if (!(dlid = build_dlid(dm, lv->lvid.s, NULL)))
1218 if (!_clean_tree(dm, root))
1229 if (!_remove_lv_symlinks(dm, root))
1234 if (!dm->flush_required && (lv->status & MIRRORED) && !(lv->status & PVMOVE))
1243 if (!_add_new_lv_to_dtree(dm, dtree, lv, NULL))
1255 dm->flush_required = 1;
1264 if (!_create_lv_symlinks(dm, root)) {
1284 int dev_manager_activate(struct dev_manager *dm, struct logical_volume *lv)
1286 if (!_tree_action(dm, lv, ACTIVATE))
1289 return _tree_action(dm, lv, CLEAN);
1292 int dev_manager_preload(struct dev_manager *dm, struct logical_volume *lv,
1299 if (!_tree_action(dm, lv, PRELOAD))
1302 *flush_required = dm->flush_required;
1307 int dev_manager_deactivate(struct dev_manager *dm
1311 r = _tree_action(dm, lv, DEACTIVATE);
1318 int dev_manager_suspend(struct dev_manager *dm, struct logical_volume *lv,
1321 dm->flush_required = flush_required;
1323 return _tree_action(dm, lv, lockfs ? SUSPEND_WITH_LOCKFS : SUSPEND);