File debug-ocfs2_hb_ctl.patch of Package ocfs2-tools

Index: ocfs2-tools/ocfs2_hb_ctl/ocfs2_hb_ctl.c
===================================================================
--- ocfs2-tools.orig/ocfs2_hb_ctl/ocfs2_hb_ctl.c
+++ ocfs2-tools/ocfs2_hb_ctl/ocfs2_hb_ctl.c
@@ -39,6 +39,7 @@
 #include <string.h>
 #include <sys/stat.h>
 #include <signal.h>
+#include <syslog.h>
 
 #include "ocfs2/ocfs2.h"
 
@@ -137,6 +138,7 @@ static errcode_t get_desc(const char *de
 		if (!region_desc->r_name || !region_desc->r_device_name)
 			err = OCFS2_ET_NO_MEMORY;
 	} else {
+		syslog(LOG_INFO, "filled heartbeat desc, err: %d\n", (int)err);
 		region_desc->r_name = NULL;
 		region_desc->r_device_name = NULL;
 		goto out_close;
@@ -157,6 +159,7 @@ static errcode_t get_desc(const char *de
 				err = OCFS2_ET_NO_MEMORY;
 		}
 	} else {
+		syslog(LOG_INFO, "filled cluster desc, err: %d\n", (int)err);
 		cluster_desc->c_stack = NULL;
 		cluster_desc->c_cluster = NULL;
 	}
@@ -202,9 +205,9 @@ static errcode_t compare_dev(const char
 
 	/* Any problem with getting the descriptor is NOT FOUND */
 	err = OCFS2_ET_FILE_NOT_FOUND;
-	if (get_desc(device))
+	if (get_desc(device)) {
 		goto out;
-
+	}
 	if (!strcmp(region_desc->r_name, hbo->uuid_str)) {
 		hbo->dev_str = device;
 		err = 0;
@@ -381,12 +384,19 @@ static errcode_t stop_heartbeat(struct h
 {
 	errcode_t err = 0;
 
-	if (!hbo->dev_str)
+	if (!hbo->dev_str) {
 		err = lookup_dev(hbo);
+		if (err)
+			syslog(LOG_INFO, "looked up device, ret: %d\n",
+					(int)err);
+	}
 	if (!err) {
 		region_desc->r_persist = 1;  /* hb_ctl is for reals */
 		region_desc->r_service = hbo->service;
 		err = o2cb_group_leave(cluster_desc, region_desc);
+		if (err)
+			syslog(LOG_INFO, "left group - err: %d\n",
+					(int)err);
 	}
 
 	return err;
@@ -536,14 +546,42 @@ static void print_usage(int err)
 	fprintf(output, "       %s -h\n", progname);
 }
 
+static int
+hack_enable_coredumps(void)
+{
+	struct rlimit rlim;
+
+	if (getrlimit(RLIMIT_CORE, &rlim) < 0) {
+		return -1;
+	}
+
+	rlim.rlim_max = RLIM_INFINITY;
+	setrlimit(RLIMIT_CORE, &rlim);
+	(void)chdir("/var/lib/openais");
+	return 0;
+}
+
+
 int main(int argc, char **argv)
 {
 	errcode_t err = 0;
 	int ret = 0;
+	int i;
 	struct hb_ctl_options hbo = {
 		.action = HB_ACTION_UNKNOWN,
 	};
 	char hbuuid[33];
+	char tmp[1024];
+
+	openlog("ocfs2_hb_ctl", LOG_CONS|LOG_NDELAY|LOG_PID, LOG_KERN);
+	sprintf(tmp, "ocfs2_hb_ctl");
+	for (i = 0; i < argc; i++) {
+		strncat(tmp, " ", sizeof(tmp)-1);
+		strncat(tmp, argv[i], sizeof(tmp)-1);
+	}
+	syslog(LOG_INFO, "%s\n", tmp);
+
+	hack_enable_coredumps();
 
 	setbuf(stdout, NULL);
 	setbuf(stderr, NULL);