mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
pvcreate: fix alignment to incorporate alignment offset if PV has 0 MDAs
If zero metadata copies are used, there's no further recalculation of PV alignment that happens when adding metadata areas to the PV and which actually calculates the alignment correctly as a matter of fact. So fix this for "PV without MDA" case as well. Before this patch: [1] raw/~ # pvcreate --dataalignment 8m --dataalignmentoffset 4m --metadatacopies 1 /dev/sda Physical volume "/dev/sda" successfully created [1] raw/~ # pvs -o pv_name,pe_start PV 1st PE /dev/sda 12.00m [1] raw/~ # pvcreate --dataalignment 8m --dataalignmentoffset 4m --metadatacopies 0 /dev/sda Physical volume "/dev/sda" successfully created [1] raw/~ # pvs -o pv_name,pe_start PV 1st PE /dev/sda 8.00m After this patch: [1] raw/~ # pvcreate --dataalignment 8m --dataalignmentoffset 4m --metadatacopies 1 /dev/sda Physical volume "/dev/sda" successfully created [1] raw/~ # pvs -o pv_name,pe_start PV 1st PE /dev/sda 12.00m [1] raw/~ # pvcreate --dataalignment 8m --dataalignmentoffset 4m --metadatacopies 0 /dev/sda Physical volume "/dev/sda" successfully created [1] raw/~ # pvs -o pv_name,pe_start PV 1st PE /dev/sda 12.00m Also, remove a superfluous condition "pv->pe_start < pv->pe_align" in: if (pe_start == PV_PE_START_CALC && pv->pe_start < pv->pe_align) pv->pe_start = pv->pe_align ... This part of the condition is not reachable as with the PV_PE_START_CALC, we always have pv->pe_start set to 0 from the PV struct initialisation (...the pv->pe_start value is just being calculated).
This commit is contained in:
parent
70f57996b3
commit
303e86adc8
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.99 -
|
Version 2.02.99 -
|
||||||
===================================
|
===================================
|
||||||
|
Fix PV alignment to incorporate alignment offset if the PV has zero MDAs.
|
||||||
Allow remove/replace of RAID sub-LVs that are composed of error targets.
|
Allow remove/replace of RAID sub-LVs that are composed of error targets.
|
||||||
Make 'vgreduce --removemissing' able to handle RAID LVs with missing PVs.
|
Make 'vgreduce --removemissing' able to handle RAID LVs with missing PVs.
|
||||||
Rename lvm.conf setting 'mirror_region_size' to 'raid_region_size'.
|
Rename lvm.conf setting 'mirror_region_size' to 'raid_region_size'.
|
||||||
|
@ -1508,8 +1508,14 @@ static int _text_pv_initialise(const struct format_type *fmt,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pe_start == PV_PE_START_CALC && pv->pe_start < pv->pe_align)
|
if (pv->size < pv->pe_align + pv->pe_align_offset) {
|
||||||
pv->pe_start = pv->pe_align;
|
log_error("%s: Data alignment must not exceed device size.",
|
||||||
|
pv_dev_name(pv));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pe_start == PV_PE_START_CALC)
|
||||||
|
pv->pe_start = pv->pe_align + pv->pe_align_offset;
|
||||||
|
|
||||||
if (extent_size)
|
if (extent_size)
|
||||||
pv->pe_size = extent_size;
|
pv->pe_size = extent_size;
|
||||||
|
@ -1650,7 +1650,7 @@ struct physical_volume *pv_create(const struct cmd_context *cmd,
|
|||||||
goto bad;
|
goto bad;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pv->size < data_alignment) {
|
if (pv->size < data_alignment + data_alignment_offset) {
|
||||||
log_error("%s: Data alignment must not exceed device size.",
|
log_error("%s: Data alignment must not exceed device size.",
|
||||||
pv_dev_name(pv));
|
pv_dev_name(pv));
|
||||||
goto bad;
|
goto bad;
|
||||||
|
Loading…
Reference in New Issue
Block a user