All of lore.kernel.org
 help / color / mirror / Atom feed
From: heinzm@sourceware.org
To: dm-cvs@sourceware.org, dm-devel@redhat.com
Subject: dmraid include/dmraid/lib_context.h lib/activa ...
Date: 18 Mar 2010 13:10:45 -0000	[thread overview]
Message-ID: <20100318131045.3057.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/dm
Module name:	dmraid
Changes by:	heinzm@sourceware.org	2010-03-18 13:10:43

Modified files:
	include/dmraid : lib_context.h 
	lib/activate   : activate.c 
	lib/format/ataraid: isw.c jm.c 
	lib/register   : dmreg.c 
	tools          : commands.c 

Log message:
	Support --ignoremonitoring option to prohibit any dmeventd action, eg. allowing to disable monitoring in early boot with dynamic dmraid binary

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/dmraid/include/dmraid/lib_context.h.diff?cvsroot=dm&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/dmraid/lib/activate/activate.c.diff?cvsroot=dm&r1=1.6&r2=1.7
http://sourceware.org/cgi-bin/cvsweb.cgi/dmraid/lib/format/ataraid/isw.c.diff?cvsroot=dm&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/dmraid/lib/format/ataraid/jm.c.diff?cvsroot=dm&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/dmraid/lib/register/dmreg.c.diff?cvsroot=dm&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/dmraid/tools/commands.c.diff?cvsroot=dm&r1=1.6&r2=1.7

--- dmraid/include/dmraid/lib_context.h	2009/09/16 11:45:12	1.4
+++ dmraid/include/dmraid/lib_context.h	2010/03/18 13:10:42	1.5
@@ -46,7 +46,8 @@
 	LC_CREATE,
 	LC_REBUILD_SET,
 	LC_REBUILD_DISK,
-	LC_HOT_SPARE_SET,	/* Add new options below this one ! */
+	LC_HOT_SPARE_SET,
+	LC_IGNOREMONITORING,	/* Add new options below this one ! */
 	LC_OPTIONS_SIZE,	/* Must be the last enumerator. */
 };
 
@@ -65,8 +66,9 @@
 #define	OPT_VERBOSE(lc)		(lc_opt(lc, LC_VERBOSE))
 #define	OPT_PARTCHAR(lc)	(lc_opt(lc, LC_PARTCHAR))
 #define	OPT_CREATE(lc)		(lc_opt(lc, LC_CREATE))
-#define OPT_HOT_SPARE_SET(lc)	(lc_opt(lc, LC_HOT_SPARE_SET))
 #define OPT_REBUILD_DISK(lc)	(lc_opt(lc, LC_REBUILD_DISK))
+#define OPT_HOT_SPARE_SET(lc)	(lc_opt(lc, LC_HOT_SPARE_SET))
+#define OPT_IGNOREMONITORING(lc) (lc_opt(lc, LC_IGNOREMONITORING))
 
 /* Return option value. */
 #define	OPT_STR(lc, o)		(lc->options[o].arg.str)
@@ -170,6 +172,9 @@
 
 #endif
 	RMPARTITIONS = 0x40000000,
+#ifndef DMRAID_MINI
+	IGNOREMONITORING = 0x80000000,
+#endif
 };
 
 /* Arguments allowed ? */
--- dmraid/lib/activate/activate.c	2009/12/07 16:05:46	1.6
+++ dmraid/lib/activate/activate.c	2010/03/18 13:10:42	1.7
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004-2008  Heinz Mauelshagen, Red Hat GmbH.
+ * Copyright (C) 2004-2010  Heinz Mauelshagen, Red Hat GmbH.
  *                          All rights reserved.
  *
  * Copyright (C) 2007,2009   Intel Corporation. All rights reserved.
@@ -845,23 +845,17 @@
 enum dm_what { DM_ACTIVATE, DM_REGISTER };
 
 /* Register devices of the RAID set with the dmeventd. */
-#define	ALL_EVENTS 0xffffffff
+#ifdef	DMRAID_AUTOREGISTER
 static int
 dm_register_for_event(char *dev_name, char *lib_name)
 {
-#ifdef	DMRAID_AUTOREGISTER
-	dm_register_device(dev_name, lib_name);
-#endif
-	return 1;
+	return !dm_register_device(dev_name, lib_name);
 }
 
 static int
 dm_unregister_for_event(char *dev_name, char *lib_name)
 {
-#ifdef	DMRAID_AUTOREGISTER
-	dm_unregister_device(dev_name, lib_name);
-#endif
-	return 1;
+	return !dm_unregister_device(dev_name, lib_name);
 }
 
 #define LIB_NAME_LENGTH 255
