summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeinz Mauelshagen <heinzm@redhat.com>2016-06-27 15:07:24 +0200
committerHeinz Mauelshagen <heinzm@redhat.com>2016-06-27 15:07:24 +0200
commit80c80b38100fe6b4300934a1a8210ff571906e94 (patch)
tree1e6f933c497dc8c1a61a764236b453734b01be06
parentc401d2826ee93c782280e47644af19aaa92366a1 (diff)
downloadlvm2-80c80b38100fe6b4300934a1a8210ff571906e94.tar.gz
raid: fixup kernel target version
-rw-r--r--lib/metadata/lv_manip.c2
-rw-r--r--lib/metadata/metadata-exported.h1
-rw-r--r--lib/metadata/raid_manip.c37
-rw-r--r--lib/misc/lib.h4
-rw-r--r--libdm/libdevmapper.h2
-rw-r--r--libdm/libdm-deptree.c10
-rw-r--r--tools/lvresize.c1
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");