[DRBD-cvs] svn commit by simon - r2581 - trunk/drbd - The attached patch adds some basic tracing to the netli

drbd-cvs at lists.linbit.com drbd-cvs at lists.linbit.com
Fri Nov 3 15:19:22 CET 2006


Author: simon
Date: 2006-11-03 15:19:21 +0100 (Fri, 03 Nov 2006)
New Revision: 2581

Modified:
   trunk/drbd/drbd_int.h
   trunk/drbd/drbd_nl.c
Log:
The attached patch adds some basic tracing to the netlink interface
using the new TRACE() mechanism and a new trace type. I'd like to add
more detailed tracing of the packets over time (probably based on
generating code from drbd_nl.h).


Modified: trunk/drbd/drbd_int.h
===================================================================
--- trunk/drbd/drbd_int.h	2006-11-03 14:04:43 UTC (rev 2580)
+++ trunk/drbd/drbd_int.h	2006-11-03 14:19:21 UTC (rev 2581)
@@ -1180,6 +1180,7 @@
 	TraceTypeResync = 0x00000008,
 	TraceTypeEE     = 0x00000010,
 	TraceTypeUnplug = 0x00000020,
+	TraceTypeNl     = 0x00000040,
 };
 
 static inline int

Modified: trunk/drbd/drbd_nl.c
===================================================================
--- trunk/drbd/drbd_nl.c	2006-11-03 14:04:43 UTC (rev 2580)
+++ trunk/drbd/drbd_nl.c	2006-11-03 14:19:21 UTC (rev 2581)
@@ -115,12 +115,52 @@
 	tags = (unsigned short*)((char*)tags + arg->member ## _len);
 #include "linux/drbd_nl.h"
 
-
 extern void drbd_init_set_defaults(drbd_dev *mdev);
 void drbd_bcast_ev_helper(drbd_dev *mdev, char* helper_name);
 void drbd_nl_send_reply(struct cn_msg *, int);
 
+char *nl_packet_name(int packet_type) {
+// Generate packet type strings
+#define PACKET(name, number, fields) \
+	[ P_ ## name ] = # name,
+#define INTEGER Argh!
+#define BIT Argh!
+#define INT64 Argh!
+#define STRING Argh!
 
+	static char *nl_tag_name[P_nl_after_last_packet] = {
+#include "linux/drbd_nl.h"
+	};
+
+	return (packet_type < sizeof(nl_tag_name)/sizeof(nl_tag_name[0])) ?
+	    nl_tag_name[packet_type] : "*Unknown*";
+}
+
+void nl_trace_packet(void *data) {
+	struct cn_msg *req = data;
+	struct drbd_nl_cfg_req *nlp = (struct drbd_nl_cfg_req*)req->data;
+
+	printk(KERN_INFO DEVICE_NAME "%d: " 
+	       "Netlink: << %s (%d) - seq: %x, ack: %x, len: %x\n",
+	       nlp->drbd_minor,
+	       nl_packet_name(nlp->packet_type),
+	       nlp->packet_type,
+	       req->seq, req->ack, req->len);
+}
+
+void nl_trace_reply(void *data) {
+	struct cn_msg *req = data;
+	struct drbd_nl_cfg_reply *nlp = (struct drbd_nl_cfg_reply*)req->data;
+
+	printk(KERN_INFO DEVICE_NAME "%d: " 
+	       "Netlink: >> %s (%d) - seq: %x, ack: %x, len: %x\n",
+	       nlp->minor,
+	       nlp->packet_type==P_nl_after_last_packet? 
+	           "Empty-Reply" : nl_packet_name(nlp->packet_type),
+	       nlp->packet_type,
+	       req->seq, req->ack, req->len);
+}
+
 int drbd_khelper(drbd_dev *mdev, char* cmd)
 {
 	char mb[12];
@@ -1508,6 +1548,8 @@
 		goto fail;
 	}
 
+	TRACE(TraceTypeNl, TraceLvlSummary, nl_trace_packet(data););
+
 	if( nlp->packet_type >= P_nl_after_last_packet ) {
 		retcode=UnknownNetLinkPacket;
 		goto fail;
@@ -1535,6 +1577,8 @@
 	cn_reply->len = sizeof(struct drbd_nl_cfg_reply) + rr;
 	cn_reply->flags = 0;
 
+	TRACE(TraceTypeNl, TraceLvlSummary, nl_trace_reply(cn_reply););
+
 	rr = cn_netlink_send(cn_reply, CN_IDX_DRBD, GFP_KERNEL);
 	if(rr && rr != -ESRCH) {
 		printk(KERN_INFO DEVICE_NAME " cn_netlink_send()=%d\n",rr);
@@ -1577,6 +1621,8 @@
 	reply->minor = mdev_to_minor(mdev);
 	reply->ret_code = NoError;
 
+	TRACE(TraceTypeNl, TraceLvlSummary, nl_trace_reply(cn_reply););
+
 	cn_netlink_send(cn_reply, CN_IDX_DRBD, GFP_KERNEL);
 }
 
@@ -1613,6 +1659,8 @@
 	reply->minor = mdev_to_minor(mdev);
 	reply->ret_code = NoError;
 
+	TRACE(TraceTypeNl, TraceLvlSummary, nl_trace_reply(cn_reply););
+
 	cn_netlink_send(cn_reply, CN_IDX_DRBD, GFP_KERNEL);
 }
 
@@ -1670,6 +1718,8 @@
 	reply->minor = ((struct drbd_nl_cfg_req *)req->data)->drbd_minor;
 	reply->ret_code = ret_code;
 
+	TRACE(TraceTypeNl, TraceLvlSummary, nl_trace_reply(cn_reply););
+
 	rr = cn_netlink_send(cn_reply, CN_IDX_DRBD, GFP_KERNEL);
 	if(rr && rr != -ESRCH) {
 		printk(KERN_INFO DEVICE_NAME " cn_netlink_send()=%d\n",rr);



More information about the drbd-cvs mailing list