@@ -870,35 +864,34 @@
 {
 	int ret = 0;
 	char lib_name[LIB_NAME_LENGTH];
+        struct dmraid_format *fmt;
 
 	if (OPT_TEST(lc))
 		return 1;
 
-        struct dmraid_format *fmt = get_format(rs);
-
-        if (fmt->name != NULL) {
-                strncpy(lib_name, "libdmraid-events-",LIB_NAME_LENGTH);
-                strncat(lib_name, fmt->name, LIB_NAME_LENGTH-strlen(fmt->name)-3);
-                strncat(lib_name, ".so", 3);
-
-                ret = f(rs->name, lib_name);
+	fmt = get_format(rs);
+	if (fmt->name) {
+		snprintf(lib_name, sizeof(lib_name), "libdmraid-events-%s.so",
+			 fmt->name);
+		ret = f(rs->name, lib_name);
         }
 
-	return ret ? 1 : 0;
+	return ret;
 }
 
 static int
-register_devices(struct lib_context *lc, struct raid_set *rs)
+register_device(struct lib_context *lc, struct raid_set *rs)
 {
 	return do_device(lc, rs, dm_register_for_event);
 }
 
 /* Unregister devices of the RAID set with the dmeventd. */
 static int
-unregister_devices(struct lib_context *lc, struct raid_set *rs)
+unregister_device(struct lib_context *lc, struct raid_set *rs)
 {
 	return do_device(lc, rs, dm_unregister_for_event);
 }
+#endif /* #ifdef	DMRAID_AUTOREGISTER */
 
 /* Reload a single set. */
 static int
@@ -940,14 +933,6 @@
 {
 	struct raid_set *r;
 
-	/* FIXME: Does it matter if the set is (in)active? */
-#if 0
-	if (!OPT_TEST(lc) && what == DM_ACTIVATE && dm_status(lc, rs)) {
-		log_print(lc, "RAID set \"%s\" already active", rs->name);
-		return 1;
-	}
-#endif
-
 	/* Recursively walk down the chain of stacked RAID sets */
 	list_for_each_entry(r, &rs->sets, list) {
 		/* Activate set below this one */
@@ -969,12 +954,16 @@
 	if (T_GROUP(rs))
 		return 1;
 
-	if (what == DM_REGISTER &&
-	    fmt->metadata_handler)
-		return register_devices(lc, rs);
+	if (what == DM_REGISTER)
+#ifdef	DMRAID_AUTOREGISTER
+		return (!OPT_IGNOREMONITORING(lc) && fmt->metadata_handler) ?
+		       register_device(lc, rs) : 1;
+#else
+		return 1;
+#endif
 
 	/* Call type handler */
-	if ((ret = (handler(rs))->f(lc, &table, rs))) {
+	if ((ret = handler(rs)->f(lc, &table, rs))) {
 		if (OPT_TEST(lc))
 			display_table(lc, rs->name, table);
 		else if ((ret = dm_create(lc, rs, table, rs->name)))
@@ -1057,9 +1046,14 @@
 	int ret = 1, status;
 	struct dmraid_format *fmt = get_format(rs);
 
-	if (what == DM_REGISTER &&
-	    fmt->metadata_handler)
-		return unregister_devices(lc, rs);
+	if (what == DM_REGISTER) {
+#ifdef	DMRAID_AUTOREGISTER
+		return (!OPT_IGNOREMONITORING(lc) && fmt->metadata_handler) ?
+			unregister_device(lc, rs) : 1;
+#else
+		return 1;
+#endif
+	}
 
 	status = dm_status(lc, rs);
 	if (OPT_TEST(lc))
--- dmraid/lib/format/ataraid/isw.c	2010/03/12 11:33:01	1.7
+++ dmraid/lib/format/ataraid/isw.c	2010/03/18 13:10:42	1.8
@@ -193,7 +193,7 @@
 	n = snprintf(str, len, f->fmt, isw->family_num, f->what, num);
 
 	/* As '->volume' could contain anything, we sanitise the name. */
-	if (n > 0)
+	if (str && n > 0)
 		mk_alphanum(lc, str, n);
 
 	return n;
--- dmraid/lib/format/ataraid/jm.c	2009/09/17 09:21:07	1.5
+++ dmraid/lib/format/ataraid/jm.c	2010/03/18 13:10:42	1.6
@@ -32,6 +32,7 @@
 
 	/* Sanitize name, make sure it's null terminated */
 	strncpy(buf, name, JM_NAME_LEN);
+	i = strlen(buf);
 	while (i && isspace(buf[i])) {
 		name[i]='\0';
 		buf[i]='\0';
--- dmraid/lib/register/dmreg.c	2010/03/02 15:27:38	1.2
+++ dmraid/lib/register/dmreg.c	2010/03/18 13:10:43	1.3
@@ -441,7 +441,7 @@
 
 	errors = _dm_raid_state(dev_name);
 	if (errors < 0)
-		return 1;
+		return 0;
 
 	if (errors) {
 		printf("ERROR: device \"%s\" \n"
--- dmraid/tools/commands.c	2010/01/12 12:21:10	1.6
+++ dmraid/tools/commands.c	2010/03/18 13:10:43	1.7
@@ -32,7 +32,7 @@
  */
 static char const *short_opts = "a:hipP:"
 #ifndef	DMRAID_MINI
-	"bc::dDEf:glxM:"
+	"bc::dDEf:gIlxM:"
 #ifdef	DMRAID_NATIVE_LOG
 	"n"
 #endif
@@ -74,6 +74,7 @@
 	{"create", required_argument, NULL, 'C'},
 	{"spare", optional_argument, NULL, 'S'},
 	{"rm_partitions", no_argument, NULL, 'Z'},
+	{"ignoremonitoring", no_argument, NULL, 'I'},
 	{NULL, no_argument, NULL, 0}
 };
 #endif /* #ifdef HAVE_GETOPTLONG */
@@ -229,8 +230,8 @@
 #ifdef	DMRAID_MINI
 	log_print(lc, "%s: Device-Mapper Software RAID tool "
 		  "[Early Boot Version]\n", c);
-	log_print(lc, "%s\t{-a|--activate} {y|n|yes|no} [-i|--ignorelocking]\n"
-		  "\t[-f|--format FORMAT[,FORMAT...]]\n"
+	log_print(lc, "%s\t{-a|--activate} {y|n|yes|no} [-i|--ignorelocking]\n" 
+		  "\t[-f|--format fORMAT[,FORMAT...]]\n"
 		  "\t[-P|--partchar CHAR]\n"
 		  "\t[-p|--no_partitions]\n"
 		  "\t[-Z|--rm_partitions]\n"
@@ -244,6 +245,7 @@
 	log_print(lc,
 		  "%s\t{-a|--activate} {y|n|yes|no} *\n"
 		  "\t[-f|--format FORMAT[,FORMAT...]]\n"
+		  "\t[-I|--ignoremonitoring]\n"
 		  "\t[-P|--partchar CHAR]\n" "\t[-p|--no_partitions]\n"
 		  "\t[--separator SEPARATOR]\n" "\t[-t|--test]\n"
 		  "\t[-Z|--rm_partitions] [RAID-set...]\n", c);
@@ -301,7 +303,7 @@
 	 ACTIVATE | DEACTIVATE | FORMAT | HELP | IGNORELOCKING | NOPARTITIONS |
 	 SEPARATOR | RMPARTITIONS
 #ifndef DMRAID_MINI
-	 | DBG | TEST | VERBOSE
+	 | DBG | TEST | VERBOSE | IGNOREMONITORING
 #endif
 	 , ARGS,
 	 check_activate,
@@ -311,15 +313,15 @@
 	/* Format option. */
 	{'f',
 	 FORMAT,
-	 ACTIVATE | DEACTIVATE
+	 ACTIVATE | DEACTIVATE | IGNORELOCKING
 #ifndef DMRAID_MINI
 #  ifdef DMRAID_NATIVE_LOG
 	 | NATIVE_LOG
 #  endif
 	 | RAID_DEVICES | RAID_SETS,
 	 ACTIVE | INACTIVE | COLUMN | DBG | DUMP | DMERASE | GROUP | HELP |
-	 IGNORELOCKING | NOPARTITIONS | SEPARATOR | TEST | VERBOSE |
-	 RMPARTITIONS
+	 NOPARTITIONS | SEPARATOR | TEST | VERBOSE | RMPARTITIONS |
+	 IGNOREMONITORING
 #else
 	 , UNDEF
 #endif
@@ -338,7 +340,7 @@
 	 ACTIVATE | DEACTIVATE,
 	 FORMAT | HELP | IGNORELOCKING | SEPARATOR | RMPARTITIONS
 #ifndef DMRAID_MINI
-	 | DBG | TEST | VERBOSE
+	 | DBG | TEST | VERBOSE | IGNOREMONITORING
 #endif
 	 , ARGS,
 	 check_part_separator,
@@ -351,7 +353,7 @@
 	 ACTIVATE | DEACTIVATE,
 	 FORMAT | HELP | IGNORELOCKING | SEPARATOR | RMPARTITIONS
 #ifndef DMRAID_MINI
-	 | DBG | TEST | VERBOSE
+	 | DBG | TEST | VERBOSE | IGNOREMONITORING
 #endif
 	 , ARGS,
 	 NULL,
@@ -608,6 +610,18 @@
 	 NULL,
 	 0,
 	 },
+#ifndef DMRAID_MINI
+	/* ignoremonitoring option. */
+	{'I',
+	 IGNOREMONITORING,
+	 ACTIVATE | DEACTIVATE,
+	 DBG | FORMAT | HELP | IGNORELOCKING | NOPARTITIONS | VERBOSE |
+	 SEPARATOR,
+	 ARGS,
+	 _lc_inc_opt,
+	 LC_IGNOREMONITORING,
+	 },
+#endif
 };
 
 /*

                 reply	other threads:[~2010-03-18 13:10 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100318131045.3057.qmail@sourceware.org \
    --to=heinzm@sourceware.org \
    --cc=dm-cvs@sourceware.org \
    --cc=dm-devel@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.