rpms/dmraid/devel dmraid-1.0.0.rc15-rm_partitions.patch, NONE, 1.1 dmraid.spec, 1.90, 1.91

Hans de Goede jwrdegoede at fedoraproject.org
Thu Feb 12 13:02:44 UTC 2009


Author: jwrdegoede

Update of /cvs/extras/rpms/dmraid/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv17110

Modified Files:
	dmraid.spec 
Added Files:
	dmraid-1.0.0.rc15-rm_partitions.patch 
Log Message:
* Thu Feb 12 2009 Hans de Goede <hdegoede at redhat.com> - 1.0.0.rc15-4
- Add patch adding --rm_partitions cmdline option and functionality (#484845)


dmraid-1.0.0.rc15-rm_partitions.patch:

--- NEW FILE dmraid-1.0.0.rc15-rm_partitions.patch ---
diff -up 1.0.0.rc15/include/dmraid/lib_context.h.rmparts 1.0.0.rc15/include/dmraid/lib_context.h
--- 1.0.0.rc15/include/dmraid/lib_context.h.rmparts	2008-06-20 16:17:35.000000000 +0200
+++ 1.0.0.rc15/include/dmraid/lib_context.h	2009-02-11 14:27:36.000000000 +0100
@@ -169,6 +169,7 @@ enum action {
 	PARTCHAR = 0x20000000,
 
 #endif
+	RMPARTITIONS = 0x40000000,
 };
 
 /* Arguments allowed ? */
diff -up 1.0.0.rc15/lib/Makefile.in.rmparts 1.0.0.rc15/lib/Makefile.in
--- 1.0.0.rc15/lib/Makefile.in.rmparts	2008-06-11 15:07:04.000000000 +0200
+++ 1.0.0.rc15/lib/Makefile.in	2009-02-11 14:27:36.000000000 +0100
@@ -12,6 +12,7 @@ SOURCES=\
 	activate/activate.c \
 	activate/devmapper.c \
 	device/ata.c \
+	device/partition.c \
 	device/scan.c \
 	device/scsi.c \
 	display/display.c \
diff -up 1.0.0.rc15/lib/device/dev-io.h.rmparts 1.0.0.rc15/lib/device/dev-io.h
--- 1.0.0.rc15/lib/device/dev-io.h.rmparts	2008-06-12 12:54:32.000000000 +0200
+++ 1.0.0.rc15/lib/device/dev-io.h	2009-02-11 14:27:36.000000000 +0100
@@ -19,5 +19,6 @@
 
 int discover_devices(struct lib_context *lc, char **devnodes);
 int removable_device(struct lib_context *lc, char *dev_path);
+int remove_device_partitions(struct lib_context *lc, void *rs, int dummy);
 
 #endif
diff -up /dev/null 1.0.0.rc15/lib/device/partition.c
--- /dev/null	2009-02-11 10:38:05.405006793 +0100
+++ 1.0.0.rc15/lib/device/partition.c	2009-02-11 14:27:36.000000000 +0100
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2009  Hans de Goede <hdegoede at redhat.com>, Red Hat Inc.
+ *                     All rights reserved.
+ *
+ * See file LICENSE at the top of this source tree for license information.
+ */
+#include <linux/blkpg.h>
+#include <sys/ioctl.h>
+#include <errno.h>
+#include <fcntl.h>
+#include "internal.h"
+
+static int
+_remove_subset_partitions(struct lib_context *lc, struct raid_set *rs)
+{
+	struct raid_dev *rd;
+	struct blkpg_partition part = { 0, };
+	struct blkpg_ioctl_arg io = {
+		.op = BLKPG_DEL_PARTITION,
+		.datalen = sizeof(part),
+		.data = &part,
+	};
+
+	list_for_each_entry(rd, &rs->devs, devs) {
+		int fd = open(rd->di->path, O_RDWR);
+		if (fd < 0)
+			LOG_ERR(lc, 0, "opening %s: %s\n", rd->di->path,
+				strerror(errno));
+
+		/* There is no way to enumerate partitions */
+		for (part.pno = 1; part.pno <= 256; part.pno++) {
+			if (ioctl(fd, BLKPG, &io) < 0 && errno != ENXIO)
+				LOG_ERR(lc, 0,
+					"removing part %d from %s: %s\n",
+					part.pno, rd->di->path,
+					strerror(errno));
+		}
+	}
+	return 1;
+}
+
+/* Remove the partition block devices (ie sda1) from block devices (ie sda)
+   used in the set, so that things like hal / blkid won't try to access the
+   disks directly */
+int
+remove_device_partitions(struct lib_context *lc, void *v, int dummy)
+{
+	struct raid_set *subset, *rs = v;
+
+	/* Recursively walk down the chain of stacked RAID sets */
+	list_for_each_entry(subset, &rs->sets, list) {
+		/* Remove partitions from devices of set below this one */
+		if (!T_GROUP(rs) && !remove_device_partitions(lc, subset, 0))
+			return 0;
+	}
+
+	return _remove_subset_partitions(lc, rs);
+}
diff -up 1.0.0.rc15/lib/metadata/metadata.c.rmparts 1.0.0.rc15/lib/metadata/metadata.c
--- 1.0.0.rc15/lib/metadata/metadata.c.rmparts	2009-02-11 15:29:29.000000000 +0100
+++ 1.0.0.rc15/lib/metadata/metadata.c	2009-02-11 15:30:32.000000000 +0100
@@ -2147,6 +2147,9 @@ lib_perform(struct lib_context *lc, enum
 	if (get_metadata(lc, action, p, argv))
 		ret = p->post(lc, p->pre ? p->pre(p->arg) : p->arg);
 
+	if (ret && (RMPARTITIONS & action))
+		process_sets(lc, remove_device_partitions, 0, SETS);
+
 	if (LOCK == p->lock)
 		unlock_resource(lc, NULL);
 
diff -up 1.0.0.rc15/tools/commands.c.rmparts 1.0.0.rc15/tools/commands.c
--- 1.0.0.rc15/tools/commands.c.rmparts	2008-06-20 22:25:33.000000000 +0200
+++ 1.0.0.rc15/tools/commands.c	2009-02-11 14:27:36.000000000 +0100
@@ -38,7 +38,7 @@ static char const *short_opts = "a:hipP:
 #endif
 	"rR:s::tv"
 #endif
-	"VC:S::";
+	"VC:S::Z";
 
 #ifdef HAVE_GETOPTLONG
 static struct option long_opts[] = {
@@ -73,6 +73,7 @@ static struct option long_opts[] = {
 	{"version", no_argument, NULL, 'V'},
 	{"create", required_argument, NULL, 'C'},
 	{"spare", optional_argument, NULL, 'S'},
+	{"rm_partitions", no_argument, NULL, 'Z'},
 	{NULL, no_argument, NULL, 0}
 };
 #endif /* #ifdef HAVE_GETOPTLONG */
@@ -209,6 +210,7 @@ help(struct lib_context *lc, int arg)
 		  "\t[-f|--format FORMAT[,FORMAT...]]\n"
 		  "\t[-P|--partchar CHAR]\n"
 		  "\t[-p|--no_partitions]\n"
+		  "\t[-Z|--rm_partitions]\n"
 		  "\t[--separator SEPARATOR]\n" "\t[RAID-set...]\n", c);
 	log_print(lc, "%s\t{-h|--help}\n", c);
 	log_print(lc, "%s\t{-V/--version}\n", c);
@@ -221,7 +223,7 @@ help(struct lib_context *lc, int arg)
 		  "\t[-f|--format FORMAT[,FORMAT...]]\n"
 		  "\t[-P|--partchar CHAR]\n" "\t[-p|--no_partitions]\n"
 		  "\t[--separator SEPARATOR]\n" "\t[-t|--test]\n"
-		  "\t[RAID-set...]\n", c);
+		  "\t[-Z|--rm_partitions] [RAID-set...]\n", c);
 	log_print(lc,
 		  "%s\t{-b|--block_devices} *\n"
 		  "\t[-c|--display_columns][FIELD[,FIELD...]]...\n"
@@ -274,7 +276,7 @@ static struct actions actions[] = {
 	 UNDEF,			/* Set in check_activate() by mandatory option argument. */
 	 UNDEF,
 	 ACTIVATE | DEACTIVATE | FORMAT | HELP | IGNORELOCKING | NOPARTITIONS |
-	 SEPARATOR
+	 SEPARATOR | RMPARTITIONS
 #ifndef DMRAID_MINI
 	 | DBG | TEST | VERBOSE
 #endif
@@ -293,7 +295,8 @@ static struct actions actions[] = {
 #  endif
 	 | RAID_DEVICES | RAID_SETS,
 	 ACTIVE | INACTIVE | COLUMN | DBG | DUMP | DMERASE | GROUP | HELP |
-	 IGNORELOCKING | NOPARTITIONS | SEPARATOR | TEST | VERBOSE
+	 IGNORELOCKING | NOPARTITIONS | SEPARATOR | TEST | VERBOSE |
+	 RMPARTITIONS
 #else
 	 , UNDEF
 #endif
@@ -310,7 +313,7 @@ static struct actions actions[] = {
 	{'P',
 	 PARTCHAR,
 	 ACTIVATE | DEACTIVATE,
-	 FORMAT | HELP | IGNORELOCKING | SEPARATOR
+	 FORMAT | HELP | IGNORELOCKING | SEPARATOR | RMPARTITIONS
 #ifndef DMRAID_MINI
 	 | DBG | TEST | VERBOSE
 #endif
@@ -323,7 +326,7 @@ static struct actions actions[] = {
 	{'p',
 	 NOPARTITIONS,
 	 ACTIVATE | DEACTIVATE,
-	 FORMAT | HELP | IGNORELOCKING | SEPARATOR
+	 FORMAT | HELP | IGNORELOCKING | SEPARATOR | RMPARTITIONS
 #ifndef DMRAID_MINI
 	 | DBG | TEST | VERBOSE
 #endif
@@ -573,6 +576,15 @@ static struct actions actions[] = {
 	 check_spare_argument,
 	 LC_HOT_SPARE_SET,
 	 },
+	{'Z',
+	 RMPARTITIONS,
+	 ACTIVATE, /* We cannot undo this on DEACTIVATE ! */
+	 DBG | FORMAT | HELP | IGNORELOCKING | NOPARTITIONS | VERBOSE |
+	 SEPARATOR,
+	 ARGS,
+	 NULL,
+	 0,
+	 },
 };
 
 /*


Index: dmraid.spec
===================================================================
RCS file: /cvs/extras/rpms/dmraid/devel/dmraid.spec,v
retrieving revision 1.90
retrieving revision 1.91
diff -u -r1.90 -r1.91
--- dmraid.spec	5 Feb 2009 16:33:21 -0000	1.90
+++ dmraid.spec	12 Feb 2009 13:02:13 -0000	1.91
@@ -1,12 +1,13 @@
 Summary: Device-mapper RAID tool and library
 Name: dmraid
 Version: 1.0.0.rc15
-Release: 3%{?dist}
+Release: 4%{?dist}
 License: GPLv2+
 Group: System Environment/Base
 URL: http://people.redhat.com/heinzm/sw/dmraid
 Patch0: dmraid-1.0.0.rc15-whitespace.patch
 Patch1: dmraid-1.0.0.rc15-isw-raid10.patch
+Patch2: dmraid-1.0.0.rc15-rm_partitions.patch
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires: device-mapper-devel, libselinux-devel, libsepol-devel
 Requires: kpartx
@@ -44,6 +45,7 @@
 %setup -q -n dmraid/%{version}
 %patch0 -p1
 %patch1 -p1
+%patch2 -p1
 
 %build
 %configure --prefix=${RPM_BUILD_ROOT}/usr --sbindir=${RPM_BUILD_ROOT}/sbin --libdir=${RPM_BUILD_ROOT}/%{_libdir} --mandir=${RPM_BUILD_ROOT}/%{_mandir} --includedir=${RPM_BUILD_ROOT}/%{_includedir} --enable-debug --enable-libselinux --enable-libsepol --disable-static_link
@@ -89,6 +91,9 @@
 %attr(755,root,root) %{_libdir}/libdmraid.so.*
 
 %changelog
+* Thu Feb 12 2009 Hans de Goede <hdegoede at redhat.com> - 1.0.0.rc15-4
+- Add patch adding --rm_partitions cmdline option and functionality (#484845)
+
 * Thu Feb  5 2009 Hans de Goede <hdegoede at redhat.com> - 1.0.0.rc15-3
 - Fix mismatch between BIOS and dmraid's view of ISW raid 10 sets
 




More information about the fedora-extras-commits mailing list