diff options
author | Alasdair Kergon <agk@redhat.com> | 2006-11-02 23:33:20 +0000 |
---|---|---|
committer | Alasdair Kergon <agk@redhat.com> | 2006-11-02 23:33:20 +0000 |
commit | 1c3c2df9e9a1fa5d6f191c4cbf0c9a2b7801cb83 (patch) | |
tree | a15e3a3dd7d4d9800606cf722a5e4961084f074f /tools | |
parent | df52a8b52a2e471069c091938d068796b4e7e116 (diff) | |
download | lvm2-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.c | 2 | ||||
-rw-r--r-- | tools/lvconvert.c | 2 | ||||
-rw-r--r-- | tools/lvcreate.c | 2 | ||||
-rw-r--r-- | tools/toollib.c | 8 | ||||
-rw-r--r-- | tools/toollib.h | 3 |
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 |