public inbox for lvm2-cvs@sourceware.org
help / color / mirror / Atom feed
From: agk@sourceware.org
To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org
Subject: LVM2/lib/mirror mirrored.c
Date: Wed, 17 Jan 2007 15:00:00 -0000	[thread overview]
Message-ID: <20070117150057.18109.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	agk@sourceware.org	2007-01-17 15:00:57

Modified files:
	lib/mirror     : mirrored.c 

Log message:
	merge  _target_*register_events
	introduce _create_dm_event_handler()

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/mirror/mirrored.c.diff?cvsroot=lvm2&r1=1.42&r2=1.43

--- LVM2/lib/mirror/mirrored.c	2007/01/16 23:05:13	1.42
+++ LVM2/lib/mirror/mirrored.c	2007/01/17 15:00:57	1.43
@@ -368,7 +368,7 @@
 }
 
 #ifdef DMEVENTD
-static int _setup_registration(struct cmd_context *cmd, char **dso)
+static int _get_mirror_dso_path(struct cmd_context *cmd, char **dso)
 {
 	char *path;
 	const char *libpath;
@@ -388,6 +388,29 @@
 	return 1;
 }
 
+static struct dm_event_handler *_create_dm_event_handler(const char *dmname,
+							 const char *dso,
+							 enum dm_event_mask mask)
+{
+	struct dm_event_handler *dmevh;
+
+	if (!(dmevh = dm_event_handler_create()))
+		return_0;
+
+       if (dm_event_handler_set_dso(dmevh, dso))
+		goto fail;
+
+	if (dm_event_handler_set_dev_name(dmevh, dmname))
+		goto fail;
+
+	dm_event_handler_set_event_mask(dmevh, mask);
+	return dmevh;
+
+fail:
+	dm_event_handler_destroy(dmevh);
+	return NULL;
+}
+
 static int _target_registered(struct lv_segment *seg, int *pending)
 {
 	char *dso, *name;
@@ -400,21 +423,15 @@
 	vg = lv->vg;
 
 	*pending = 0;
-	if (!_setup_registration(vg->cmd, &dso)) {
-		stack;
-		return 0;
-	}
+	if (!_get_mirror_dso_path(vg->cmd, &dso))
+		return_0;
 
 	if (!(name = build_dm_name(vg->cmd->mem, vg->name, lv->name, NULL)))
 		return_0;
 
-	if (!(dmevh = dm_event_handler_create()))
+	if (!(dmevh = _create_dm_event_handler(name, dso, DM_EVENT_ALL_ERRORS)))
 		return_0;
 
-	dm_event_handler_set_dso(dmevh, dso);
-	dm_event_handler_set_dev_name(dmevh, name);
-	dm_event_handler_set_event_mask(dmevh, DM_EVENT_ALL_ERRORS);
-
 	if (dm_event_get_registered_device(dmevh, 0)) {
 		dm_event_handler_destroy(dmevh);
 		return 0;
@@ -432,79 +449,50 @@
 }
 
 /* FIXME This gets run while suspended and performs banned operations. */
-/* FIXME Merge these two functions */
-static int _target_register_events(struct cmd_context *cmd,
+static int _target_set_events(struct cmd_context *cmd,
 				   struct lv_segment *seg,
-				   int evmask)
+				   int evmask, int set)
 {
 	char *dso, *name;
 	struct logical_volume *lv;
 	struct volume_group *vg;
 	struct dm_event_handler *dmevh;
+	int r;
 
 	lv = seg->lv;
 	vg = lv->vg;
 
-	if (!_setup_registration(cmd, &dso)) {
-		stack;
-		return 0;
-	}
+	if (!_get_mirror_dso_path(cmd, &dso))
+		return_0;
 
 	if (!(name = build_dm_name(cmd->mem, vg->name, lv->name, NULL)))
 		return_0;
 
-	if (!(dmevh = dm_event_handler_create()))
+	if (!(dmevh = _create_dm_event_handler(name, dso, DM_EVENT_ALL_ERRORS)))
 		return_0;
 
-	dm_event_handler_set_dso(dmevh, dso);
-	dm_event_handler_set_dev_name(dmevh, name);
-	dm_event_handler_set_event_mask(dmevh, DM_EVENT_ALL_ERRORS);
-	if (!dm_event_register_handler(dmevh)) {
-		dm_event_handler_destroy(dmevh);
-		return_0;
-	}
+	r = set ? dm_event_register_handler(dmevh) : dm_event_unregister_handler(dmevh);
 	dm_event_handler_destroy(dmevh);
+	if (!r)
+		return_0;
 
-	log_info("Registered %s for events", name);
+	log_info("%s %s for events", set ? "Registered" : "Unregistered", name);
 
 	return 1;
 }
 
-static int _target_unregister_events(struct cmd_context *cmd,
+static int _target_register_events(struct cmd_context *cmd,
 				     struct lv_segment *seg,
-				     int evmask)
+				     int events)
 {
-	char *dso;
-	char *name;
-	struct logical_volume *lv;
-	struct volume_group *vg;
-	struct dm_event_handler *dmevh;
-
-	lv = seg->lv;
-	vg = lv->vg;
-
-	/* FIXME Remove this and use handle to avoid config file race */
-	if (!_setup_registration(cmd, &dso))
-		return_0;
-
-	if (!(name = build_dm_name(cmd->mem, vg->name, lv->name, NULL)))
-		return_0;
-
-	if (!(dmevh = dm_event_handler_create()))
-		return_0;
-
-	dm_event_handler_set_dso(dmevh, dso);
-	dm_event_handler_set_dev_name(dmevh, name);
-	dm_event_handler_set_event_mask(dmevh, DM_EVENT_ALL_ERRORS);
-	if (!dm_event_unregister_handler(dmevh)) {
-		dm_event_handler_destroy(dmevh);
-		return_0;
-	}
-	dm_event_handler_destroy(dmevh);
-
-	log_info("Unregistered %s for events", name);
+	return _target_set_events(cmd, seg, events, 1);
+}
 
-	return 1;
+static int _target_unregister_events(struct cmd_context *cmd,
+				     struct lv_segment *seg,
+				     int events)
+{
+	return _target_set_events(cmd, seg, events, 0);
 }
 
 #endif /* DMEVENTD */


             reply	other threads:[~2007-01-17 15:00 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-17 15:00 agk [this message]
  -- strict thread matches above, loose matches on Subject: below --
2011-01-05 12:27 zkabelac
2010-08-04 15:55 mornfall
2010-07-21 15:21 jbrassow
2008-04-10 18:53 agk
2007-01-16 23:05 agk
2005-12-21 19:45 agk
2005-12-19 22:36 agk
2005-12-13 15:57 agk
2005-12-13 13:32 agk

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=20070117150057.18109.qmail@sourceware.org \
    --to=agk@sourceware.org \
    --cc=lvm-devel@redhat.com \
    --cc=lvm2-cvs@sourceware.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).