static int _thin_pool_add_message(struct lv_segment *seg, const char *key, const struct dm_config_node *sn) { const char *lv_name = NULL; struct logical_volume *lv = NULL; uint32_t delete_id = 0; dm_thin_message_t type; /* Message must have only one from: create, delete */ if (dm_config_get_str(sn, "create", &lv_name)) { if (!(lv = find_lv(seg->lv->vg, lv_name))) return SEG_LOG_ERROR("Unknown LV %s for create message in", lv_name); /* FIXME: switch to _SNAP later, if the created LV has an origin */ type = DM_THIN_MESSAGE_CREATE_THIN; } else if (dm_config_get_uint32(sn, "delete", &delete_id)) type = DM_THIN_MESSAGE_DELETE; else return SEG_LOG_ERROR("Unknown message in"); if (!attach_pool_message(seg, type, lv, delete_id, 1)) return_0; return 1; }
/* Parse state string */ static replicator_state_t _get_state(const struct dm_config_node *sn, const char *path, replicator_state_t def) { const char *str; unsigned i; if (dm_config_get_str(sn, path, &str)) { for (i = 0; i < sizeof(_state_txt)/sizeof(_state_txt[0]); ++i) if (strcasecmp(str, _state_txt[i]) == 0) return (replicator_state_t) i; log_warn("%s: unknown value '%s', using default '%s' state", path, str, _state_txt[def]); } return def; }
/* Parse action string */ static dm_replicator_mode_t _get_op_mode(const struct dm_config_node *sn, const char *path, dm_replicator_mode_t def) { const char *str; unsigned i; if (dm_config_get_str(sn, path, &str)) { for (i = 0; i < sizeof(_op_mode_txt)/sizeof(_op_mode_txt[0]); ++i) if (strcasecmp(str, _op_mode_txt[i]) == 0) { log_very_verbose("Setting %s to %s", path, _op_mode_txt[i]); return (dm_replicator_mode_t) i; } log_warn("%s: unknown value '%s', using default '%s' operation mode", path, str, _op_mode_txt[def]); } return def; }