mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
tests: add test for pvcreate --dataalignment --dataalignmentoffset --restorefile compatibility
Also, avoid division by zero in the pvcreate's param validation in case someone supplies "pvcreate --dataalignment 0".
This commit is contained in:
parent
05eb6a167e
commit
35721ee134
@ -124,6 +124,22 @@ vgcfgrestore -f $backupfile $vg1
|
|||||||
vgremove -f $vg1
|
vgremove -f $vg1
|
||||||
pvremove -f "$dev1"
|
pvremove -f "$dev1"
|
||||||
|
|
||||||
|
# pvcreate --restorefile should handle --dataalignment and --dataalignmentoffset
|
||||||
|
# and check it's compatible with pe_start value being restored
|
||||||
|
# X * dataalignment + dataalignmentoffset == pe_start
|
||||||
|
pvcreate --norestorefile --uuid $uuid1 --dataalignment 600k --dataalignmentoffset 32k "$dev1"
|
||||||
|
vgcreate $vg1 "$dev1"
|
||||||
|
vgcfgbackup -f $backupfile $vg1
|
||||||
|
vgremove -ff $vg1
|
||||||
|
pvremove -ff "$dev1"
|
||||||
|
# the dataalignment and dataalignmentoffset is ignored here since they're incompatible with pe_start
|
||||||
|
pvcreate --restorefile $backupfile --uuid $uuid1 --dataalignment 500k --dataalignmentoffset 10k "$dev1" 2> err
|
||||||
|
grep "incompatible with restored pe_start value" err
|
||||||
|
# 300k is multiple of 600k so this should pass
|
||||||
|
pvcreate --restorefile $backupfile --uui $uuid1 --dataalignment 300k --dataalignmentoffset 32k "$dev1" 2> err
|
||||||
|
not grep "incompatible with restored pe_start value" err
|
||||||
|
rm -f $backupfile
|
||||||
|
|
||||||
# pvcreate rejects non-existent uuid given with restorefile
|
# pvcreate rejects non-existent uuid given with restorefile
|
||||||
not pvcreate --uuid $uuid1 --restorefile $backupfile "$dev1"
|
not pvcreate --uuid $uuid1 --restorefile $backupfile "$dev1"
|
||||||
|
|
||||||
|
@ -1593,10 +1593,11 @@ int pvcreate_params_validate(struct cmd_context *cmd,
|
|||||||
|
|
||||||
if ((pp->data_alignment + pp->data_alignment_offset) &&
|
if ((pp->data_alignment + pp->data_alignment_offset) &&
|
||||||
(pp->rp.pe_start != PV_PE_START_CALC)) {
|
(pp->rp.pe_start != PV_PE_START_CALC)) {
|
||||||
if ((pp->rp.pe_start % pp->data_alignment) != pp->data_alignment_offset) {
|
if ((pp->data_alignment ? pp->rp.pe_start % pp->data_alignment : pp->rp.pe_start) != pp->data_alignment_offset) {
|
||||||
log_warn("WARNING: Ignoring data alignment %" PRIu64
|
log_warn("WARNING: Ignoring data alignment %s"
|
||||||
" incompatible with restored pe_start value %" PRIu64").",
|
" incompatible with restored pe_start value %s)",
|
||||||
pp->data_alignment + pp->data_alignment_offset, pp->rp.pe_start);
|
display_size(cmd, pp->data_alignment + pp->data_alignment_offset),
|
||||||
|
display_size(cmd, pp->rp.pe_start));
|
||||||
pp->data_alignment = 0;
|
pp->data_alignment = 0;
|
||||||
pp->data_alignment_offset = 0;
|
pp->data_alignment_offset = 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user