[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