[lvm-devel] [PATCHES] new patches for dmeventd

Mikulas Patocka mpatocka at redhat.com
Wed Jul 15 00:29:02 UTC 2009


Hi

These are revised patches, in the previous patch I errorneously edited 
autogenerated file.

There is another problem with "System call interrupted" messages on 
ioctls. (note that much more code is vulnerable to this and signal 
handling needs to be checked --- SA_RESTART should be used).

Mikulas
-------------- next part --------------
Don't kill the parent process if we don't fork.

This makes dmeventd undebuggable (it kills gdb) and also can cause
various other script errors when run with -d from a script or some
other program (interactive shell catches SIGTERM, so the bug is not
visible with it).

Signed-off-by: Mikulas Patocka <mpatocka at redhat.com

---
 daemons/dmeventd/dmeventd.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Index: LVM2.2.02.48/daemons/dmeventd/dmeventd.c
===================================================================
--- LVM2.2.02.48.orig/daemons/dmeventd/dmeventd.c	2009-07-14 22:15:06.000000000 +0200
+++ LVM2.2.02.48/daemons/dmeventd/dmeventd.c	2009-07-14 22:27:59.000000000 +0200
@@ -1734,7 +1734,8 @@ int main(int argc, char *argv[])
 		exit(EXIT_FIFO_FAILURE);
 
 	/* Signal parent, letting them know we are ready to go. */
-	kill(getppid(), SIGTERM);
+	if (!_debug)
+		kill(getppid(), SIGTERM);
 	syslog(LOG_NOTICE, "dmeventd ready for processing.");
 
 	while (!_exit_now) {
-------------- next part --------------
Make dmeventd work when snapshot segtype library is compiled as a module.

Signed-off-by: Mikulas Patocka <mpatocka at redhat.com

---
 daemons/dmeventd/dmeventd.c |    2 +-
 tools/.exported_symbols     |    1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

Index: LVM2.2.02.48/daemons/dmeventd/dmeventd.c
===================================================================
--- LVM2.2.02.48.orig/daemons/dmeventd/dmeventd.c	2009-07-15 01:59:15.000000000 +0200
+++ LVM2.2.02.48/daemons/dmeventd/dmeventd.c	2009-07-15 02:00:36.000000000 +0200
@@ -873,7 +873,7 @@ static struct dso_data *_load_dso(struct
 	void *dl;
 	struct dso_data *ret = NULL;
 
-	if (!(dl = dlopen(data->dso_name, RTLD_NOW))) {
+	if (!(dl = dlopen(data->dso_name, RTLD_NOW | RTLD_GLOBAL | RTLD_DEEPBIND))) {
 		const char *dlerr = dlerror();
 		syslog(LOG_ERR, "dmeventd %s dlopen failed: %s", data->dso_name,
 		       dlerr);
Index: LVM2.2.02.48/tools/.exported_symbols
===================================================================
--- LVM2.2.02.48.orig/tools/.exported_symbols	2009-07-15 02:05:59.000000000 +0200
+++ LVM2.2.02.48/tools/.exported_symbols	2009-07-15 02:06:02.000000000 +0200
@@ -5,3 +5,4 @@ lvm2_log_fn
 lvm2_exit
 find_config_tree_str
 print_log
+get_shared_library_path
-------------- next part --------------
---
 libdm/ioctl/libdm-iface.c |   25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

Index: LVM2.2.02.48/libdm/ioctl/libdm-iface.c
===================================================================
--- LVM2.2.02.48.orig/libdm/ioctl/libdm-iface.c	2009-07-15 01:46:18.000000000 +0200
+++ LVM2.2.02.48/libdm/ioctl/libdm-iface.c	2009-07-15 01:49:36.000000000 +0200
@@ -710,16 +710,21 @@ static int _dm_task_run_v1(struct dm_tas
 			goto bad;
 	} 
 #ifdef DM_IOCTLS
-	else if (ioctl(_control_fd, command, dmi) < 0) {
-		if (_log_suppress)
-			log_verbose("device-mapper: %s ioctl failed: %s", 
-				    _cmd_data_v1[dmt->type].name,
-				    strerror(errno));
-		else
-			log_error("device-mapper: %s ioctl failed: %s",
-				  _cmd_data_v1[dmt->type].name,
-				  strerror(errno));
-		goto bad;
+	else {
+		again:
+		if (ioctl(_control_fd, command, dmi) < 0) {
+			if (errno == EINTR)
+				goto again;
+			if (_log_suppress)
+				log_verbose("device-mapper: %s ioctl failed: %s",
+					    _cmd_data_v1[dmt->type].name,
+					    strerror(errno));
+			else
+				log_error("device-mapper: %s ioctl failed: %s",
+					  _cmd_data_v1[dmt->type].name,
+					  strerror(errno));
+			goto bad;
+		}
 	}
 #else /* Userspace alternative for testing */
 #endif


More information about the lvm-devel mailing list