diff options
author | Heinz Mauelshagen <heinzm@redhat.com> | 2016-06-27 15:07:24 +0200 |
---|---|---|
committer | Heinz Mauelshagen <heinzm@redhat.com> | 2016-06-27 15:07:24 +0200 |
commit | 80c80b38100fe6b4300934a1a8210ff571906e94 (patch) | |
tree | 1e6f933c497dc8c1a61a764236b453734b01be06 | |
parent | c401d2826ee93c782280e47644af19aaa92366a1 (diff) | |
download | lvm2-80c80b38100fe6b4300934a1a8210ff571906e94.tar.gz |
raid: fixup kernel target version
-rw-r--r-- | lib/metadata/lv_manip.c | 2 | ||||
-rw-r--r-- | lib/metadata/metadata-exported.h | 1 | ||||
-rw-r--r-- | lib/metadata/raid_manip.c | 37 | ||||
-rw-r--r-- | lib/misc/lib.h | 4 | ||||
-rw-r--r-- | libdm/libdevmapper.h | 2 | ||||
-rw-r--r-- | libdm/libdm-deptree.c | 10 | ||||
-rw-r--r-- | tools/lvresize.c | 1 |
7 files changed, 35 insertions, 22 deletions
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c index 479951466..f0aaf21ff 100644 --- a/lib/metadata/lv_manip.c +++ b/lib/metadata/lv_manip.c @@ -4647,7 +4647,7 @@ PFLA("extents=%u ah->new_extents=%u lv->le_count=%u stripes=%u sub_lv_count=%u", lv->vg->name, lv->name); goto out; } else if (sync_percent == DM_PERCENT_100) { - log_verbose("Skipping initial resync for " + log_error("Skipping initial resync for " "extended portion of %s/%s", lv->vg->name, lv->name); init_mirror_in_sync(1); diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h index 7f1c395ff..6f9e526be 100644 --- a/lib/metadata/metadata-exported.h +++ b/lib/metadata/metadata-exported.h @@ -580,6 +580,7 @@ struct lvresize_params { int resizefs; int nofsck; + int nosync; int argc; char **argv; diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c index bcbb65138..c4c408b74 100644 --- a/lib/metadata/raid_manip.c +++ b/lib/metadata/raid_manip.c @@ -1597,11 +1597,13 @@ static int _vg_write_lv_suspend_commit_backup(struct volume_group *vg, struct lo { RETURN_IF_ZERO(vg, "vg argument"); +PFL(); if (!vg_write(vg)) { log_error("Write of VG %s failed", vg->name); return_0; } +PFL(); if (lv && !suspend_lv(vg->cmd, lv)) { log_error("Failed to suspend %s before committing changes", display_lvname(lv)); @@ -1609,11 +1611,13 @@ static int _vg_write_lv_suspend_commit_backup(struct volume_group *vg, struct lo return 0; } +PFL(); if (!vg_commit(vg)) { log_error("Commit of VG %s failed", vg->name); return_0; } +PFL(); if (do_backup && !backup(vg)) log_error("Backup of VG %s failed; continuing", vg->name); @@ -3947,11 +3951,11 @@ static int _convert_mirror_to_raid(struct logical_volume *lv, if (!_alloc_and_add_rmeta_devs_for_lv(lv, allocate_pvs)) return 0; - init_mirror_in_sync(1); + init_mirror_in_sync(new_image_count > seg->area_count ? 0 : 1); seg->segtype = new_segtype; seg->data_copies = new_image_count; - lv->status &= ~(MIRROR | MIRRORED); + lv->status &= ~(MIRROR | MIRRORED | LV_NOTSYNCED); lv->status |= RAID; seg->status |= RAID; @@ -4003,6 +4007,8 @@ static int _convert_raid1_to_mirror(struct logical_volume *lv, return 0; } + init_mirror_in_sync(new_image_count > seg->area_count ? 0 : 1); + /* Change image pair count to requested # of images */ if (new_image_count != seg->area_count) { log_debug_metadata("Changing image count to %u on %s", @@ -4011,6 +4017,7 @@ static int _convert_raid1_to_mirror(struct logical_volume *lv, return 0; } + /* Remove rmeta LVs */ log_debug_metadata("Extracting and renaming metadata LVs"); if (!_extract_image_component_list(seg, RAID_META, 0, removal_lvs)) @@ -4759,7 +4766,9 @@ PFL(); active_lvs++; } - RETURN_IF_ZERO(devs_in_sync == active_lvs, "correct kernel/lvm active LV count"); +PFLA("devs_in_sync=%u active_lvs=%u removed_lvs=%u", devs_in_sync, active_lvs, removed_lvs); + RETURN_IF_ZERO(devs_in_sync == new_image_count, "correct kernel/lvm active LV count"); + // RETURN_IF_ZERO(devs_in_sync == active_lvs, "correct kernel/lvm active LV count"); RETURN_IF_ZERO(active_lvs + removed_lvs == old_image_count, "correct kernel/lvm total LV count"); /* Reshape removing image component pairs -> change sizes accordingly */ @@ -5017,10 +5026,14 @@ static int _pre_raid_reshape(struct logical_volume *lv, void *data) RETURN_IF_ZERO(data, "proper data pointer argument"); RETURN_IF_ZERO((old_image_count = *((uint32_t *) data)), "proper old image count"); +PFL(); /* Activate any new image component pairs */ - if (!_vg_write_lv_suspend_vg_commit(lv) || - !_activate_sub_lvs(lv, old_image_count)) + if (!_vg_write_lv_suspend_vg_commit(lv)) return 0; +PFL(); + if (!_activate_sub_lvs(lv, old_image_count)) + return 0; +PFL(); return 2; /* 1: ok, 2: metadata commited */ } @@ -7258,7 +7271,7 @@ PFL(); /* Add metadata LVs */ if (seg_is_raid0(seg)) { log_debug_metadata("Adding metadata LVs to %s", display_lvname(lv)); - if (!_raid0_add_or_remove_metadata_lvs(lv, 0 /* !update_and_reload */, allocate_pvs, NULL)) + if (!_raid0_add_or_remove_metadata_lvs(lv, 1 /* update_and_reload */, allocate_pvs, NULL)) return 0; } PFL(); @@ -10428,14 +10441,12 @@ PFLA("top_lv=%s replace_lv=%s", display_lvname(top_lv), display_lvname(replace_l if (!_lv_raid_replace(top_lv, seg_lv(seg, s), yes, remove_pvs, allocate_pvs, 1)) return 0; - } else { - /* Replace any failed areas of @replace_lv */ - if (!_replace_failed_areas(top_lv, replace_lv, NULL, match_count, remove_pvs, allocate_pvs)) - return 0; + /* Replace any failed areas of @replace_lv */ + } else if (!_replace_failed_areas(top_lv, replace_lv, NULL, match_count, remove_pvs, allocate_pvs)) + return 0; - if (recursive) - return 1; - } + if (recursive) + return 1; return _lv_update_reload_fns_reset_eliminate_lvs(top_lv, NULL, _post_dummy, NULL, diff --git a/lib/misc/lib.h b/lib/misc/lib.h index fa70bc581..a76155798 100644 --- a/lib/misc/lib.h +++ b/lib/misc/lib.h @@ -26,8 +26,8 @@ /* HM FIXME: REMOVEME: devel output */ #if 0 -#define PFL() fprintf(stderr, "%s %u\n", __func__, __LINE__); -#define PFLA(format, arg...) fprintf(stderr, "%s %u " format "\n", __func__, __LINE__, arg); +#define PFL() fprintf(stderr, "%s:%u(%s)\n", __FILE__, __LINE__, __func__); +#define PFLA(format, arg...) fprintf(stderr, "%s:%u(%s) " format "\n", __FILE__, __LINE__, __func__, arg); #else #define PFL() ; #define PFLA(format, arg...) ; diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h index 393f961af..a5954ad7d 100644 --- a/libdm/libdevmapper.h +++ b/libdm/libdevmapper.h @@ -344,7 +344,7 @@ int dm_get_status_cache(struct dm_pool *mem, const char *params, /* * Snapshot target's format: * <= 1.7.0: <used_sectors>/<total_sectors> - * >= 1.8.0: <used_sectors>/<total_sectors> <metadata_sectors> + * >= 1.9.0: <used_sectors>/<total_sectors> <metadata_sectors> */ struct dm_status_snapshot { uint64_t used_sectors; /* in 512b units */ diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c index f0e4ae122..d9828cf52 100644 --- a/libdm/libdm-deptree.c +++ b/libdm/libdm-deptree.c @@ -3405,7 +3405,7 @@ static unsigned _get_nr_fields(const char *p) * <raid_type> <#devs> <health_str> <sync_ratio> * Versions 1.5.0+ (6 fields): * <raid_type> <#devs> <health_str> <sync_ratio> <sync_action> <mismatch_cnt> - * Versions 1.8.0+ (8 fields): + * Versions 1.9.0+ (8 fields): * <raid_type> <#devs> <health_str> <sync_ratio> <sync_action> <mismatch_cnt> <data_offset> */ int dm_get_status_raid(struct dm_pool *mem, const char *params, @@ -3467,15 +3467,15 @@ int dm_get_status_raid(struct dm_pool *mem, const char *params, goto bad; /* - * All pre-1.8.0 version parameters are read. Now we check - * for additional 1.8.0+ parameters (i.e. nr_fields at least 7). + * All pre-1.9.0 version parameters are read. Now we check + * for additional 1.9.0+ parameters (i.e. nr_fields at least 7). * * Note that data_offset will be 0 if the - * kernel returns a pre-1.8.0 status. + * kernel returns a pre-1.9.0 status. */ if (nr_fields >= 7) { fields = "<data_offset>"; - p = _skip_fields(params, 6); /* skip pre-1.8.0 params */ + p = _skip_fields(params, 6); /* skip pre-1.9.0 params */ if (sscanf(p, "%" PRIu64, &s->data_offset) != 1) goto bad; } diff --git a/tools/lvresize.c b/tools/lvresize.c index 3188f27cb..441d59416 100644 --- a/tools/lvresize.c +++ b/tools/lvresize.c @@ -95,6 +95,7 @@ static int _lvresize_params(struct cmd_context *cmd, int argc, char **argv, lp->resizefs = arg_is_set(cmd, resizefs_ARG); lp->nofsck = arg_is_set(cmd, nofsck_ARG); + lp->nosync = lp->resize == LV_EXTEND && arg_is_set(cmd, nosync_ARG); if (!argc) { log_error("Please provide the logical volume name"); |