Lines Matching refs:cmd

64 static int _get_env_vars(struct cmd_context *cmd)  in _get_env_vars()  argument
70 if (dm_snprintf(cmd->system_dir, sizeof(cmd->system_dir), in _get_env_vars()
81 static void _get_sysfs_dir(struct cmd_context *cmd) in _get_sysfs_dir() argument
88 cmd->sysfs_dir[0] = '\0'; in _get_sysfs_dir()
89 if (!*cmd->proc_dir) { in _get_sysfs_dir()
95 "%s/mounts", cmd->proc_dir) < 0) { in _get_sysfs_dir()
121 strncpy(cmd->sysfs_dir, sys_mnt, sizeof(cmd->sysfs_dir)); in _get_sysfs_dir()
124 static void _init_logging(struct cmd_context *cmd) in _init_logging() argument
133 cmd->default_settings.syslog = in _init_logging()
134 find_config_tree_int(cmd, "log/syslog", DEFAULT_SYSLOG); in _init_logging()
135 if (cmd->default_settings.syslog != 1) in _init_logging()
138 if (cmd->default_settings.syslog > 1) in _init_logging()
139 init_syslog(cmd->default_settings.syslog); in _init_logging()
142 cmd->default_settings.debug = in _init_logging()
143 find_config_tree_int(cmd, "log/level", DEFAULT_LOGLEVEL); in _init_logging()
144 init_debug(cmd->default_settings.debug); in _init_logging()
147 cmd->default_settings.verbose = in _init_logging()
148 find_config_tree_int(cmd, "log/verbose", DEFAULT_VERBOSE); in _init_logging()
149 init_verbose(cmd->default_settings.verbose + VERBOSE_BASE_LEVEL); in _init_logging()
152 init_indent(find_config_tree_int(cmd, "log/indent", in _init_logging()
155 cmd->default_settings.msg_prefix = find_config_tree_str(cmd, in _init_logging()
158 init_msg_prefix(cmd->default_settings.msg_prefix); in _init_logging()
160 cmd->default_settings.cmd_name = find_config_tree_int(cmd, in _init_logging()
163 init_cmd_name(cmd->default_settings.cmd_name); in _init_logging()
166 cmd->default_settings.test = in _init_logging()
167 find_config_tree_int(cmd, "global/test", 0); in _init_logging()
168 init_test(cmd->default_settings.test); in _init_logging()
171 if (find_config_tree_int(cmd, "log/overwrite", DEFAULT_OVERWRITE)) in _init_logging()
174 log_file = find_config_tree_str(cmd, "log/file", 0); in _init_logging()
182 log_file = find_config_tree_str(cmd, "log/activate_file", 0); in _init_logging()
186 init_log_while_suspended(find_config_tree_int(cmd, in _init_logging()
200 static int _process_config(struct cmd_context *cmd) in _process_config() argument
207 cmd->default_settings.umask = find_config_tree_int(cmd, in _process_config()
211 if ((old_umask = umask((mode_t) cmd->default_settings.umask)) != in _process_config()
212 (mode_t) cmd->default_settings.umask) in _process_config()
213 log_verbose("Set umask to %04o", cmd->default_settings.umask); in _process_config()
216 if (dm_snprintf(cmd->dev_dir, sizeof(cmd->dev_dir), "%s/", in _process_config()
217 find_config_tree_str(cmd, "devices/dir", in _process_config()
223 dm_set_dev_dir(cmd->dev_dir); in _process_config()
227 if (dm_snprintf(cmd->proc_dir, sizeof(cmd->proc_dir), "%s", in _process_config()
228 find_config_tree_str(cmd, "global/proc", in _process_config()
234 if (*cmd->proc_dir && !dir_exists(cmd->proc_dir)) { in _process_config()
236 cmd->proc_dir); in _process_config()
237 *cmd->proc_dir = '\0'; in _process_config()
240 _get_sysfs_dir(cmd); in _process_config()
243 cmd->default_settings.activation = find_config_tree_int(cmd, in _process_config()
246 set_activation(cmd->default_settings.activation); in _process_config()
248 cmd->default_settings.suffix = find_config_tree_int(cmd, in _process_config()
252 if (!(cmd->default_settings.unit_factor = in _process_config()
253 units_to_bytes(find_config_tree_str(cmd, in _process_config()
256 &cmd->default_settings.unit_type))) { in _process_config()
261 read_ahead = find_config_tree_str(cmd, "activation/readahead", DEFAULT_READ_AHEAD); in _process_config()
263 cmd->default_settings.read_ahead = DM_READ_AHEAD_AUTO; in _process_config()
265 cmd->default_settings.read_ahead = DM_READ_AHEAD_NONE; in _process_config()
271 cmd->default_settings.udev_sync = find_config_tree_int(cmd, in _process_config()
275 cmd->stripe_filler = find_config_tree_str(cmd, in _process_config()
280 if (!strcmp(cmd->stripe_filler, "/dev/ioerror") && in _process_config()
281 stat(cmd->stripe_filler, &st)) in _process_config()
282 cmd->stripe_filler = "error"; in _process_config()
284 if (strcmp(cmd->stripe_filler, "error")) { in _process_config()
285 if (stat(cmd->stripe_filler, &st)) { in _process_config()
287 "is invalid,", cmd->stripe_filler); in _process_config()
290 cmd->stripe_filler = "error"; in _process_config()
293 "is not a block device.", cmd->stripe_filler); in _process_config()
295 cmd->stripe_filler = "error"; in _process_config()
299 cmd->si_unit_consistency = find_config_tree_int(cmd, in _process_config()
306 static int _set_tag(struct cmd_context *cmd, const char *tag) in _set_tag() argument
308 log_very_verbose("Setting host tag: %s", dm_pool_strdup(cmd->libmem, tag)); in _set_tag()
310 if (!str_list_add(cmd->libmem, &cmd->tags, tag)) { in _set_tag()
318 static int _check_host_filters(struct cmd_context *cmd, struct config_node *hn, in _check_host_filters() argument
339 if (!strcmp(cv->v.str, cmd->hostname)) { in _check_host_filters()
354 static int _init_tags(struct cmd_context *cmd, struct config_tree *cft) in _init_tags() argument
364 if (!cmd->hosttags && find_config_int(cft->root, "tags/hosttags", in _init_tags()
367 if (!_set_tag(cmd, cmd->hostname)) in _init_tags()
369 cmd->hosttags = 1; in _init_tags()
384 if (!_check_host_filters(cmd, cn->child, &passes)) in _init_tags()
389 if (!_set_tag(cmd, tag)) in _init_tags()
396 static int _load_config_file(struct cmd_context *cmd, const char *tag) in _load_config_file() argument
407 cmd->system_dir, filler, tag) < 0) { in _load_config_file()
412 if (!(cfl = dm_pool_alloc(cmd->libmem, sizeof(*cfl)))) { in _load_config_file()
425 dm_list_add(&cmd->config_files, &cfl->list); in _load_config_file()
440 dm_list_add(&cmd->config_files, &cfl->list); in _load_config_file()
444 _init_tags(cmd, cfl->cft); in _load_config_file()
447 cmd->cft = cfl->cft; in _load_config_file()
453 static int _init_lvm_conf(struct cmd_context *cmd) in _init_lvm_conf() argument
456 if (!*cmd->system_dir) { in _init_lvm_conf()
457 if (!(cmd->cft = create_config_tree(NULL, 0))) { in _init_lvm_conf()
464 if (!_load_config_file(cmd, "")) in _init_lvm_conf()
471 static int _init_tag_configs(struct cmd_context *cmd) in _init_tag_configs() argument
476 dm_list_iterate_items(sl, &cmd->tags) { in _init_tag_configs()
477 if (!_load_config_file(cmd, sl->str)) in _init_tag_configs()
484 static int _merge_config_files(struct cmd_context *cmd) in _merge_config_files() argument
489 if (cmd->cft->root) { in _merge_config_files()
490 if (!(cmd->cft = create_config_tree(NULL, 0))) { in _merge_config_files()
496 dm_list_iterate_items(cfl, &cmd->config_files) { in _merge_config_files()
498 if (!merge_config_tree(cmd, cmd->cft, cfl->cft)) in _merge_config_files()
505 static void _destroy_tags(struct cmd_context *cmd) in _destroy_tags() argument
509 dm_list_iterate_safe(slh, slht, &cmd->tags) { in _destroy_tags()
514 int config_files_changed(struct cmd_context *cmd) in config_files_changed() argument
518 dm_list_iterate_items(cfl, &cmd->config_files) { in config_files_changed()
526 static void _destroy_tag_configs(struct cmd_context *cmd) in _destroy_tag_configs() argument
530 dm_list_iterate_items(cfl, &cmd->config_files) { in _destroy_tag_configs()
531 if (cfl->cft == cmd->cft) in _destroy_tag_configs()
532 cmd->cft = NULL; in _destroy_tag_configs()
536 if (cmd->cft) { in _destroy_tag_configs()
537 destroy_config_tree(cmd->cft); in _destroy_tag_configs()
538 cmd->cft = NULL; in _destroy_tag_configs()
541 dm_list_init(&cmd->config_files); in _destroy_tag_configs()
544 static int _init_dev_cache(struct cmd_context *cmd) in _init_dev_cache() argument
549 if (!dev_cache_init(cmd)) in _init_dev_cache()
552 if (!(cn = find_config_tree_node(cmd, "devices/scan"))) { in _init_dev_cache()
577 if (!(cn = find_config_tree_node(cmd, "devices/loopfiles"))) in _init_dev_cache()
600 static struct dev_filter *_init_filter_components(struct cmd_context *cmd) in _init_filter_components() argument
619 if (find_config_tree_bool(cmd, "devices/sysfs_scan", in _init_filter_components()
621 if ((filters[nr_filt] = sysfs_filter_create(cmd->sysfs_dir))) in _init_filter_components()
626 if (!(cn = find_config_tree_node(cmd, "devices/filter"))) in _init_filter_components()
636 cn = find_config_tree_node(cmd, "devices/types"); in _init_filter_components()
637 if (!(filters[nr_filt++] = lvm_type_filter_create(cmd->proc_dir, cn))) { in _init_filter_components()
643 if (find_config_tree_bool(cmd, "devices/md_component_detection", in _init_filter_components()
655 static int _init_filters(struct cmd_context *cmd, unsigned load_persistent_cache) in _init_filters() argument
662 cmd->dump_filter = 0; in _init_filters()
664 if (!(f3 = _init_filter_components(cmd))) in _init_filters()
667 init_ignore_suspended_devices(find_config_tree_int(cmd, in _init_filters()
673 cache_dir = find_config_tree_str(cmd, "devices/cache_dir", NULL); in _init_filters()
674 cache_file_prefix = find_config_tree_str(cmd, "devices/cache_file_prefix", NULL); in _init_filters()
679 cache_dir ? "" : cmd->system_dir, in _init_filters()
686 } else if (!(dev_cache = find_config_tree_str(cmd, "devices/cache", NULL)) && in _init_filters()
689 cmd->system_dir, DEFAULT_CACHE_SUBDIR, in _init_filters()
704 if (find_config_tree_int(cmd, "devices/write_cache_state", 1)) in _init_filters()
705 cmd->dump_filter = 1; in _init_filters()
707 if (!*cmd->system_dir) in _init_filters()
708 cmd->dump_filter = 0; in _init_filters()
714 if (load_persistent_cache && !cmd->is_long_lived && in _init_filters()
716 (st.st_ctime > config_file_timestamp(cmd->cft)) && in _init_filters()
721 cmd->filter = f4; in _init_filters()
726 static int _init_formats(struct cmd_context *cmd) in _init_formats() argument
739 if (!(fmt = init_lvm1_format(cmd))) in _init_formats()
742 dm_list_add(&cmd->formats, &fmt->list); in _init_formats()
746 if (!(fmt = init_pool_format(cmd))) in _init_formats()
749 dm_list_add(&cmd->formats, &fmt->list); in _init_formats()
755 (cn = find_config_tree_node(cmd, "global/format_libraries"))) { in _init_formats()
767 if (!(lib = load_shared_library(cmd, cv->v.str, in _init_formats()
778 if (!(fmt = init_format_fn(cmd))) in _init_formats()
781 dm_list_add(&cmd->formats, &fmt->list); in _init_formats()
786 if (!(fmt = create_text_format(cmd))) in _init_formats()
789 dm_list_add(&cmd->formats, &fmt->list); in _init_formats()
791 cmd->fmt_backup = fmt; in _init_formats()
793 format = find_config_tree_str(cmd, "global/format", in _init_formats()
796 dm_list_iterate_items(fmt, &cmd->formats) { in _init_formats()
799 cmd->default_settings.fmt = fmt; in _init_formats()
800 cmd->fmt = cmd->default_settings.fmt; in _init_formats()
809 int init_lvmcache_orphans(struct cmd_context *cmd) in init_lvmcache_orphans() argument
813 dm_list_iterate_items(fmt, &cmd->formats) in init_lvmcache_orphans()
821 struct cmd_context *cmd; member
832 segtype->cmd = seglib->cmd; in lvm_register_segtype()
834 dm_list_iterate_items(segtype2, &seglib->cmd->segtypes) { in lvm_register_segtype()
844 dm_list_add(&seglib->cmd->segtypes, &segtype->list); in lvm_register_segtype()
853 static int _init_single_segtype(struct cmd_context *cmd, in _init_single_segtype() argument
865 if (!(segtype = init_segtype_fn(seglib->cmd))) in _init_single_segtype()
871 static int _init_segtypes(struct cmd_context *cmd) in _init_segtypes() argument
874 struct segtype_library seglib = { .cmd = cmd }; in _init_segtypes()
880 if (!(segtype = init_striped_segtype(cmd))) in _init_segtypes()
883 dm_list_add(&cmd->segtypes, &segtype->list); in _init_segtypes()
885 if (!(segtype = init_zero_segtype(cmd))) in _init_segtypes()
888 dm_list_add(&cmd->segtypes, &segtype->list); in _init_segtypes()
890 if (!(segtype = init_error_segtype(cmd))) in _init_segtypes()
893 dm_list_add(&cmd->segtypes, &segtype->list); in _init_segtypes()
895 if (!(segtype = init_free_segtype(cmd))) in _init_segtypes()
898 dm_list_add(&cmd->segtypes, &segtype->list); in _init_segtypes()
901 if (!(segtype = init_snapshot_segtype(cmd))) in _init_segtypes()
904 dm_list_add(&cmd->segtypes, &segtype->list); in _init_segtypes()
908 if (!(segtype = init_mirrored_segtype(cmd))) in _init_segtypes()
911 dm_list_add(&cmd->segtypes, &segtype->list); in _init_segtypes()
917 (cn = find_config_tree_node(cmd, "global/segment_libraries"))) { in _init_segtypes()
930 if (!(seglib.lib = load_shared_library(cmd, in _init_segtypes()
946 if (!init_multiple_segtypes_fn(cmd, &seglib)) { in _init_segtypes()
951 dm_list_iterate_safe(sgtl, tmp, &cmd->segtypes) { in _init_segtypes()
968 static int _init_hostname(struct cmd_context *cmd) in _init_hostname() argument
977 if (!(cmd->hostname = dm_pool_strdup(cmd->libmem, uts.nodename))) { in _init_hostname()
982 if (!(cmd->kernel_vsn = dm_pool_strdup(cmd->libmem, uts.release))) { in _init_hostname()
990 static int _init_backup(struct cmd_context *cmd) in _init_backup() argument
996 if (!cmd->system_dir) { in _init_backup()
998 backup_init(cmd, "", 0); in _init_backup()
999 archive_init(cmd, "", 0, 0, 0); in _init_backup()
1004 cmd->default_settings.archive = in _init_backup()
1005 find_config_tree_bool(cmd, "backup/archive", in _init_backup()
1008 days = (uint32_t) find_config_tree_int(cmd, "backup/retain_days", in _init_backup()
1011 min = (uint32_t) find_config_tree_int(cmd, "backup/retain_min", in _init_backup()
1015 (default_dir, sizeof(default_dir), "%s/%s", cmd->system_dir, in _init_backup()
1018 cmd->system_dir, DEFAULT_ARCHIVE_SUBDIR); in _init_backup()
1022 dir = find_config_tree_str(cmd, "backup/archive_dir", in _init_backup()
1025 if (!archive_init(cmd, dir, days, min, in _init_backup()
1026 cmd->default_settings.archive)) { in _init_backup()
1032 cmd->default_settings.backup = in _init_backup()
1033 find_config_tree_bool(cmd, "backup/backup", in _init_backup()
1037 (default_dir, sizeof(default_dir), "%s/%s", cmd->system_dir, in _init_backup()
1040 cmd->system_dir, DEFAULT_BACKUP_SUBDIR); in _init_backup()
1044 dir = find_config_tree_str(cmd, "backup/backup_dir", default_dir); in _init_backup()
1046 if (!backup_init(cmd, dir, cmd->default_settings.backup)) { in _init_backup()
1054 static void _init_rand(struct cmd_context *cmd) in _init_rand() argument
1056 if (read_urandom(&cmd->rand_seed, sizeof(cmd->rand_seed))) in _init_rand()
1059 cmd->rand_seed = (unsigned) time(NULL) + (unsigned) getpid(); in _init_rand()
1062 static void _init_globals(struct cmd_context *cmd) in _init_globals() argument
1073 struct cmd_context *cmd; in create_toolcontext() local
1088 if (!(cmd = dm_malloc(sizeof(*cmd)))) { in create_toolcontext()
1092 memset(cmd, 0, sizeof(*cmd)); in create_toolcontext()
1093 cmd->is_long_lived = is_long_lived; in create_toolcontext()
1094 cmd->handles_missing_pvs = 0; in create_toolcontext()
1095 cmd->handles_unknown_segments = 0; in create_toolcontext()
1096 cmd->hosttags = 0; in create_toolcontext()
1097 dm_list_init(&cmd->formats); in create_toolcontext()
1098 dm_list_init(&cmd->segtypes); in create_toolcontext()
1099 dm_list_init(&cmd->tags); in create_toolcontext()
1100 dm_list_init(&cmd->config_files); in create_toolcontext()
1109 strncpy(cmd->system_dir, system_dir, sizeof(cmd->system_dir) - 1); in create_toolcontext()
1111 strcpy(cmd->system_dir, DEFAULT_SYS_DIR); in create_toolcontext()
1113 if (!_get_env_vars(cmd)) in create_toolcontext()
1117 if (*cmd->system_dir && !dm_create_dir(cmd->system_dir)) { in create_toolcontext()
1125 if (!(cmd->libmem = dm_pool_create("library", 4 * 1024))) { in create_toolcontext()
1130 if (!_init_lvm_conf(cmd)) in create_toolcontext()
1133 _init_logging(cmd); in create_toolcontext()
1135 if (!_init_hostname(cmd)) in create_toolcontext()
1138 if (!_init_tags(cmd, cmd->cft)) in create_toolcontext()
1141 if (!_init_tag_configs(cmd)) in create_toolcontext()
1144 if (!_merge_config_files(cmd)) in create_toolcontext()
1147 if (!_process_config(cmd)) in create_toolcontext()
1150 if (!_init_dev_cache(cmd)) in create_toolcontext()
1153 if (!_init_filters(cmd, 1)) in create_toolcontext()
1156 if (!(cmd->mem = dm_pool_create("command", 4 * 1024))) { in create_toolcontext()
1161 memlock_init(cmd); in create_toolcontext()
1163 if (!_init_formats(cmd)) in create_toolcontext()
1166 if (!init_lvmcache_orphans(cmd)) in create_toolcontext()
1169 if (!_init_segtypes(cmd)) in create_toolcontext()
1172 if (!_init_backup(cmd)) in create_toolcontext()
1175 _init_rand(cmd); in create_toolcontext()
1177 _init_globals(cmd); in create_toolcontext()
1179 cmd->default_settings.cache_vgmetadata = 1; in create_toolcontext()
1180 cmd->current_settings = cmd->default_settings; in create_toolcontext()
1182 cmd->config_valid = 1; in create_toolcontext()
1184 return cmd; in create_toolcontext()
1233 int refresh_filters(struct cmd_context *cmd) in refresh_filters() argument
1235 if (cmd->filter) { in refresh_filters()
1236 cmd->filter->destroy(cmd->filter); in refresh_filters()
1237 cmd->filter = NULL; in refresh_filters()
1240 return _init_filters(cmd, 0); in refresh_filters()
1243 int refresh_toolcontext(struct cmd_context *cmd) in refresh_toolcontext() argument
1253 lvmcache_destroy(cmd, 0); in refresh_toolcontext()
1255 _destroy_segtypes(&cmd->segtypes); in refresh_toolcontext()
1256 _destroy_formats(&cmd->formats); in refresh_toolcontext()
1257 if (cmd->filter) { in refresh_toolcontext()
1258 cmd->filter->destroy(cmd->filter); in refresh_toolcontext()
1259 cmd->filter = NULL; in refresh_toolcontext()
1262 _destroy_tags(cmd); in refresh_toolcontext()
1263 _destroy_tag_configs(cmd); in refresh_toolcontext()
1265 cmd->config_valid = 0; in refresh_toolcontext()
1267 cmd->hosttags = 0; in refresh_toolcontext()
1269 if (!_init_lvm_conf(cmd)) in refresh_toolcontext()
1272 _init_logging(cmd); in refresh_toolcontext()
1274 if (!_init_tags(cmd, cmd->cft)) in refresh_toolcontext()
1277 if (!_init_tag_configs(cmd)) in refresh_toolcontext()
1280 if (!_merge_config_files(cmd)) in refresh_toolcontext()
1283 if (!_process_config(cmd)) in refresh_toolcontext()
1286 if (!_init_dev_cache(cmd)) in refresh_toolcontext()
1289 if (!_init_filters(cmd, 0)) in refresh_toolcontext()
1292 if (!_init_formats(cmd)) in refresh_toolcontext()
1295 if (!init_lvmcache_orphans(cmd)) in refresh_toolcontext()
1298 if (!_init_segtypes(cmd)) in refresh_toolcontext()
1301 cmd->config_valid = 1; in refresh_toolcontext()
1307 void destroy_toolcontext(struct cmd_context *cmd) in destroy_toolcontext() argument
1309 if (cmd->dump_filter) in destroy_toolcontext()
1310 persistent_filter_dump(cmd->filter); in destroy_toolcontext()
1312 archive_exit(cmd); in destroy_toolcontext()
1313 backup_exit(cmd); in destroy_toolcontext()
1314 lvmcache_destroy(cmd, 0); in destroy_toolcontext()
1316 _destroy_segtypes(&cmd->segtypes); in destroy_toolcontext()
1317 _destroy_formats(&cmd->formats); in destroy_toolcontext()
1318 if (cmd->filter) in destroy_toolcontext()
1319 cmd->filter->destroy(cmd->filter); in destroy_toolcontext()
1320 if (cmd->mem) in destroy_toolcontext()
1321 dm_pool_destroy(cmd->mem); in destroy_toolcontext()
1323 _destroy_tags(cmd); in destroy_toolcontext()
1324 _destroy_tag_configs(cmd); in destroy_toolcontext()
1325 if (cmd->libmem) in destroy_toolcontext()
1326 dm_pool_destroy(cmd->libmem); in destroy_toolcontext()
1327 dm_free(cmd); in destroy_toolcontext()