[dm-devel] [PATCH 04/16] Add global udev reference pointer to config

Hannes Reinecke hare at suse.de
Mon Apr 30 10:25:56 UTC 2012


Instead of using a local reference to udev we should be moving it
to the global config structure.

Signed-off-by: Hannes Reinecke <hare at suse.de>
---
 libmultipath/config.c |    5 +++++
 libmultipath/config.h |    1 +
 libmultipath/uevent.c |   12 +++---------
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/libmultipath/config.c b/libmultipath/config.c
index f99465a..75eab38 100644
--- a/libmultipath/config.c
+++ b/libmultipath/config.c
@@ -5,6 +5,7 @@
  */
 #include <stdio.h>
 #include <string.h>
+#include <libudev.h>
 
 #include "checkers.h"
 #include "memory.h"
@@ -427,6 +428,9 @@ free_config (struct config * conf)
 	if (conf->dev)
 		FREE(conf->dev);
 
+	if (conf->udev)
+		udev_unref(conf->udev);
+
 	if (conf->udev_dir)
 		FREE(conf->udev_dir);
 
@@ -491,6 +495,7 @@ load_config (char * file)
 	if (!conf->verbosity)
 		conf->verbosity = DEFAULT_VERBOSITY;
 
+	conf->udev = udev_new();
 	conf->dmrq = dm_drv_get_rq();
 	conf->dev_type = DEV_NONE;
 	conf->minio = DEFAULT_MINIO;
diff --git a/libmultipath/config.h b/libmultipath/config.h
index 6fcd45e..147eedf 100644
--- a/libmultipath/config.h
+++ b/libmultipath/config.h
@@ -109,6 +109,7 @@ struct config {
 	int reassign_maps;
 
 	char * dev;
+	struct udev * udev;
 	char * sysfs_dir;
 	char * udev_dir;
 	char * multipath_dir;
diff --git a/libmultipath/uevent.c b/libmultipath/uevent.c
index 3e4c4ec..4e31d4f 100644
--- a/libmultipath/uevent.c
+++ b/libmultipath/uevent.c
@@ -46,6 +46,8 @@
 #include "debug.h"
 #include "list.h"
 #include "uevent.h"
+#include "vector.h"
+#include "config.h"
 
 typedef int (uev_trigger)(struct uevent *, void * trigger_data);
 
@@ -375,7 +377,6 @@ exit:
 int uevent_listen(void)
 {
 	int err;
-	struct udev *udev = NULL;
 	struct udev_monitor *monitor = NULL;
 	int fd, socket_flags;
 	int need_failback = 1;
@@ -391,12 +392,7 @@ int uevent_listen(void)
 	pthread_cond_init(uev_condp, NULL);
 	pthread_cleanup_push(uevq_stop, NULL);
 
-	udev = udev_new();
-	if (!udev) {
-		condlog(2, "failed to create udev context");
-		goto out;
-	}
-	monitor = udev_monitor_new_from_netlink(udev, "udev");
+	monitor = udev_monitor_new_from_netlink(conf->udev, "udev");
 	if (!monitor) {
 		condlog(2, "failed to create udev monitor");
 		goto out;
@@ -500,8 +496,6 @@ int uevent_listen(void)
 out:
 	if (monitor)
 		udev_monitor_unref(monitor);
-	if (udev)
-		udev_unref(udev);
 	if (need_failback)
 		err = failback_listen();
 	pthread_cleanup_pop(1);
-- 
1.7.3.4




More information about the dm-devel mailing list