diff --git a/lvm2-2_02_52-fix-pvcreate-partition.patch b/lvm2-2_02_52-fix-pvcreate-partition.patch new file mode 100644 index 0000000..e3f42f0 --- /dev/null +++ b/lvm2-2_02_52-fix-pvcreate-partition.patch @@ -0,0 +1,76 @@ +--- LVM2.2.02.51.old/lib/device/dev-md.c 2009-08-01 19:14:52.000000000 +0200 ++++ LVM2.2.02.51/lib/device/dev-md.c 2009-08-24 14:13:39.000000000 +0200 +@@ -137,13 +137,15 @@ static int _md_sysfs_attribute_snprintf( + if (!sysfs_dir || !*sysfs_dir) + return ret; + +-check_md_major: +- if (MAJOR(dev) != md_major()) { +- if (get_primary_dev(sysfs_dir, blkdev, &dev)) +- goto check_md_major; +- return ret; ++ if (MAJOR(dev) == blkext_major()) { ++ /* lookup parent MD device from blkext partition */ ++ if (!get_primary_dev(sysfs_dir, blkdev, &dev)) ++ return ret; + } + ++ if (MAJOR(dev) != md_major()) ++ return ret; ++ + ret = dm_snprintf(path, size, "%s/dev/block/%d:%d/md/%s", sysfs_dir, + (int)MAJOR(dev), (int)MINOR(dev), attribute); + if (ret < 0) { +--- LVM2.2.02.51.old/lib/filters/filter.c 2009-07-10 00:34:02.000000000 +0200 ++++ LVM2.2.02.51/lib/filters/filter.c 2009-08-24 14:13:39.000000000 +0200 +@@ -38,6 +38,7 @@ typedef struct { + } device_info_t; + + static int _md_major = -1; ++static int _blkext_major = -1; + static int _device_mapper_major = -1; + + int md_major(void) +@@ -45,6 +46,11 @@ int md_major(void) + return _md_major; + } + ++int blkext_major(void) ++{ ++ return _blkext_major; ++} ++ + /* + * Devices are only checked for partition tables if their minor number + * is a multiple of the number corresponding to their type below +@@ -197,6 +203,10 @@ static int _scan_proc_dev(const char *pr + if (!strncmp("md", line + i, 2) && isspace(*(line + i + 2))) + _md_major = line_maj; + ++ /* Look for blkext device */ ++ if (!strncmp("blkext", line + i, 6) && isspace(*(line + i + 6))) ++ _blkext_major = line_maj; ++ + /* Look for device-mapper device */ + /* FIXME Cope with multiple majors */ + if (!strncmp("device-mapper", line + i, 13) && isspace(*(line + i + 13))) +--- LVM2.2.02.51.old/lib/filters/filter.h 2007-08-20 22:55:25.000000000 +0200 ++++ LVM2.2.02.51/lib/filters/filter.h 2009-08-24 14:13:39.000000000 +0200 +@@ -36,6 +36,7 @@ struct dev_filter *lvm_type_filter_creat + void lvm_type_filter_destroy(struct dev_filter *f); + + int md_major(void); ++int blkext_major(void); + int max_partitions(int major); + + #endif +--- LVM2.2.02.51.old/WHATS_NEW 2009-08-06 19:08:01.000000000 +0200 ++++ LVM2.2.02.51/WHATS_NEW 2009-08-24 14:14:06.000000000 +0200 +@@ -1,3 +1,7 @@ ++Version 2.02.52 - ++================================= ++ Fix pvcreate on a partition (2.02.51). ++ + Version 2.02.51 - 6th August 2009 + ================================= + Fix locking in clvmd (2.02.50). diff --git a/lvm2-2_02_52-fix-pvs-global-lock.patch b/lvm2-2_02_52-fix-pvs-global-lock.patch new file mode 100644 index 0000000..926845c --- /dev/null +++ b/lvm2-2_02_52-fix-pvs-global-lock.patch @@ -0,0 +1,20 @@ +--- LVM2.2.02.51.old/tools/toollib.c 2009-07-21 13:10:49.000000000 +0200 ++++ LVM2.2.02.51/tools/toollib.c 2009-08-24 14:15:08.000000000 +0200 +@@ -643,7 +643,7 @@ int process_each_pv(struct cmd_context * + + dm_list_init(&tags); + +- if (lock_global && !lock_vol(cmd, VG_GLOBAL, LCK_READ)) { ++ if (lock_global && !lock_vol(cmd, VG_GLOBAL, LCK_VG_READ)) { + log_error("Unable to obtain global lock."); + return ECMD_FAILED; + } +--- LVM2.2.02.51.old/WHATS_NEW 2009-08-24 14:14:58.000000000 +0200 ++++ LVM2.2.02.51/WHATS_NEW 2009-08-24 14:15:25.000000000 +0200 +@@ -1,5 +1,6 @@ + Version 2.02.52 - + ================================= ++ Fix global locking in PV reporting commands (2.02.49). + Fix pvcreate on a partition (2.02.51). + + Version 2.02.51 - 6th August 2009 diff --git a/lvm2.spec b/lvm2.spec index 19a4f17..2f354d1 100644 --- a/lvm2.spec +++ b/lvm2.spec @@ -8,7 +8,7 @@ Summary: Userland logical volume management tools Name: lvm2 Version: 2.02.51 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv2 Group: System Environment/Base URL: http://sources.redhat.com/lvm2 @@ -16,6 +16,8 @@ Source0: ftp://sources.redhat.com/pub/lvm2/LVM2.%{version}.tgz # Customise lvmconf.sh for built-in clustered locking in Fedora Patch0: cluster-locking-built-in.patch +Patch1: lvm2-2_02_52-fix-pvcreate-partition.patch +Patch2: lvm2-2_02_52-fix-pvs-global-lock.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: libselinux-devel >= 1.30.19-4, libsepol-devel @@ -41,6 +43,8 @@ or more physical volumes and creating one or more logical volumes %prep %setup -q -n LVM2.%{version} %patch0 -p1 -b .locking +%patch1 -p1 -b .partition +%patch2 -p1 -b .globallock %build %define _exec_prefix / @@ -48,7 +52,7 @@ or more physical volumes and creating one or more logical volumes %define _sbindir /sbin %define _libdir /%{_lib} -%configure --enable-lvm1_fallback --enable-fsadm --with-clvmd=corosync --with-cluster=internal --with-pool=internal --with-user= --with-group= --with-usrlibdir=/usr/%{_lib} --with-usrsbindir=/usr/sbin --with-device-uid=0 --with-device-gid=6 --with-device-mode=0660 --enable-pkgconfig --enable-applib --enable-cmdlib +%configure --enable-lvm1_fallback --enable-fsadm --with-clvmd=cman,corosync --with-cluster=internal --with-pool=internal --with-user= --with-group= --with-usrlibdir=/usr/%{_lib} --with-usrsbindir=/usr/sbin --with-device-uid=0 --with-device-gid=6 --with-device-mode=0660 --enable-pkgconfig --enable-applib --enable-cmdlib make %{?_smp_mflags} %install @@ -306,6 +310,11 @@ This package contains the device-mapper shared library, libdevmapper. %changelog +* Mon Aug 24 2009 Milan Broz - 2.02.51-3 +- Fix global locking in PV reporting commands (2.02.49). +- Fix pvcreate on a partition (2.02.51). +- Build clvmd with both cman and corosync support. + * Thu Aug 6 2009 Alasdair Kergon - 2.02.51-2 - Fix clvmd locking broken in 2.02.50-1. - Only change LV /dev symlinks on ACTIVATE not PRELOAD (so not done twice).