Lines Matching refs:dmt
235 void dm_task_destroy(struct dm_task *dmt)
239 for (t = dmt->head; t; t = n) {
246 if (dmt->dev_name)
247 dm_free(dmt->dev_name);
249 if (dmt->newname)
250 dm_free(dmt->newname);
252 if (dmt->message)
253 dm_free(dmt->message);
255 if (dmt->dmi.v4)
256 dm_free(dmt->dmi.v4);
258 if (dmt->uuid)
259 dm_free(dmt->uuid);
261 dm_free(dmt);
266 int dm_task_get_driver_version(struct dm_task *dmt, char *version, size_t size)
270 if (!dmt->dmi.v4) {
275 v = dmt->dmi.v4->version;
327 /* Get next target(table description) from list pointed by dmt->head. */
328 void *dm_get_next_target(struct dm_task *dmt, void *next,
335 t = dmt->head;
349 static int _unmarshal_status(struct dm_task *dmt, struct dm_ioctl *dmi)
358 if (!dm_task_add_target(dmt, spec->sector_start,
474 int dm_task_get_info(struct dm_task *dmt, struct dm_info *info)
476 if (!dmt->dmi.v4)
481 info->exists = dmt->dmi.v4->flags & DM_EXISTS_FLAG ? 1 : 0;
485 info->suspended = dmt->dmi.v4->flags & DM_SUSPEND_FLAG ? 1 : 0;
486 info->read_only = dmt->dmi.v4->flags & DM_READONLY_FLAG ? 1 : 0;
487 info->live_table = dmt->dmi.v4->flags & DM_ACTIVE_PRESENT_FLAG ? 1 : 0;
488 info->inactive_table = dmt->dmi.v4->flags & DM_INACTIVE_PRESENT_FLAG ?
490 info->target_count = dmt->dmi.v4->target_count;
491 info->open_count = dmt->dmi.v4->open_count;
492 info->event_nr = dmt->dmi.v4->event_nr;
495 info->minor = MINOR(dmt->dmi.v4->dev);
501 uint32_t dm_task_get_read_ahead(const struct dm_task *dmt, uint32_t *read_ahead)
507 const char *dm_task_get_name(const struct dm_task *dmt)
510 return (dmt->dmi.v4->name);
513 const char *dm_task_get_uuid(const struct dm_task *dmt)
516 return (dmt->dmi.v4->uuid);
519 struct dm_deps *dm_task_get_deps(struct dm_task *dmt)
521 return (struct dm_deps *) (((void *) dmt->dmi.v4) +
522 dmt->dmi.v4->data_start);
525 struct dm_names *dm_task_get_names(struct dm_task *dmt)
527 return (struct dm_names *) (((void *) dmt->dmi.v4) +
528 dmt->dmi.v4->data_start);
531 struct dm_versions *dm_task_get_versions(struct dm_task *dmt)
533 return (struct dm_versions *) (((void *) dmt->dmi.v4) +
534 dmt->dmi.v4->data_start);
537 int dm_task_set_ro(struct dm_task *dmt)
539 dmt->read_only = 1;
544 int dm_task_set_read_ahead(struct dm_task *dmt, uint32_t read_ahead,
550 int dm_task_suppress_identical_reload(struct dm_task *dmt)
552 dmt->suppress_identical_reload = 1;
556 int dm_task_set_newname(struct dm_task *dmt, const char *newname)
558 if (!(dmt->newname = dm_strdup(newname))) {
566 int dm_task_set_message(struct dm_task *dmt, const char *message)
568 if (!(dmt->message = dm_strdup(message))) {
576 int dm_task_set_sector(struct dm_task *dmt, uint64_t sector)
578 dmt->sector = sector;
584 int dm_task_set_geometry(struct dm_task *dmt, const char *cylinders,
590 int dm_task_no_flush(struct dm_task *dmt)
592 dmt->no_flush = 1;
597 int dm_task_no_open_count(struct dm_task *dmt)
599 dmt->no_open_count = 1;
604 int dm_task_skip_lockfs(struct dm_task *dmt)
606 dmt->skip_lockfs = 1;
611 int dm_task_query_inactive_table(struct dm_task *dmt)
613 dmt->query_inactive_table = 1;
618 int dm_task_set_event_nr(struct dm_task *dmt, uint32_t event_nr)
620 dmt->event_nr = event_nr;
661 static int _flatten(struct dm_task *dmt, libdm_task_t task)
678 for (t = dmt->head; t; t = t->next) {
694 if (count && (dmt->sector || dmt->message)) {
699 if (count && dmt->newname) {
704 if (count && dmt->geometry) {
709 if (dmt->newname && (dmt->sector || dmt->message)) {
714 if (dmt->newname && dmt->geometry) {
719 if (dmt->geometry && (dmt->sector || dmt->message)) {
724 if (dmt->sector && !dmt->message) {
729 if (dmt->newname)
730 len += strlen(dmt->newname) + 1;
732 if (dmt->message)
733 len += sizeof(struct dm_target_msg) + strlen(dmt->message) + 1;
735 if (dmt->geometry)
736 len += strlen(dmt->geometry) + 1;
743 if (dmt->major != major && dmt->major != -1)
746 if (dmt->minor >= 0) {
748 libdm_task_set_minor(dmt->minor, task);
752 if (dmt->dev_name)
753 libdm_task_set_name(dmt->dev_name, task);
755 if (dmt->uuid)
756 libdm_task_set_uuid(dmt->uuid, task);
758 if (dmt->type == DM_DEVICE_SUSPEND)
760 if (dmt->no_flush)
762 if (dmt->read_only)
764 if (dmt->skip_lockfs)
767 if (dmt
776 // prop_dictionary_set_uint32(dm_dict, DM_IOCTL_EVENT, dmt->event_nr);
778 if (dmt->newname)
779 libdm_dev_set_newname(dmt->newname, cmd);
788 static int _process_mapper_dir(struct dm_task *dmt)
806 dm_task_set_name(dmt, dirent->d_name);
807 dm_task_run(dmt);
817 static int _process_all_v4(struct dm_task *dmt)
842 if (!dm_task_set_name(dmt, names->name)) {
846 if (!dm_task_run(dmt))
856 static int _mknodes_v4(struct dm_task *dmt)
858 (void) _process_mapper_dir(dmt);
860 return _process_all_v4(dmt);
864 static int _create_and_load_v4(struct dm_task *dmt)
878 if (dmt->dev_name && !dm_task_set_name(task, dmt->dev_name)) {
883 if (dmt->uuid && !dm_task_set_uuid(task, dmt->uuid)) {
888 task->major = dmt->major;
889 task->minor = dmt->minor;
890 task->uid = dmt->uid;
891 task->gid = dmt->gid;
892 task->mode = dmt->mode;
906 if (dmt->dev_name && !dm_task_set_name(task, dmt->dev_name)) {
911 task->read_only = dmt->read_only;
912 task->head = dmt->head;
913 task->tail = dmt->tail;
924 dmt->type = DM_DEVICE_RESUME;
925 dm_free(dmt->uuid);
926 dmt->uuid = NULL;
928 r = dm_task_run(dmt);
934 dmt->type = DM_DEVICE_REMOVE;
935 dm_free(dmt->uuid);
936 dmt->uuid = NULL;
938 if (!dm_task_run(dmt))
944 uint64_t dm_task_get_existing_table_size(struct dm_task *dmt)
946 return dmt->existing_table_size;
949 static int _reload_with_suppression_v4(struct dm_task *dmt)
962 if (dmt->dev_name && !dm_task_set_name(task, dmt->dev_name)) {
967 if (dmt->uuid && !dm_task_set_uuid(task, dmt->uuid)) {
972 task->major = dmt->major;
973 task->minor = dmt->minor;
986 dmt->existing_table_size = t2 ? t2->start + t2->length : 0;
988 if ((task->dmi.v4->flags & DM_READONLY_FLAG) ? 1 : 0 != dmt->read_only)
991 t1 = dmt->head;
1007 dmt->dmi.v4 = task->dmi.v4;
1017 dmt->suppress_identical_reload = 0;
1018 r = dm_task_run(dmt);
1030 static struct dm_ioctl *_do_dm_ioctl(struct dm_task *dmt, unsigned command)
1035 task = libdm_task_create(_cmd_data_v4[dmt->type].name);
1038 if (_flatten(dmt, task) < 0)
1041 if (dmt->type == DM_DEVICE_TABLE)
1046 log_very_verbose("Ioctl type %s --- flags %d",_cmd_data_v4[dmt->type].name, libdm_task_get_flags(task));
1050 ((dmt->type == DM_DEVICE_INFO) ||
1051 (dmt->type == DM_DEVICE_MKNODES) ||
1052 (dmt->type == DM_DEVICE_STATUS))) {
1060 dmi = nbsd_dm_dict_to_dmi(task, _cmd_data_v4[dmt->type].cmd);
1069 _cmd_data_v4[dmt->type].name, errno);
1076 dmi = nbsd_dm_dict_to_dmi(task, _cmd_data_v4[dmt->type].cmd);
1092 int dm_task_run(struct dm_task *dmt)
1097 if ((unsigned) dmt->type >=
1100 dmt->type);
1104 command = _cmd_data_v4[dmt->type].cmd;
1107 if (dmt->type == DM_DEVICE_CREATE && dmt->head)
1108 return _create_and_load_v4(dmt);
1110 if (dmt->type == DM_DEVICE_MKNODES && !dmt->dev_name &&
1111 !dmt->uuid && dmt->major <= 0)
1112 return _mknodes_v4(dmt);
1114 if ((dmt->type == DM_DEVICE_RELOAD) && dmt->suppress_identical_reload)
1115 return _reload_with_suppression_v4(dmt);
1120 if (!(dmi = _do_dm_ioctl(dmt, command)))
1123 switch (dmt->type) {
1125 add_dev_node(dmt->dev_name, MAJOR(dmi->dev), MINOR(dmi->dev),
1126 dmt->uid, dmt->gid, dmt->mode, 0);
1131 if (dmt->dev_name)
1132 rm_dev_node(dmt->dev_name, 0);
1137 if (dmt->dev_name)
1138 rename_dev_node(dmt->dev_name, dmt->newname, 0);
1143 set_dev_node_read_ahead(dmt->dev_name, dmt->read_ahead,
1144 dmt->read_ahead_flags);
1151 dmt->uid, dmt->gid, dmt->mode, 0);
1152 else if (dmt->dev_name)
1153 rm_dev_node(dmt->dev_name, 0);
1159 if (!_unmarshal_status(dmt, dmi))
1165 if (dmt->dmi.v4)
1166 dm_free(dmt->dmi.v4);
1168 dmt->dmi.v4 = dmi;