[Ocfs2-devel] [PATCH 1/1]ocfs2: add dlm_ctxt printing for dlm debugging

wengang wang wen.gang.wang at oracle.com
Wed Jan 16 22:43:03 PST 2008


add dlm_ctxt printing for dlm debugging
cat /proc/fs/ocfs2_dlm/<domain>/ctxt shows dlm_ctxt
after adding this, what stat prints is a subset of what ctxt prints. but stat remains.

this patch is against ocfs2-1.2 svn head.

Signed-off-by: wengang wang <wen.gang.wang at oracle.com>
---
 dlmdebug.c |   64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 64 insertions(+)

Index: fs/ocfs2/dlm/dlmdebug.c
===================================================================
--- fs/ocfs2/dlm/dlmdebug.c	(revision 3078)
+++ fs/ocfs2/dlm/dlmdebug.c	(working copy)
@@ -61,6 +61,8 @@ static int dlm_parse_domain_and_lockres(
 
 static int dlm_proc_stats(char *page, char **start, off_t off,
 			  int count, int *eof, void *data);
+static int dlm_proc_ctxts(char *page, char **start, off_t off,
+			  int count, int *eof, void *data);
 
 typedef int (dlm_debug_func_t)(const char __user *data, unsigned int len);
 
@@ -120,6 +122,7 @@ static struct file_operations dlm_debug_
 #define OCFS2_DLM_PROC_PATH "fs/ocfs2_dlm"
 #define DLM_DEBUG_PROC_NAME "debug"
 #define DLM_STAT_PROC_NAME  "stat"
+#define DLM_CTXT_PROC_NAME  "ctxt"
 
 static struct proc_dir_entry *ocfs2_dlm_proc;
 
@@ -172,6 +175,61 @@ static int dlm_proc_stats(char *page, ch
 	return len;
 }
 
+static int dlm_proc_ctxts(char *page, char **start, off_t off,
+			  int count, int *eof, void *data)
+{
+	int len = 0, i;
+	struct dlm_ctxt *dlm = data;
+
+	len += sprintf(page + len, "purge=%d, num=%u, key=0x%08x, ",
+			dlm->purge_count, dlm->node_num, dlm->key);
+	len += sprintf(page + len, "joining=%u, reco.new=%u, ",
+			dlm->joining_node, dlm->reco.new_master);
+	len += sprintf(page + len, "reco.dead=%u, reco.state=%u, ",
+			dlm->reco.dead_node, dlm->reco.state);
+	len += sprintf(page + len, "local=%d, remote=%d, ",
+			atomic_read(&dlm->local_resources),
+			atomic_read(&dlm->remote_resources));
+	len += sprintf(page + len, "unknown=%d, refs=%d, ",
+			atomic_read(&dlm->dlm_refs.refcount),
+			atomic_read(&dlm->unknown_resources));
+	len += sprintf(page + len, "state=%d, joins=%u, ",
+			dlm->dlm_state, dlm->num_joins);
+
+	len += sprintf(page + len, "live=");
+	for (i = 0; i < O2NM_MAX_NODES; i++) {
+		if (test_bit(i,dlm->live_nodes_map))
+			len += sprintf(page + len,"%d ",i);
+	}
+	len += sprintf(page + len,", ");
+
+	len += sprintf(page + len, "domain=");
+	for (i = 0; i < O2NM_MAX_NODES; i++) {
+		if (test_bit(i,dlm->domain_map))
+			len += sprintf(page + len,"%d ",i);
+	}
+	len += sprintf(page + len,", ");
+
+	len += sprintf(page + len, "recovery=");
+	for (i = 0; i < O2NM_MAX_NODES; i++) {
+		if (test_bit(i,dlm->recovery_map))
+			len += sprintf(page + len,"%d ",i);
+	}
+	len += sprintf(page + len,"\n");
+
+	if (len <= off + count)
+		*eof = 1;
+	
+	*start = page + off;
+	len -= off;
+	if (len > count)
+		len = count;
+	if(len < 0)
+		len = 0;
+
+	return len;
+}
+
 void dlm_proc_add_domain(struct dlm_ctxt *dlm)
 {
 	struct proc_dir_entry *entry;
@@ -183,6 +241,11 @@ void dlm_proc_add_domain(struct dlm_ctxt
 					       dlm_proc_stats, (char *)dlm);
 		if (entry)
 			entry->owner = THIS_MODULE;
+		entry = create_proc_read_entry(DLM_CTXT_PROC_NAME,
+						S_IFREG | S_IRUGO, dlm->dlm_proc,
+						dlm_proc_ctxts, (char *)dlm);
+		if (entry)
+			entry->owner = THIS_MODULE;
 	}
 }
 
@@ -190,6 +253,7 @@ void dlm_proc_del_domain(struct dlm_ctxt
 {
 	if (dlm->dlm_proc) {
 		remove_proc_entry(DLM_STAT_PROC_NAME, dlm->dlm_proc);
+		remove_proc_entry(DLM_CTXT_PROC_NAME, dlm->dlm_proc);
 		remove_proc_entry(dlm->name, ocfs2_dlm_proc);
 	}
 }




More information about the Ocfs2-devel mailing list