[lvm-devel] master - pvcreate: fix ignored --dataalignment/dataalignment offset for pvcreate --restorefile
Peter Rajnoha
prajnoha at fedoraproject.org
Thu Apr 10 11:55:13 UTC 2014
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=6c79556f4f836118516a2f1a15056f81e3fc52f6
Commit: 6c79556f4f836118516a2f1a15056f81e3fc52f6
Parent: b45d2768a858cc65a6770eed4db99f8b82b6353b
Author: Peter Rajnoha <prajnoha at redhat.com>
AuthorDate: Thu Apr 10 13:43:46 2014 +0200
Committer: Peter Rajnoha <prajnoha at redhat.com>
CommitterDate: Thu Apr 10 13:43:46 2014 +0200
pvcreate: fix ignored --dataalignment/dataalignment offset for pvcreate --restorefile
There were two bugs before when using pvcreate --restorefile together
with data alignment and its offset specified:
- the --dataalignment was always ignored due to missing braces in the
code when validating the divisibility of supplied --dataalignment
argument with pe_start which we're just restoring:
if (pp->rp.pe_start % pp->data_alignment)
log_warn("WARNING: Ignoring data alignment %" PRIu64
" incompatible with --restorefile value (%"
PRIu64").", pp->data_alignment, pp->rp.pe_start);
pp->data_alignment = 0
The pp->data_alignment should be zeroed only if the pe_start is not
divisible with data_alignment.
- the check for compatibility of restored pe_start was incorrect too
since it did not properly count with the dataalignmentoffset that
could be supplied together with dataalignment
The proper formula is:
X * dataalignment + dataalignmentoffset == pe_start
So it should be:
if ((pp->rp.pe_start % pp->data_alignment) != pp->data_alignment_offset) {
...ignore supplied dataalignment and dataalignment offset...
}
---
WHATS_NEW | 1 +
tools/toollib.c | 22 +++++++++-------------
2 files changed, 10 insertions(+), 13 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index ebb0f09..5023ba2 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.106 -
====================================
+ Fix ignored --dataalignment/dataalignment offset for pvcreate --restorefile.
Fix lost information about bootloader area when using lvmetad.
Don't require --major to be specified when using -My option on kernels > 2.4.
Add configure --disable-thin_check_needs_check to support old thin_check.
diff --git a/tools/toollib.c b/tools/toollib.c
index 6b68f55..052c141 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -1580,14 +1580,6 @@ int pvcreate_params_validate(struct cmd_context *cmd,
return 0;
}
- if (pp->data_alignment && pp->rp.pe_start != PV_PE_START_CALC) {
- if (pp->rp.pe_start % pp->data_alignment)
- log_warn("WARNING: Ignoring data alignment %" PRIu64
- " incompatible with --restorefile value (%"
- PRIu64").", pp->data_alignment, pp->rp.pe_start);
- pp->data_alignment = 0;
- }
-
if (arg_sign_value(cmd, dataalignmentoffset_ARG, SIGN_NONE) == SIGN_MINUS) {
log_error("Physical volume data alignment offset may not be negative");
return 0;
@@ -1599,11 +1591,15 @@ int pvcreate_params_validate(struct cmd_context *cmd,
return 0;
}
- if (pp->data_alignment_offset && pp->rp.pe_start != PV_PE_START_CALC) {
- log_warn("WARNING: Ignoring data alignment offset %" PRIu64
- " incompatible with --restorefile value (%"
- PRIu64").", pp->data_alignment_offset, pp->rp.pe_start);
- pp->data_alignment_offset = 0;
+ if ((pp->data_alignment + pp->data_alignment_offset) &&
+ (pp->rp.pe_start != PV_PE_START_CALC)) {
+ if ((pp->rp.pe_start % pp->data_alignment) != pp->data_alignment_offset) {
+ log_warn("WARNING: Ignoring data alignment %" PRIu64
+ " incompatible with restored pe_start value %" PRIu64").",
+ pp->data_alignment + pp->data_alignment_offset, pp->rp.pe_start);
+ pp->data_alignment = 0;
+ pp->data_alignment_offset = 0;
+ }
}
if (arg_sign_value(cmd, metadatasize_ARG, SIGN_NONE) == SIGN_MINUS) {
More information about the lvm-devel
mailing list