Hello community,
here is the log from the commit of package multipath-tools for openSUSE:Factory
checked in at Tue Feb 9 23:04:03 CET 2010.
--------
--- multipath-tools/multipath-tools.changes 2009-10-22 16:39:37.000000000 +0200
+++ /mounts/work_src_done/STABLE/multipath-tools/multipath-tools.changes 2010-01-27 09:16:28.000000000 +0100
@@ -1,0 +2,5 @@
+Wed Jan 27 16:16:12 CST 2010 - cmeng@novell.com
+
+- Fix 'multipath -F' can't remove logical partitions (bnc#551827)
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
New:
----
remove-stacked-partitions.diff
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ multipath-tools.spec ++++++
--- /var/tmp/diff_new_pack.BckSV7/_old 2010-02-09 23:03:56.000000000 +0100
+++ /var/tmp/diff_new_pack.BckSV7/_new 2010-02-09 23:03:56.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package multipath-tools (Version 0.4.8)
#
-# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -21,17 +21,18 @@
Name: multipath-tools
BuildRequires: device-mapper-devel libaio-devel readline-devel
Url: http://christophe.varoqui.free.fr/
-License: BSD 3-clause (or similar) ; GPL v2 or later ; LGPL v2.1 or later ; Public Domain, Freeware ; MIT License (or similar)
+License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ ; Public Domain, Freeware ; MIT License (or similar)
Group: System/Base
Requires: device-mapper kpartx
PreReq: %insserv_prereq %fillup_prereq coreutils grep
AutoReqProv: on
Version: 0.4.8
-Release: 44
+Release: 45
Summary: Tools to Manage Multipathed Devices with the device-mapper
Source: multipath-tools-%{version}.tar.bz2
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Patch0: %{name}-%{version}-opensuse-11.2.diff.bz2
+Patch1: remove-stacked-partitions.diff
%description
This package provides the tools to manage multipathed devices by
@@ -55,7 +56,7 @@
Christophe Varoqui
%package -n kpartx
-License: BSD 3-clause (or similar) ; GPL v2 or later ; LGPL v2.1 or later ; Public Domain, Freeware ; MIT License (or similar)
+License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ ; Public Domain, Freeware ; MIT License (or similar)
Summary: Manages partition tables on device-mapper devices
Group: System/Base
Requires: device-mapper
@@ -73,6 +74,7 @@
%prep
%setup -q -n multipath-tools-%{version}
%patch0 -p1
+%patch1 -p1
%build
# This package failed when testing with -Wl,-as-needed being default.
++++++ remove-stacked-partitions.diff ++++++
Index: multipath-tools-0.4.8/libmultipath/devmapper.c
===================================================================
--- multipath-tools-0.4.8.orig/libmultipath/devmapper.c
+++ multipath-tools-0.4.8/libmultipath/devmapper.c
@@ -912,6 +912,60 @@ bad:
return NULL;
}
+dm_get_full_uuid(char *name, char *uuid)
+{
+ struct dm_task *dmt;
+ const char *uuidtmp;
+ int r = 1;
+
+ dmt = dm_task_create(DM_DEVICE_INFO);
+ if (!dmt)
+ return 1;
+
+ if (!dm_task_set_name (dmt, name))
+ goto uuidout;
+
+ if (!dm_task_run(dmt))
+ goto uuidout;
+
+ uuidtmp = dm_task_get_uuid(dmt);
+ if (uuidtmp) {
+ strcpy(uuid, uuidtmp);
+ }
+ else
+ uuid[0] = '\0';
+
+ r = 0;
+uuidout:
+ dm_task_destroy(dmt);
+ return r;
+}
+
+/*
+ * returns:
+ * 0 : if both uuids end with same suffix which starts with UUID_PREFIX
+ * 1 : otherwise
+ */
+int
+dm_compare_uuid(const char* mapname1, const char* mapname2)
+{
+ char *p1, *p2;
+ char uuid1[WWID_SIZE], uuid2[WWID_SIZE];
+
+ if (dm_get_full_uuid(mapname1, uuid1))
+ return 1;
+
+ if (dm_get_full_uuid(mapname2, uuid2))
+ return 1;
+
+ p1 = strstr(uuid1, UUID_PREFIX);
+ p2 = strstr(uuid2, UUID_PREFIX);
+ if (p1 && p2 && !strcmp(p1, p2))
+ return 0;
+
+ return 1;
+}
+
int
dm_remove_partmaps (const char * mapname)
{
@@ -950,15 +1004,10 @@ dm_remove_partmaps (const char * mapname
(dm_type(names->name, TGT_PART) > 0) &&
/*
- * and the multipath mapname and the part mapname start
- * the same
+ * and the both uuid end with same suffix which
+ * starts with UUID_PREFIX
*/
- !strncmp(names->name, mapname, strlen(mapname)) &&
-
- /*
- * and the opencount is 0 for us to allow removal
- */
- !dm_get_opencount(names->name) &&
+ !dm_compare_uuid(names->name, mapname) &&
/*
* and we can fetch the map table from the kernel
@@ -974,6 +1023,19 @@ dm_remove_partmaps (const char * mapname
* then it's a kpartx generated partition.
* remove it.
*/
+
+ /*
+ * if the opencount is not 0, maybe some other
+ * partitons depend on it.
+ */
+ if (dm_get_opencount(names->name)) {
+ dm_remove_partmaps(names->name);
+ if (dm_get_opencount(names->name)) {
+ condlog(2, "%s: map in use", names->name);
+ goto out;
+ }
+ }
+
condlog(4, "partition map %s removed",
names->name);
dm_simplecmd_flush(DM_DEVICE_REMOVE, names->name);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org