mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
Fix PV datalign when for values starting prior to MDA area.
The dataalign value must always be aligned according to MDA area. The currect code checks if calculated value collides with MDA area but not if the value is so small that it is located before MDA starts. Unfortunatelly there can be also MDA in the end of the device. The patch adds simple check to avoid this miscalculation. Patch expects that first MDA always starts on <= pagesize boundary (this is true for all allowed label sector parameters).
This commit is contained in:
parent
610646095b
commit
5c93cdba2d
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.46 -
|
Version 2.02.46 -
|
||||||
================================
|
================================
|
||||||
|
Fix PV datalignment for values starting prior to MDA area. (2.02.45)
|
||||||
Add sparse devices: lvcreate -s --virtualoriginsize (hidden zero origin).
|
Add sparse devices: lvcreate -s --virtualoriginsize (hidden zero origin).
|
||||||
Add lvs origin_size field.
|
Add lvs origin_size field.
|
||||||
Fix linux configure --enable-debug to exclude -O2.
|
Fix linux configure --enable-debug to exclude -O2.
|
||||||
|
@ -1372,7 +1372,9 @@ static int _text_pv_write(const struct format_type *fmt, struct physical_volume
|
|||||||
dm_list_iterate_items(mda, &info->mdas) {
|
dm_list_iterate_items(mda, &info->mdas) {
|
||||||
mdac = (struct mda_context *) mda->metadata_locn;
|
mdac = (struct mda_context *) mda->metadata_locn;
|
||||||
if (pv->dev == mdac->area.dev &&
|
if (pv->dev == mdac->area.dev &&
|
||||||
(mdac->area.start <= (pv->pe_start << SECTOR_SHIFT)) &&
|
((mdac->area.start <= (pv->pe_start << SECTOR_SHIFT)) ||
|
||||||
|
(mdac->area.start <= lvm_getpagesize() &&
|
||||||
|
pv->pe_start < (lvm_getpagesize() >> SECTOR_SHIFT))) &&
|
||||||
(mdac->area.start + mdac->area.size >
|
(mdac->area.start + mdac->area.size >
|
||||||
(pv->pe_start << SECTOR_SHIFT))) {
|
(pv->pe_start << SECTOR_SHIFT))) {
|
||||||
pv->pe_start = (mdac->area.start + mdac->area.size)
|
pv->pe_start = (mdac->area.start + mdac->area.size)
|
||||||
|
@ -94,6 +94,12 @@ check_pv_field_ $dev1 pe_start 512.00K
|
|||||||
pvcreate --metadatasize 100k --dataalignment 100k $dev1
|
pvcreate --metadatasize 100k --dataalignment 100k $dev1
|
||||||
check_pv_field_ $dev1 pe_start 200.00K
|
check_pv_field_ $dev1 pe_start 200.00K
|
||||||
|
|
||||||
|
pvcreate --metadatasize 128k --dataalignment 3.5k $dev1
|
||||||
|
check_pv_field_ $dev1 pe_start 133.00K
|
||||||
|
|
||||||
|
pvcreate --metadatasize 128k --metadatacopies 2 --dataalignment 3.5k $dev1
|
||||||
|
check_pv_field_ $dev1 pe_start 133.00K
|
||||||
|
|
||||||
#COMM 'pv with LVM1 compatible data alignment can be convereted'
|
#COMM 'pv with LVM1 compatible data alignment can be convereted'
|
||||||
#compatible == LVM1_PE_ALIGN == 64k
|
#compatible == LVM1_PE_ALIGN == 64k
|
||||||
pvcreate --dataalignment 256k $dev1
|
pvcreate --dataalignment 256k $dev1
|
||||||
|
Loading…
Reference in New Issue
Block a user