cluster-devel.redhat.com archive mirror
 help / color / mirror / Atom feed
* [Cluster-devel] cluster/cmirror-kernel/src dm-clog-tfr.c dm-clog.c
@ 2008-01-14 22:46 jbrassow
  0 siblings, 0 replies; 2+ messages in thread
From: jbrassow @ 2008-01-14 22:46 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	jbrassow at sourceware.org	2008-01-14 22:46:58

Modified files:
	cmirror-kernel/src: dm-clog-tfr.c dm-clog.c 

Log message:
	- clear memory before it is written to.  (was causing mirror CTR to fail).

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-clog-tfr.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-clog.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.4&r2=1.2.2.5

--- cluster/cmirror-kernel/src/dm-clog-tfr.c	2007/11/08 22:16:53	1.1.2.3
+++ cluster/cmirror-kernel/src/dm-clog-tfr.c	2008/01/14 22:46:58	1.1.2.4
@@ -12,6 +12,8 @@
 #include "dm.h"
 #include "dm-clog-tfr.h"
 
+#include <asm/div64.h> /* Unnecessary */
+
 static uint64_t seq = 0;
 
 /*
@@ -28,6 +30,7 @@
 	struct list_head list;
 	struct completion complete;
 
+	unsigned long long start_time;
 	uint64_t seq;
 
 	int error;
@@ -120,6 +123,7 @@
  *
  * Returns: 0 on success, -EXXX on failure
  */
+static uint32_t foo[15]; /* FIXME: Pull this... Track number of sec */
 int dm_clog_consult_server(const char *uuid, int request_type,
 			   char *data, int data_size,
 			   char *rdata, int *rdata_size)
@@ -133,8 +137,9 @@
 	if (data_size > (DM_CLOG_PREALLOCED_SIZE - overhead_size)) {
 		DMINFO("Size of tfr exceeds preallocated size");
 		/* FIXME: is kmalloc sufficient if we need this much space? */
-		tfr = kmalloc(data_size + sizeof(*tfr), GFP_NOIO);
-	}
+		tfr = kzalloc(data_size + sizeof(*tfr), GFP_NOIO);
+	} else
+		memset(tfr, 0, DM_CLOG_PREALLOCED_SIZE - overhead_size);
 
 	if (!tfr)
 		return -ENOMEM;
@@ -148,7 +153,6 @@
 	 */
 	mutex_lock(&_lock);
 
-	memset(tfr, 0, data_size + sizeof(*tfr));
 	memcpy(tfr->uuid, uuid, DM_UUID_LEN);
 	tfr->seq = seq++;
 	tfr->request_type = request_type;
@@ -164,6 +168,7 @@
 	spin_lock(&recieving_list_lock);
 	list_add(&(pkg.list), &recieving_list);
 	spin_unlock(&recieving_list_lock);
+	pkg.start_time = jiffies;
 
 	r = dm_clog_sendto_server(tfr);
 
@@ -184,7 +189,20 @@
 		list_del_init(&(pkg.list));
 		spin_unlock(&recieving_list_lock);
 
+		foo[10]++;
+		DMWARN("[%u][%u][%u][%u][%u][%u] [%u]",
+		       foo[0], foo[1], foo[2], foo[3], foo[4], foo[5],
+		       foo[10]);
+
 		goto resend;
+	} else { 
+		/* FIXME: Pull time checking code - it's just for profiling */
+		pkg.start_time = (jiffies - pkg.start_time);
+		do_div(pkg.start_time, HZ);
+		if ((pkg.start_time < 0) || (pkg.start_time >= 5))
+			DMWARN("OUT-OF-BOUNDS::  pkg.start_time == %llu", pkg.start_time);
+		else
+			foo[pkg.start_time]++;
 	}
 	r = pkg.error;
 	if (r)
--- cluster/cmirror-kernel/src/dm-clog.c	2007/11/03 18:37:48	1.2.2.4
+++ cluster/cmirror-kernel/src/dm-clog.c	2008/01/14 22:46:58	1.2.2.5
@@ -654,7 +654,7 @@
 		return r;
 	}
 
-	DMINFO("dm-log-clustered (built %s %s) installed", __DATE__, __TIME__);
+	DMINFO("(built %s %s) installed", __DATE__, __TIME__);
 	return 0;
 }
 
@@ -664,7 +664,7 @@
 	dm_unregister_dirty_log_type(&_clustered_core_type);
 	dm_clog_tfr_exit();
 	mempool_destroy(flush_entry_pool);
-	DMINFO("dm-log-clustered (built %s %s) removed", __DATE__, __TIME__);
+	DMINFO("(built %s %s) removed", __DATE__, __TIME__);
 	return;
 }
 



^ permalink raw reply	[flat|nested] 2+ messages in thread
* [Cluster-devel] cluster/cmirror-kernel/src dm-clog-tfr.c dm-clog.c
@ 2008-02-08 14:21 jbrassow
  0 siblings, 0 replies; 2+ messages in thread
