forked from pool/multipath-tools
Accepting request 31695 from Base:System
Copy from Base:System/multipath-tools based on submit request 31695 from user msmeissn OBS-URL: https://build.opensuse.org/request/show/31695 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/multipath-tools?expand=0&rev=29
This commit is contained in:
parent
2aea547e57
commit
ac47866a46
@ -1,3 +1,8 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Jan 27 16:16:12 CST 2010 - cmeng@novell.com
|
||||
|
||||
- Fix 'multipath -F' can't remove logical partitions (bnc#551827)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Oct 22 16:29:35 CEST 2009 - hare@suse.de
|
||||
|
||||
|
@ -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 @@ Authors:
|
||||
Christophe Varoqui <christophe.varoqui@free.fr>
|
||||
|
||||
%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 @@ Authors:
|
||||
%prep
|
||||
%setup -q -n multipath-tools-%{version}
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
|
||||
%build
|
||||
# This package failed when testing with -Wl,-as-needed being default.
|
||||
|
104
remove-stacked-partitions.diff
Normal file
104
remove-stacked-partitions.diff
Normal file
@ -0,0 +1,104 @@
|
||||
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);
|
Loading…
x
Reference in New Issue
Block a user