summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorAlasdair Kergon <agk@redhat.com>2006-11-02 23:33:20 +0000
committerAlasdair Kergon <agk@redhat.com>2006-11-02 23:33:20 +0000
commit1c3c2df9e9a1fa5d6f191c4cbf0c9a2b7801cb83 (patch)
treea15e3a3dd7d4d9800606cf722a5e4961084f074f /tools
parentdf52a8b52a2e471069c091938d068796b4e7e116 (diff)
downloadlvm2-1c3c2df9e9a1fa5d6f191c4cbf0c9a2b7801cb83.tar.gz
lvm2-1c3c2df9e9a1fa5d6f191c4cbf0c9a2b7801cb83.tar.xz
lvm2-1c3c2df9e9a1fa5d6f191c4cbf0c9a2b7801cb83.zip
Fix mirror log LV writing to set all bits in whole LV.
Diffstat (limited to 'tools')
-rw-r--r--tools/lvchange.c2
-rw-r--r--tools/lvconvert.c2
-rw-r--r--tools/lvcreate.c2
-rw-r--r--tools/toollib.c8
-rw-r--r--tools/toollib.h3
5 files changed, 10 insertions, 7 deletions
diff --git a/tools/lvchange.c b/tools/lvchange.c
index 97da2459..5339a124 100644
--- a/tools/lvchange.c
+++ b/tools/lvchange.c
@@ -294,7 +294,7 @@ static int lvchange_resync(struct cmd_context *cmd,
}
log_very_verbose("Clearing log device %s", log_lv->name);
- if (!set_lv(cmd, log_lv, 0)) {
+ if (!set_lv(cmd, log_lv, (size_t) log_lv->size, 0)) {
log_error("Unable to reset sync status for %s", lv->name);
if (!deactivate_lv(cmd, log_lv))
log_error("Failed to deactivate log LV after "
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index ae6e5ad7..10bf051c 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -455,7 +455,7 @@ static int lvconvert_snapshot(struct cmd_context *cmd,
if (!lp->zero)
log_error("WARNING: \"%s\" not zeroed", lv->name);
- else if (!set_lv(cmd, lv, 0)) {
+ else if (!set_lv(cmd, lv, 0, 0)) {
log_error("Aborting. Failed to wipe snapshot "
"exception store.");
return 0;
diff --git a/tools/lvcreate.c b/tools/lvcreate.c
index 707978ff..285ceca5 100644
--- a/tools/lvcreate.c
+++ b/tools/lvcreate.c
@@ -773,7 +773,7 @@ static int _lvcreate(struct cmd_context *cmd, struct lvcreate_params *lp)
}
if ((lp->zero || lp->snapshot) && activation()) {
- if (!set_lv(cmd, lv, 0) && lp->snapshot) {
+ if (!set_lv(cmd, lv, 0, 0) && lp->snapshot) {
/* FIXME Remove the failed lv we just added */
log_error("Aborting. Failed to wipe snapshot "
"exception store. Remove new LV and retry.");
diff --git a/tools/toollib.c b/tools/toollib.c
index ee86aa1e..958f98f2 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -1188,7 +1188,8 @@ int generate_log_name_format(struct volume_group *vg __attribute((unused)),
/*
* Initialize the LV with 'value'.
*/
-int set_lv(struct cmd_context *cmd, struct logical_volume *lv, int value)
+int set_lv(struct cmd_context *cmd, struct logical_volume *lv, size_t len,
+ int value)
{
struct device *dev;
char *name;
@@ -1221,7 +1222,7 @@ int set_lv(struct cmd_context *cmd, struct logical_volume *lv, int value)
if (!dev_open_quiet(dev))
return 0;
- dev_set(dev, UINT64_C(0), (size_t) 4096, value);
+ dev_set(dev, UINT64_C(0), len ?: (size_t) 4096, value);
dev_flush(dev);
dev_close_immediate(dev);
@@ -1336,7 +1337,8 @@ struct logical_volume *create_mirror_log(struct cmd_context *cmd,
goto error;
}
- if (activation() && !set_lv(cmd, log_lv, in_sync)) {
+ if (activation() && !set_lv(cmd, log_lv, (size_t) log_lv->size,
+ in_sync ? -1 : 0)) {
log_error("Aborting. Failed to wipe mirror log. "
"Remove new LV and retry.");
goto error;
diff --git a/tools/toollib.h b/tools/toollib.h
index b670a97f..71c5cdd9 100644
--- a/tools/toollib.h
+++ b/tools/toollib.h
@@ -101,6 +101,7 @@ struct logical_volume *create_mirror_log(struct cmd_context *cmd,
const char *lv_name,
int in_sync);
-int set_lv(struct cmd_context *cmd, struct logical_volume *lv, int value);
+int set_lv(struct cmd_context *cmd, struct logical_volume *lv, size_t len,
+ int value);
#endif