diff options
author | Alasdair Kergon <agk@redhat.com> | 2005-11-08 22:52:26 +0000 |
---|---|---|
committer | Alasdair Kergon <agk@redhat.com> | 2005-11-08 22:52:26 +0000 |
commit | 5f4b2acfe538ce25b248b215f9abddf35ab18e98 (patch) | |
tree | 3a6a0aed1dd973e022895fdef07a15467a6bdbcf /lib/error | |
parent | 165e4a112b9b9af6321cd2781a4a31f909825581 (diff) | |
download | lvm2-5f4b2acfe538ce25b248b215f9abddf35ab18e98.tar.gz lvm2-5f4b2acfe538ce25b248b215f9abddf35ab18e98.tar.xz lvm2-5f4b2acfe538ce25b248b215f9abddf35ab18e98.zip |
Replacement activation code. [Don't use this yet!]
Diffstat (limited to 'lib/error')
-rw-r--r-- | lib/error/errseg.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/lib/error/errseg.c b/lib/error/errseg.c index 906d1df1..a41619af 100644 --- a/lib/error/errseg.c +++ b/lib/error/errseg.c @@ -38,18 +38,13 @@ static int _merge_segments(struct lv_segment *seg1, struct lv_segment *seg2) } #ifdef DEVMAPPER_SUPPORT -static int _compose_target_line(struct dev_manager *dm, struct dm_pool *mem, +static int _add_target_line(struct dev_manager *dm, struct dm_pool *mem, struct config_tree *cft, void **target_state, - struct lv_segment *seg, char *params, - size_t paramsize, const char **target, int *pos, + struct lv_segment *seg, + struct deptree_node *node, uint64_t len, uint32_t *pvmove_mirror_count) { - /* error */ - - *target = "error"; - *params = '\0'; - - return 1; + return dm_deptree_node_add_error_target(node, len); } static int _target_present(void) @@ -57,8 +52,10 @@ static int _target_present(void) static int checked = 0; static int present = 0; - if (!checked) - present = target_present("error"); + /* Reported truncated in older kernels */ + if (!checked && + (target_present("error", 0) || target_present("erro", 0))) + present = 1; checked = 1; return present; @@ -74,7 +71,7 @@ static struct segtype_handler _error_ops = { name:_name, merge_segments:_merge_segments, #ifdef DEVMAPPER_SUPPORT - compose_target_line:_compose_target_line, + add_target_line:_add_target_line, target_present:_target_present, #endif destroy:_destroy, @@ -84,16 +81,14 @@ struct segment_type *init_error_segtype(struct cmd_context *cmd) { struct segment_type *segtype = dm_malloc(sizeof(*segtype)); - if (!segtype) { - stack; - return NULL; - } + if (!segtype) + return_NULL; segtype->cmd = cmd; segtype->ops = &_error_ops; segtype->name = "error"; segtype->private = NULL; - segtype->flags = SEG_CAN_SPLIT | SEG_VIRTUAL; + segtype->flags = SEG_CAN_SPLIT | SEG_VIRTUAL | SEG_CANNOT_BE_ZEROED; log_very_verbose("Initialised segtype: %s", segtype->name); |