From: jbrassow @ 2008-02-08 14:21 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	jbrassow at sourceware.org	2008-02-08 14:21:05

Modified files:
	cmirror-kernel/src: dm-clog-tfr.c dm-clog.c 

Log message:
	- table an event so userspace can respond when a log device failure
	occurs
	- other clean-ups

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-clog-tfr.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.4&r2=1.1.2.5
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-clog.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.8&r2=1.2.2.9

--- cluster/cmirror-kernel/src/dm-clog-tfr.c	2008/01/14 22:46:58	1.1.2.4
+++ cluster/cmirror-kernel/src/dm-clog-tfr.c	2008/02/08 14:21:04	1.1.2.5
@@ -72,6 +72,7 @@
 
 static void cn_clog_callback(void *data)
 {
+	int found = 0;
 	struct cn_msg *msg = (struct cn_msg *)data;
 	struct clog_tfr *tfr = (struct clog_tfr *)(msg + 1);
 	struct recieving_pkg *pkg;
@@ -100,13 +101,16 @@
 				memcpy(pkg->data, tfr->data, tfr->data_size);
 				*(pkg->data_size) = tfr->data_size;
 			}
-
+			found = 1;
 			complete(&pkg->complete);
 			break;
 		}
 	}
 
 	spin_unlock(&recieving_list_lock);
+	if (!found)
+		DMERR("Stray request returned: %s, %llu",
+		      RQ_TYPE(tfr->request_type), tfr->seq);
 }
 
 /*
@@ -123,7 +127,6 @@
  *
  * Returns: 0 on success, -EXXX on failure
  */
-static uint32_t foo[15]; /* FIXME: Pull this... Track number of sec */
 int dm_clog_consult_server(const char *uuid, int request_type,
 			   char *data, int data_size,
 			   char *rdata, int *rdata_size)
@@ -180,29 +183,22 @@
 		goto out;
 	}
 
-	r = wait_for_completion_timeout(&(pkg.complete), 5 * HZ);
+	r = wait_for_completion_timeout(&(pkg.complete), 15 * HZ);
 	if (!r) {
-		DMWARN("Timed out waiting for cluster log server [%s]",
-		       RQ_TYPE(request_type));
-		DMWARN("Retrying request [%s]", RQ_TYPE(request_type));
+		DMWARN("Request timed out on %s:%llu - retrying",
+		       RQ_TYPE(request_type), pkg.seq);
 		spin_lock(&recieving_list_lock);
 		list_del_init(&(pkg.list));
 		spin_unlock(&recieving_list_lock);
 
-		foo[10]++;
-		DMWARN("[%u][%u][%u][%u][%u][%u] [%u]",
-		       foo[0], foo[1], foo[2], foo[3], foo[4], foo[5],
-		       foo[10]);
-
 		goto resend;
 	} else { 
 		/* FIXME: Pull time checking code - it's just for profiling */
 		pkg.start_time = (jiffies - pkg.start_time);
 		do_div(pkg.start_time, HZ);
-		if ((pkg.start_time < 0) || (pkg.start_time >= 5))
-			DMWARN("OUT-OF-BOUNDS::  pkg.start_time == %llu", pkg.start_time);
-		else
-			foo[pkg.start_time]++;
+		if (pkg.start_time > 0)
+			DMWARN("Excessive delay in request processing, %llu sec for %s",
+			       pkg.start_time, RQ_TYPE(request_type));
 	}
 	r = pkg.error;
 	if (r)
--- cluster/cmirror-kernel/src/dm-clog.c	2008/01/25 16:23:24	1.2.2.8
+++ cluster/cmirror-kernel/src/dm-clog.c	2008/02/08 14:21:04	1.2.2.9
@@ -425,16 +425,8 @@
 			goto fail;
 	}
 
-	do {
-		r = cluster_do_request(lc, lc->uuid, DM_CLOG_FLUSH,
-				       NULL, 0, NULL, NULL);
-		if (r != -EAGAIN)
-			break;
-
-		DMINFO("Flush conflicts with recovery [delaying]");
-		set_current_state(TASK_INTERRUPTIBLE);
-		schedule_timeout(HZ/4);
-	} while (1);
+	r = cluster_do_request(lc, lc->uuid, DM_CLOG_FLUSH,
+			       NULL, 0, NULL, NULL);
 
 fail:
 	/*
@@ -447,6 +439,9 @@
 		mempool_free(fe, flush_entry_pool);
 	}
 
+	if (r)
+		dm_table_event(lc->ti->table);
+
 	return r;
 }
 



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-02-08 14:21 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-14 22:46 [Cluster-devel] cluster/cmirror-kernel/src dm-clog-tfr.c dm-clog.c jbrassow
  -- strict thread matches above, loose matches on Subject: below --
2008-02-08 14:21 jbrassow

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 NNTP newsgroup(s).