[lvm-devel] LVM2 ./WHATS_NEW lib/uuid/uuid.c lib/uuid/uuid ...
mbroz at sourceware.org
mbroz at sourceware.org
Thu Aug 28 18:41:51 UTC 2008
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: mbroz at sourceware.org 2008-08-28 18:41:51
Modified files:
. : WHATS_NEW
lib/uuid : uuid.c uuid.h
tools : vgconvert.c
Log message:
Fix vgconvert logical volume id metadata validation.
If volume group is downconverted to lvm1 format,
check if lvid has supported format for conversion to lv_num in lvm1.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.948&r2=1.949
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/uuid/uuid.c.diff?cvsroot=lvm2&r1=1.25&r2=1.26
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/uuid/uuid.h.diff?cvsroot=lvm2&r1=1.15&r2=1.16
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgconvert.c.diff?cvsroot=lvm2&r1=1.28&r2=1.29
--- LVM2/WHATS_NEW 2008/08/28 10:40:44 1.948
+++ LVM2/WHATS_NEW 2008/08/28 18:41:50 1.949
@@ -1,5 +1,6 @@
Version 2.02.40 -
================================
+ Fix vgconvert logical volume id metadata validation.
Fix lvmdump metadata gather option (-m) to work correctly.
Fix allocation bug in text metadata format write error path.
Fix vgcfgbackup to properly check filename if template is used.
--- LVM2/lib/uuid/uuid.c 2008/08/07 13:59:49 1.25
+++ LVM2/lib/uuid/uuid.c 2008/08/28 18:41:51 1.26
@@ -67,11 +67,29 @@
lv_num *= sizeof(_c) - 1;
if ((c = strchr(_c, lvid->id[1].uuid[i])))
lv_num += (int) (c - _c);
+ if (lv_num < 0)
+ lv_num = 0;
}
return lv_num;
}
+int lvid_in_restricted_range(union lvid *lvid)
+{
+ int i;
+
+ for (i = 0; i < ID_LEN - 3; i++)
+ if (lvid->id[1].uuid[i] != '0')
+ return 0;
+
+ for (i = ID_LEN - 3; i < ID_LEN; i++)
+ if (!isdigit(lvid->id[1].uuid[i]))
+ return 0;
+
+ return 1;
+}
+
+
int id_create(struct id *id)
{
int randomfile;
--- LVM2/lib/uuid/uuid.h 2007/08/20 20:55:27 1.15
+++ LVM2/lib/uuid/uuid.h 2008/08/28 18:41:51 1.16
@@ -34,6 +34,7 @@
int lvid_from_lvnum(union lvid *lvid, struct id *vgid, uint32_t lv_num);
int lvnum_from_lvid(union lvid *lvid);
+int lvid_in_restricted_range(union lvid *lvid);
void uuid_from_num(char *uuid, uint32_t num);
--- LVM2/tools/vgconvert.c 2008/06/24 20:10:32 1.28
+++ LVM2/tools/vgconvert.c 2008/08/28 18:41:51 1.29
@@ -81,6 +81,17 @@
return ECMD_FAILED;
}
+ /* If converting to restricted lvid, check if lvid is compatible */
+ if (!(vg->fid->fmt->features & FMT_RESTRICTED_LVIDS) &&
+ cmd->fmt->features & FMT_RESTRICTED_LVIDS)
+ list_iterate_items(lvl, &vg->lvs)
+ if (!lvid_in_restricted_range(&lvl->lv->lvid)) {
+ log_error("Logical volume %s lvid format is"
+ " incompatible with requested"
+ " metadata format.", lvl->lv->name);
+ return ECMD_FAILED;
+ }
+
/* Attempt to change any LVIDs that are too big */
if (cmd->fmt->features & FMT_RESTRICTED_LVIDS) {
list_iterate_items(lvl, &vg->lvs) {
More information about the lvm-devel
mailing list