Lines Matching refs:cmd

63 static int _get_env_vars(struct cmd_context *cmd)
69 if (dm_snprintf(cmd->system_dir, sizeof(cmd->system_dir),
80 static void _get_sysfs_dir(struct cmd_context *cmd)
87 cmd->sysfs_dir[0] = '\0';
88 if (!*cmd->proc_dir) {
94 "%s/mounts", cmd->proc_dir) < 0) {
120 strncpy(cmd->sysfs_dir, sys_mnt, sizeof(cmd->sysfs_dir));
123 static void _init_logging(struct cmd_context *cmd)
132 cmd->default_settings.syslog =
133 find_config_tree_int(cmd, "log/syslog", DEFAULT_SYSLOG);
134 if (cmd->default_settings.syslog != 1)
137 if (cmd->default_settings.syslog > 1)
138 init_syslog(cmd->default_settings.syslog);
141 cmd->default_settings.debug =
142 find_config_tree_int(cmd, "log/level", DEFAULT_LOGLEVEL);
143 init_debug(cmd->default_settings.debug);
146 cmd->default_settings.verbose =
147 find_config_tree_int(cmd, "log/verbose", DEFAULT_VERBOSE);
148 init_verbose(cmd->default_settings.verbose + VERBOSE_BASE_LEVEL);
151 init_indent(find_config_tree_int(cmd, "log/indent",
154 cmd->default_settings.msg_prefix = find_config_tree_str(cmd,
157 init_msg_prefix(cmd->default_settings.msg_prefix);
159 cmd->default_settings.cmd_name = find_config_tree_int(cmd,
162 init_cmd_name(cmd->default_settings.cmd_name);
165 cmd->default_settings.test =
166 find_config_tree_int(cmd, "global/test", 0);
167 init_test(cmd->default_settings.test);
170 if (find_config_tree_int(cmd, "log/overwrite", DEFAULT_OVERWRITE))
173 log_file = find_config_tree_str(cmd, "log/file", 0);
181 log_file = find_config_tree_str(cmd, "log/activate_file", 0);
185 init_log_while_suspended(find_config_tree_int(cmd,
199 static int _process_config(struct cmd_context *cmd)
206 cmd->default_settings.umask = find_config_tree_int(cmd,
210 if ((old_umask = umask((mode_t) cmd->default_settings.umask)) !=
211 (mode_t) cmd->default_settings.umask)
212 log_verbose("Set umask to %04o", cmd->default_settings.umask);
215 if (dm_snprintf(cmd->dev_dir, sizeof(cmd->dev_dir), "%s/",
216 find_config_tree_str(cmd, "devices/dir",
222 dm_set_dev_dir(cmd->dev_dir);
226 if (dm_snprintf(cmd->proc_dir, sizeof(cmd->proc_dir), "%s",
227 find_config_tree_str(cmd, "global/proc",
233 if (*cmd->proc_dir && !dir_exists(cmd->proc_dir)) {
235 cmd->proc_dir);
236 *cmd->proc_dir = '\0';
239 _get_sysfs_dir(cmd);
242 cmd->default_settings.activation = find_config_tree_int(cmd,
245 set_activation(cmd->default_settings.activation);
247 cmd->default_settings.suffix = find_config_tree_int(cmd,
251 if (!(cmd->default_settings.unit_factor =
252 units_to_bytes(find_config_tree_str(cmd,
255 &cmd->default_settings.unit_type))) {
260 read_ahead = find_config_tree_str(cmd, "activation/readahead", DEFAULT_READ_AHEAD);
262 cmd->default_settings.read_ahead = DM_READ_AHEAD_AUTO;
264 cmd->default_settings.read_ahead = DM_READ_AHEAD_NONE;
270 cmd->default_settings.udev_sync = find_config_tree_int(cmd,
274 cmd->stripe_filler = find_config_tree_str(cmd,
279 if (!strcmp(cmd->stripe_filler, "/dev/ioerror") &&
280 stat(cmd->stripe_filler, &st))
281 cmd->stripe_filler = "error";
283 if (strcmp(cmd->stripe_filler, "error")) {
284 if (stat(cmd->stripe_filler, &st)) {
286 "is invalid,", cmd->stripe_filler);
289 cmd->stripe_filler = "error";
292 "is not a block device.", cmd->stripe_filler);
294 cmd->stripe_filler = "error";
298 cmd->si_unit_consistency = find_config_tree_int(cmd,
305 static int _set_tag(struct cmd_context *cmd, const char *tag)
307 log_very_verbose("Setting host tag: %s", dm_pool_strdup(cmd->libmem, tag));
309 if (!str_list_add(cmd->libmem, &cmd->tags, tag)) {
317 static int _check_host_filters(struct cmd_context *cmd, struct config_node *hn,
338 if (!strcmp(cv->v.str, cmd->hostname)) {
353 static int _init_tags(struct cmd_context *cmd, struct config_tree *cft)
363 if (!cmd->hosttags && find_config_int(cft->root, "tags/hosttags",
366 if (!_set_tag(cmd, cmd->hostname))
368 cmd->hosttags = 1;
383 if (!_check_host_filters(cmd, cn->child, &passes))
388 if (!_set_tag(cmd, tag))
395 static int _load_config_file(struct cmd_context *cmd, const char *tag)
406 cmd->system_dir, filler, tag) < 0) {
411 if (!(cfl = dm_pool_alloc(cmd->libmem, sizeof(*cfl)))) {
424 dm_list_add(&cmd->config_files, &cfl->list);
439 dm_list_add(&cmd->config_files, &cfl->list);
443 _init_tags(cmd, cfl->cft);
446 cmd->cft = cfl->cft;
452 static int _init_lvm_conf(struct cmd_context *cmd)
455 if (!*cmd->system_dir) {
456 if (!(cmd->cft = create_config_tree(NULL, 0))) {
463 if (!_load_config_file(cmd, ""))
470 static int _init_tag_configs(struct cmd_context *cmd)
475 dm_list_iterate_items(sl, &cmd->tags) {
476 if (!_load_config_file(cmd, sl->str))
483 static int _merge_config_files(struct cmd_context *cmd)
488 if (cmd->cft->root) {
489 if (!(cmd->cft = create_config_tree(NULL, 0))) {
495 dm_list_iterate_items(cfl, &cmd->config_files) {
496 /* Merge all config trees into cmd->cft using merge/tag rules */
497 if (!merge_config_tree(cmd, cmd->cft, cfl->cft))
504 static void _destroy_tags(struct cmd_context *cmd)
508 dm_list_iterate_safe(slh, slht, &cmd->tags) {
513 int config_files_changed(struct cmd_context *cmd)
517 dm_list_iterate_items(cfl, &cmd->config_files) {
525 static void _destroy_tag_configs(struct cmd_context *cmd)
529 dm_list_iterate_items(cfl, &cmd->config_files) {
530 if (cfl->cft == cmd->cft)
531 cmd->cft = NULL;
535 if (cmd->cft) {
536 destroy_config_tree(cmd->cft);
537 cmd->cft = NULL;
540 dm_list_init(&cmd->config_files);
543 static int _init_dev_cache(struct cmd_context *cmd)
548 if (!dev_cache_init(cmd))
551 if (!(cn = find_config_tree_node(cmd, "devices/scan"))) {
576 if (!(cn = find_config_tree_node(cmd, "devices/loopfiles")))
599 static struct dev_filter *_init_filter_components(struct cmd_context *cmd)
618 if (find_config_tree_bool(cmd, "devices/sysfs_scan",
620 if ((filters[nr_filt] = sysfs_filter_create(cmd->sysfs_dir)))
625 if (!(cn = find_config_tree_node(cmd, "devices/filter")))
635 cn = find_config_tree_node(cmd, "devices/types");
636 if (!(filters[nr_filt++] = lvm_type_filter_create(cmd->proc_dir, cn))) {
642 if (find_config_tree_bool(cmd, "devices/md_component_detection",
654 static int _init_filters(struct cmd_context *cmd, unsigned load_persistent_cache)
661 cmd->dump_filter = 0;
663 if (!(f3 = _init_filter_components(cmd)))
666 init_ignore_suspended_devices(find_config_tree_int(cmd,
672 cache_dir = find_config_tree_str(cmd, "devices/cache_dir", NULL);
673 cache_file_prefix = find_config_tree_str(cmd, "devices/cache_file_prefix", NULL);
678 cache_dir ? "" : cmd->system_dir,
685 } else if (!(dev_cache = find_config_tree_str(cmd, "devices/cache", NULL)) &&
688 cmd->system_dir, DEFAULT_CACHE_SUBDIR,
703 if (find_config_tree_int(cmd, "devices/write_cache_state", 1))
704 cmd->dump_filter = 1;
706 if (!*cmd->system_dir)
707 cmd->dump_filter = 0;
713 if (load_persistent_cache && !cmd->is_long_lived &&
715 (st.st_ctime > config_file_timestamp(cmd->cft)) &&
720 cmd->filter = f4;
725 static int _init_formats(struct cmd_context *cmd)
738 if (!(fmt = init_lvm1_format(cmd)))
741 dm_list_add(&cmd->formats, &fmt->list);
745 if (!(fmt = init_pool_format(cmd)))
748 dm_list_add(&cmd->formats, &fmt->list);
754 (cn = find_config_tree_node(cmd, "global/format_libraries"))) {
766 if (!(lib = load_shared_library(cmd, cv->v.str,
777 if (!(fmt = init_format_fn(cmd)))
780 dm_list_add(&cmd->formats, &fmt->list);
785 if (!(fmt = create_text_format(cmd)))
788 dm_list_add(&cmd->formats, &fmt->list);
790 cmd->fmt_backup = fmt;
792 format = find_config_tree_str(cmd, "global/format",
795 dm_list_iterate_items(fmt, &cmd->formats) {
798 cmd->default_settings.fmt = fmt;
799 cmd->fmt = cmd->default_settings.fmt;
808 int init_lvmcache_orphans(struct cmd_context *cmd)
812 dm_list_iterate_items(fmt, &cmd->formats)
820 struct cmd_context *cmd;
831 segtype->cmd = seglib->cmd;
833 dm_list_iterate_items(segtype2, &seglib->cmd->segtypes) {
843 dm_list_add(&seglib->cmd->segtypes, &segtype->list);
852 static int _init_single_segtype(struct cmd_context *cmd,
864 if (!(segtype = init_segtype_fn(seglib->cmd)))
870 static int _init_segtypes(struct cmd_context *cmd)
873 struct segtype_library seglib = { .cmd = cmd };
879 if (!(segtype = init_striped_segtype(cmd)))
882 dm_list_add(&cmd->segtypes, &segtype->list);
884 if (!(segtype = init_zero_segtype(cmd)))
887 dm_list_add(&cmd->segtypes, &segtype->list);
889 if (!(segtype = init_error_segtype(cmd)))
892 dm_list_add(&cmd->segtypes, &segtype->list);
894 if (!(segtype = init_free_segtype(cmd)))
897 dm_list_add(&cmd->segtypes, &segtype->list);
900 if (!(segtype = init_snapshot_segtype(cmd)))
903 dm_list_add(&cmd->segtypes, &segtype->list);
907 if (!(segtype = init_mirrored_segtype(cmd)))
910 dm_list_add(&cmd->segtypes, &segtype->list);
916 (cn = find_config_tree_node(cmd, "global/segment_libraries"))) {
929 if (!(seglib.lib = load_shared_library(cmd,
945 if (!init_multiple_segtypes_fn(cmd, &seglib)) {
950 dm_list_iterate_safe(sgtl, tmp, &cmd->segtypes) {
967 static int _init_hostname(struct cmd_context *cmd)
976 if (!(cmd->hostname = dm_pool_strdup(cmd->libmem, uts.nodename))) {
981 if (!(cmd->kernel_vsn = dm_pool_strdup(cmd->libmem, uts.release))) {
989 static int _init_backup(struct cmd_context *cmd)
995 if (!cmd->system_dir) {
997 backup_init(cmd, "", 0);
998 archive_init(cmd, "", 0, 0, 0);
1003 cmd->default_settings.archive =
1004 find_config_tree_bool(cmd, "backup/archive",
1007 days = (uint32_t) find_config_tree_int(cmd, "backup/retain_days",
1010 min = (uint32_t) find_config_tree_int(cmd, "backup/retain_min",
1014 (default_dir, sizeof(default_dir), "%s/%s", cmd->system_dir,
1017 cmd->system_dir, DEFAULT_ARCHIVE_SUBDIR);
1021 dir = find_config_tree_str(cmd, "backup/archive_dir",
1024 if (!archive_init(cmd, dir, days, min,
1025 cmd->default_settings.archive)) {
1031 cmd->default_settings.backup =
1032 find_config_tree_bool(cmd, "backup/backup",
1036 (default_dir, sizeof(default_dir), "%s/%s", cmd->system_dir,
1039 cmd->system_dir, DEFAULT_BACKUP_SUBDIR);
1043 dir = find_config_tree_str(cmd, "backup/backup_dir", default_dir);
1045 if (!backup_init(cmd, dir, cmd->default_settings.backup)) {
1053 static void _init_rand(struct cmd_context *cmd)
1055 if (read_urandom(&cmd->rand_seed, sizeof(cmd->rand_seed)))
1058 cmd->rand_seed = (unsigned) time(NULL) + (unsigned) getpid();
1061 static void _init_globals(struct cmd_context *cmd)
1072 struct cmd_context *cmd;
1087 if (!(cmd = dm_malloc(sizeof(*cmd)))) {
1091 memset(cmd, 0, sizeof(*cmd));
1092 cmd->is_long_lived = is_long_lived;
1093 cmd->handles_missing_pvs = 0;
1094 cmd->handles_unknown_segments = 0;
1095 cmd->hosttags = 0;
1096 dm_list_init(&cmd->formats);
1097 dm_list_init(&cmd->segtypes);
1098 dm_list_init(&cmd->tags);
1099 dm_list_init(&cmd->config_files);
1108 strncpy(cmd->system_dir, system_dir, sizeof(cmd->system_dir) - 1);
1110 strcpy(cmd->system_dir, DEFAULT_SYS_DIR);
1112 if (!_get_env_vars(cmd))
1116 if (*cmd->system_dir && !dm_create_dir(cmd->system_dir)) {
1124 if (!(cmd->libmem = dm_pool_create("library", 4 * 1024))) {
1129 if (!_init_lvm_conf(cmd))
1132 _init_logging(cmd);
1134 if (!_init_hostname(cmd))
1137 if (!_init_tags(cmd, cmd->cft))
1140 if (!_init_tag_configs(cmd))
1143 if (!_merge_config_files(cmd))
1146 if (!_process_config(cmd))
1149 if (!_init_dev_cache(cmd))
1152 if (!_init_filters(cmd, 1))
1155 if (!(cmd->mem = dm_pool_create("command", 4 * 1024))) {
1160 memlock_init(cmd);
1162 if (!_init_formats(cmd))
1165 if (!init_lvmcache_orphans(cmd))
1168 if (!_init_segtypes(cmd))
1171 if (!_init_backup(cmd))
1174 _init_rand(cmd);
1176 _init_globals(cmd);
1178 cmd->default_settings.cache_vgmetadata = 1;
1179 cmd->current_settings = cmd->default_settings;
1181 cmd->config_valid = 1;
1183 return cmd;
1232 int refresh_filters(struct cmd_context *cmd)
1234 if (cmd->filter) {
1235 cmd->filter->destroy(cmd->filter);
1236 cmd->filter = NULL;
1239 return _init_filters(cmd, 0);
1242 int refresh_toolcontext(struct cmd_context *cmd)
1252 lvmcache_destroy(cmd, 0);
1254 _destroy_segtypes(&cmd->segtypes);
1255 _destroy_formats(&cmd->formats);
1256 if (cmd->filter) {
1257 cmd->filter->destroy(cmd->filter);
1258 cmd->filter = NULL;
1261 _destroy_tags(cmd);
1262 _destroy_tag_configs(cmd);
1264 cmd->config_valid = 0;
1266 cmd->hosttags = 0;
1268 if (!_init_lvm_conf(cmd))
1271 _init_logging(cmd);
1273 if (!_init_tags(cmd, cmd->cft))
1276 if (!_init_tag_configs(cmd))
1279 if (!_merge_config_files(cmd))
1282 if (!_process_config(cmd))
1285 if (!_init_dev_cache(cmd))
1288 if (!_init_filters(cmd, 0))
1291 if (!_init_formats(cmd))
1294 if (!init_lvmcache_orphans(cmd))
1297 if (!_init_segtypes(cmd))
1300 cmd->config_valid = 1;
1306 void destroy_toolcontext(struct cmd_context *cmd)
1308 if (cmd->dump_filter)
1309 persistent_filter_dump(cmd->filter);
1311 archive_exit(cmd);
1312 backup_exit(cmd);
1313 lvmcache_destroy(cmd, 0);
1315 _destroy_segtypes(&cmd->segtypes);
1316 _destroy_formats(&cmd->formats);
1317 if (cmd->filter)
1318 cmd->filter->destroy(cmd->filter);
1319 if (cmd->mem)
1320 dm_pool_destroy(cmd->mem);
1322 _destroy_tags(cmd);
1323 _destroy_tag_configs(cmd);
1324 if (cmd->libmem)
1325 dm_pool_destroy(cmd->libmem);
1326 dm_free(cmd);