1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-22 17:35:59 +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:
Milan Broz 2009-05-07 12:11:50 +00:00
parent 610646095b
commit 5c93cdba2d
3 changed files with 10 additions and 1 deletions

View File

@ -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.

View File

@ -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)

View File

@ -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