summaryrefslogtreecommitdiffstats
path: root/runtime/docs/html/test4_2dtr_8c-source.html
diff options
context:
space:
mode:
authorhunt <hunt>2005-04-07 21:48:47 +0000
committerhunt <hunt>2005-04-07 21:48:47 +0000
commit655ee2825121e149a9976e562946892efb20aea1 (patch)
tree91b9b4cc46aeee50e9d789689bea0b96e11ceba1 /runtime/docs/html/test4_2dtr_8c-source.html
parent3d4bc8bea6b45893bd4b49f44df26bd602b4cba5 (diff)
downloadsystemtap-steved-655ee2825121e149a9976e562946892efb20aea1.tar.gz
systemtap-steved-655ee2825121e149a9976e562946892efb20aea1.tar.xz
systemtap-steved-655ee2825121e149a9976e562946892efb20aea1.zip
*** empty log message ***
Diffstat (limited to 'runtime/docs/html/test4_2dtr_8c-source.html')
-rw-r--r--runtime/docs/html/test4_2dtr_8c-source.html385
1 files changed, 137 insertions, 248 deletions
diff --git a/runtime/docs/html/test4_2dtr_8c-source.html b/runtime/docs/html/test4_2dtr_8c-source.html
index af19db1a..c3d65197 100644
--- a/runtime/docs/html/test4_2dtr_8c-source.html
+++ b/runtime/docs/html/test4_2dtr_8c-source.html
@@ -4,260 +4,149 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
<div class="nav">
<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000003.html">test4</a></div>
<h1>dtr.c</h1><div class="fragment"><pre class="fragment">00001 <span class="preprocessor">#define HASH_TABLE_BITS 8</span>
00002 <span class="preprocessor"></span><span class="preprocessor">#define HASH_TABLE_SIZE (1&lt;&lt;HASH_TABLE_BITS)</span>
00003 <span class="preprocessor"></span><span class="preprocessor">#define BUCKETS 16 </span><span class="comment">/* largest histogram width */</span>
-00004 <span class="preprocessor">#include &lt;linux/module.h&gt;</span>
-00005 <span class="preprocessor">#include &lt;linux/interrupt.h&gt;</span>
-00006 <span class="preprocessor">#include &lt;net/sock.h&gt;</span>
-00007 <span class="preprocessor">#include &lt;linux/netlink.h&gt;</span>
-00008
-00009 <span class="preprocessor">#include "<a class="code" href="runtime_8h.html">runtime.h</a>"</span>
-00010 <span class="preprocessor">#include "<a class="code" href="io_8c.html">io.c</a>"</span>
-00011 <span class="preprocessor">#include "<a class="code" href="map_8c.html">map.c</a>"</span>
-00012 <span class="preprocessor">#include "<a class="code" href="probes_8c.html">probes.c</a>"</span>
-00013 <span class="preprocessor">#include "<a class="code" href="stack_8c.html">stack.c</a>"</span>
-00014
-00015 MODULE_DESCRIPTION(<span class="stringliteral">"SystemTap probe: test4"</span>);
-00016 MODULE_AUTHOR(<span class="stringliteral">"Martin Hunt &lt;hunt@redhat.com&gt;"</span>);
+00004
+00005 <span class="preprocessor">#define STP_NETLINK_ONLY</span>
+00006 <span class="preprocessor"></span><span class="preprocessor">#define STP_NUM_STRINGS 1</span>
+00007 <span class="preprocessor"></span>
+00008 <span class="preprocessor">#include &lt;linux/module.h&gt;</span>
+00009 <span class="preprocessor">#include &lt;linux/interrupt.h&gt;</span>
+00010 <span class="preprocessor">#include &lt;net/sock.h&gt;</span>
+00011 <span class="preprocessor">#include &lt;linux/netlink.h&gt;</span>
+00012
+00013 <span class="preprocessor">#include "<a class="code" href="runtime_8h.html">runtime.h</a>"</span>
+00014 <span class="preprocessor">#include "<a class="code" href="map_8c.html">map.c</a>"</span>
+00015 <span class="preprocessor">#include "<a class="code" href="probes_8c.html">probes.c</a>"</span>
+00016 <span class="preprocessor">#include "<a class="code" href="stack_8c.html">stack.c</a>"</span>
00017
-00018 <span class="keyword">static</span> <span class="keywordtype">char</span> tbuffer[2][50000];
-00019 <span class="keyword">static</span> <span class="keywordtype">void</span> stp_helper(<span class="keywordtype">void</span> *);
-00020 <span class="keyword">static</span> DECLARE_WORK(stp_work, stp_helper, tbuffer);
+00018 MODULE_DESCRIPTION(<span class="stringliteral">"SystemTap probe: test4"</span>);
+00019 MODULE_AUTHOR(<span class="stringliteral">"Martin Hunt &lt;hunt@redhat.com&gt;"</span>);
+00020
00021
-00022 <a class="code" href="structmap__root.html">MAP</a> opens, reads, writes, traces;
-00023 <span class="keyword">static</span> <span class="keywordtype">int</span> bufcount = 0;
-00024
-00025 <span class="comment">/* netlink control channel */</span>
-00026 <span class="keyword">static</span> <span class="keyword">struct </span>sock *control;
-00027 <span class="keyword">static</span> <span class="keywordtype">int</span> seq = 0;
-00028
-00029 <span class="keywordtype">int</span> pid;
-00030 <span class="comment">/*</span>
-00031 <span class="comment"> * send_reply - send reply to userspace over netlink control channel</span>
-00032 <span class="comment"> */</span>
-00033 <span class="keyword">static</span> <span class="keywordtype">int</span> send_reply(<span class="keywordtype">int</span> type, <span class="keywordtype">void</span> *reply, <span class="keywordtype">int</span> len, <span class="keywordtype">int</span> pid)
-00034 {
-00035 <span class="keyword">struct </span>sk_buff *skb;
-00036 <span class="keyword">struct </span>nlmsghdr *nlh;
-00037 <span class="keywordtype">void</span> *data;
-00038 <span class="keywordtype">int</span> size;
-00039 <span class="keywordtype">int</span> err;
-00040
-00041 size = NLMSG_SPACE(len);
-00042 skb = alloc_skb(size, GFP_KERNEL);
-00043 <span class="keywordflow">if</span> (!skb)
-00044 return -1;
-00045 nlh = NLMSG_PUT(skb, pid, seq++, type, size - sizeof(*nlh));
-00046 nlh-&gt;nlmsg_flags = 0;
-00047 data = NLMSG_DATA(nlh);
-00048 memcpy(data, reply, len);
-00049 err = netlink_unicast(control, skb, pid, MSG_DONTWAIT);
-00050
-00051 return 0;
-00052
-00053 nlmsg_failure:
-00054 if (skb)
-00055 kfree_skb(skb);
-00056
-00057 return -1;
-00058 }
+00022 <a class="code" href="group__maps.html#ga1">MAP</a> opens, reads, writes, traces;
+00023
+00024 asmlinkage <span class="keywordtype">long</span> inst_sys_open (<span class="keyword">const</span> <span class="keywordtype">char</span> __user * filename, <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> mode)
+00025 {
+00026 <a class="code" href="group__maps.html#ga12">_stp_map_key_str</a> (opens, current-&gt;comm);
+00027 <a class="code" href="group__maps.html#ga17">_stp_map_add_int64</a> (opens, 1);
+00028 jprobe_return();
+00029 <span class="keywordflow">return</span> 0;
+00030 }
+00031
+00032 asmlinkage ssize_t inst_sys_read (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fd, <span class="keywordtype">char</span> __user * buf, size_t count)
+00033 {
+00034 <a class="code" href="group__maps.html#ga12">_stp_map_key_str</a> (reads, current-&gt;comm);
+00035 <a class="code" href="group__maps.html#ga24">_stp_map_stat_add</a> (reads, count);
+00036 jprobe_return();
+00037 <span class="keywordflow">return</span> 0;
+00038 }
+00039
+00040 asmlinkage ssize_t inst_sys_write (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fd, <span class="keyword">const</span> <span class="keywordtype">char</span> __user * buf, size_t count)
+00041 {
+00042 <a class="code" href="group__maps.html#ga12">_stp_map_key_str</a> (writes, current-&gt;comm);
+00043 <a class="code" href="group__maps.html#ga24">_stp_map_stat_add</a> (writes, count);
+00044 jprobe_return();
+00045 <span class="keywordflow">return</span> 0;
+00046 }
+00047
+00048 <span class="keywordtype">int</span> inst_show_cpuinfo(<span class="keyword">struct</span> seq_file *m, <span class="keywordtype">void</span> *v)
+00049 {
+00050 String str = <a class="code" href="group__string.html#ga2">_stp_string_init</a> (0);
+00051 <a class="code" href="group__stack.html#ga6">_stp_stack_print</a> (0,0);
+00052 <a class="code" href="group__stack.html#ga6">_stp_stack_print</a> (1,0);
+00053 <a class="code" href="group__lists.html#ga6">_stp_list_add</a> (traces, <a class="code" href="group__stack.html#ga7">_stp_stack_sprint</a>(str, 0, 0));
+00054
+00055 jprobe_return();
+00056 <span class="keywordflow">return</span> 0;
+00057 }
+00058
00059
-00060 static <span class="keywordtype">char</span> pbuff[1024];
-00061
-00062 <span class="keywordtype">void</span> nlog (const <span class="keywordtype">char</span> *fmt, ...)
-00063 {
-00064 <span class="keywordtype">int</span> len;
-00065 va_list args;
-00066 va_start(args, fmt);
-00067 len = vscnprintf (pbuff, <span class="keyword">sizeof</span>(pbuff), fmt, args) + 1;
-00068 va_end(args);
-00069 send_reply (42, pbuff, len, pid);
-00070 }
-00071
-00072 <span class="comment">/*</span>
-00073 <span class="comment"> * msg_rcv_skb - dispatch userspace requests from netlink control channel</span>
-00074 <span class="comment"> */</span>
-00075 <span class="keyword">static</span> <span class="keywordtype">void</span> msg_rcv_skb(<span class="keyword">struct</span> sk_buff *skb)
-00076 {
-00077 <span class="keyword">struct </span>nlmsghdr *nlh = NULL;
-00078 <span class="keywordtype">int</span> flags;
-00079 <span class="keywordtype">int</span> nlmsglen, skblen;
-00080 <span class="keywordtype">void</span> *data;
-00081
-00082 skblen = skb-&gt;len;
-00083 <span class="comment">// dlog ("skblen = %d %d\n", skblen, sizeof(*nlh));</span>
-00084 <span class="keywordflow">if</span> (skblen &lt; <span class="keyword">sizeof</span> (*nlh))
-00085 return;
-00086
-00087 nlh = (struct nlmsghdr *)skb-&gt;data;
-00088 nlmsglen = nlh-&gt;nlmsg_len;
-00089
-00090 <span class="comment">// dlog ("nlmsghlen=%d\n", nlmsglen);</span>
-00091 if (nlmsglen &lt; sizeof(*nlh) || skblen &lt; nlmsglen)
-00092 return;
-00093
-00094 pid = nlh-&gt;nlmsg_pid;
-00095 flags = nlh-&gt;nlmsg_flags;
-00096
-00097 <span class="comment">// dlog ("pid=%d flags=%x %x %x %x\n", pid, flags, NLM_F_REQUEST, MSG_TRUNC, NLM_F_ACK);</span>
-00098 if (pid &lt;= 0 || !(flags &amp; NLM_F_REQUEST)) {
-00099 netlink_ack(skb, nlh, -EINVAL);
-00100 <span class="keywordflow">return</span>;
-00101 }
-00102
-00103 <span class="keywordflow">if</span> (flags &amp; MSG_TRUNC) {
-00104 netlink_ack(skb, nlh, -ECOMM);
-00105 <span class="keywordflow">return</span>;
-00106 }
-00107
-00108 data = NLMSG_DATA(nlh);
-00109
-00110 <span class="comment">// dlog ("NETLINK: Got message \"%s\" of type %d from pid %d\n", data, nlh-&gt;nlmsg_type,pid);</span>
-00111
-00112 <span class="keywordflow">if</span> (flags &amp; NLM_F_ACK)
-00113 netlink_ack(skb, nlh, 0);
-00114
-00115 send_reply (42, "Howdy Partner", 14, pid);
-00116 }
-00117
-00118 static <span class="keywordtype">void</span> msg_rcv(struct sock *sk, <span class="keywordtype">int</span> len)
-00119 {
-00120 <span class="keyword">struct </span>sk_buff *skb;
-00121 <a class="code" href="group__io.html#ga0">dlog</a> (<span class="stringliteral">"netlink message received\n"</span>);
-00122 <span class="keywordflow">while</span> ((skb = skb_dequeue(&amp;sk-&gt;sk_receive_queue))) {
-00123 msg_rcv_skb(skb);
-00124 kfree_skb(skb);
-00125 }
-00126 }
-00127
-00128 <span class="keyword">static</span> <span class="keywordtype">void</span> stp_helper (<span class="keywordtype">void</span> *data)
-00129 {
-00130 <a class="code" href="group__io.html#ga0">dlog</a> (<span class="stringliteral">"HELPER\n"</span>);
-00131 }
-00132
-00133 asmlinkage <span class="keywordtype">long</span> inst_sys_open (<span class="keyword">const</span> <span class="keywordtype">char</span> __user * filename, <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> mode)
-00134 {
-00135 <a class="code" href="group__maps.html#ga12">_stp_map_key_str</a> (opens, current-&gt;comm);
-00136 <a class="code" href="group__maps.html#ga17">_stp_map_add_int64</a> (opens, 1);
-00137 jprobe_return();
-00138 <span class="keywordflow">return</span> 0;
-00139 }
-00140
-00141 asmlinkage ssize_t inst_sys_read (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fd, <span class="keywordtype">char</span> __user * buf, size_t count)
-00142 {
-00143 <a class="code" href="group__maps.html#ga12">_stp_map_key_str</a> (reads, current-&gt;comm);
-00144 <a class="code" href="group__maps.html#ga23">_stp_map_stat_add</a> (reads, count);
-00145 jprobe_return();
-00146 <span class="keywordflow">return</span> 0;
-00147 }
-00148
-00149 asmlinkage ssize_t inst_sys_write (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fd, <span class="keyword">const</span> <span class="keywordtype">char</span> __user * buf, size_t count)
-00150 {
-00151 <a class="code" href="group__maps.html#ga12">_stp_map_key_str</a> (writes, current-&gt;comm);
-00152 <a class="code" href="group__maps.html#ga23">_stp_map_stat_add</a> (writes, count);
-00153 jprobe_return();
-00154 <span class="keywordflow">return</span> 0;
-00155 }
-00156
-00157 <span class="keywordtype">int</span> inst_show_cpuinfo(<span class="keyword">struct</span> seq_file *m, <span class="keywordtype">void</span> *v)
-00158 {
-00159 <a class="code" href="group__stack.html#ga6">_stp_stack_print</a> (0,0);
-00160 <a class="code" href="group__stack.html#ga6">_stp_stack_print</a> (1,0);
-00161
-00162 <a class="code" href="group__scbuf.html#ga4">_stp_scbuf_clear</a>();
-00163 <a class="code" href="group__lists.html#ga5">_stp_list_add</a> (traces, _stp_stack_sprint(0,0));
-00164 <span class="keywordflow">if</span> (bufcount++ == 0)
-00165 schedule_work (&amp;stp_work);
-00166
-00167 jprobe_return();
-00168 return 0;
-00169 }
-00170
-00171
-00172 static struct jprobe dtr_probes[] = {
-00173 {
-00174 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_open"</span>,
-00175 .entry = (kprobe_opcode_t *) inst_sys_open
-00176 },
-00177 {
-00178 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_read"</span>,
-00179 .entry = (kprobe_opcode_t *) inst_sys_read
-00180 },
-00181 {
-00182 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_write"</span>,
-00183 .entry = (kprobe_opcode_t *) inst_sys_write
-00184 },
-00185 {
-00186 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"show_cpuinfo"</span>,
-00187 .entry = (kprobe_opcode_t *) inst_show_cpuinfo,
-00188 },
-00189 };
-00190
-00191 <span class="preprocessor">#define MAX_DTR_ROUTINE (sizeof(dtr_probes)/sizeof(struct jprobe))</span>
-00192 <span class="preprocessor"></span>
-00193 <span class="keyword">static</span> <span class="keywordtype">int</span> init_dtr(<span class="keywordtype">void</span>)
-00194 {
-00195 <span class="keywordtype">int</span> ret;
-00196
-00197 control = netlink_kernel_create(31, msg_rcv);
-00198 <span class="keywordflow">if</span> (!control) {
-00199 <a class="code" href="group__io.html#ga0">dlog</a> (<span class="stringliteral">"Couldn't create netlink channel\n"</span>);
-00200 <span class="keywordflow">return</span> -1;
-00201 }
-00202
-00203 opens = <a class="code" href="group__maps.html#ga2">_stp_map_new</a> (1000, INT64);
-00204 reads = <a class="code" href="group__maps.html#ga2">_stp_map_new</a> (1000, STAT);
-00205 writes = <a class="code" href="group__maps.html#ga2">_stp_map_new</a> (1000, STAT);
-00206 traces = <a class="code" href="group__lists.html#ga0">_stp_list_new</a> (1000, STRING);
-00207
-00208 ret = <a class="code" href="probes_8c.html#a2">_stp_register_jprobes</a> (dtr_probes, MAX_DTR_ROUTINE);
-00209
-00210 <a class="code" href="group__io.html#ga0">dlog</a>(<span class="stringliteral">"instrumentation is enabled...\n"</span>);
-00211 <span class="keywordflow">return</span> ret;
-00212
-00213 }
-00214
-00215 <span class="keyword">static</span> <span class="keywordtype">void</span> cleanup_dtr(<span class="keywordtype">void</span>)
-00216 {
-00217 <span class="keyword">struct </span><a class="code" href="structmap__node__stat.html">map_node_stat</a> *st;
-00218 <span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *ptr;
-00219 <span class="keyword">struct </span><a class="code" href="structmap__node__str.html">map_node_str</a> *sptr;
-00220
-00221 <a class="code" href="probes_8c.html#a1">_stp_unregister_jprobes</a> (dtr_probes, MAX_DTR_ROUTINE);
-00222
-00223 <a class="code" href="group__maps.html#ga31">foreach</a> (traces, sptr)
-00224 nlog ("trace: %s\n", sptr-&gt;str);
-00225
-00226 foreach (opens, ptr)
-00227 nlog ("opens[%s] = %lld\n", key1str(ptr), ptr-&gt;val);
-00228 nlog ("\n");
-00229
-00230 foreach (reads, st)
-00231 nlog ("reads[%s] = [count=%lld sum=%lld min=%lld max=%lld]\n", key1str(st),
-00232 st-&gt;stats.count, st-&gt;stats.sum, st-&gt;stats.min, st-&gt;stats.max);
-00233 nlog ("\n");
-00234
-00235 foreach (writes, st)
-00236 nlog ("writes[%s] = [count=%lld sum=%lld min=%lld max=%lld]\n", key1str(st),
-00237 st-&gt;stats.count, st-&gt;stats.sum, st-&gt;stats.min, st-&gt;stats.max);
-00238 nlog ("\n");
-00239
-00240 _stp_map_del (opens);
-00241 _stp_map_del (reads);
-00242 _stp_map_del (writes);
-00243
-00244 if (control)
-00245 sock_release(control-&gt;sk_socket);
-00246
-00247 dlog("EXIT\n");
-00248 }
-00249
-00250 module_init(init_dtr);
-00251 module_exit(cleanup_dtr);
-00252 MODULE_LICENSE("GPL");
-00253
+00060 <span class="keyword">static</span> <span class="keyword">struct </span>jprobe dtr_probes[] = {
+00061 {
+00062 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_open"</span>,
+00063 .entry = (kprobe_opcode_t *) inst_sys_open
+00064 },
+00065 {
+00066 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_read"</span>,
+00067 .entry = (kprobe_opcode_t *) inst_sys_read
+00068 },
+00069 {
+00070 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_write"</span>,
+00071 .entry = (kprobe_opcode_t *) inst_sys_write
+00072 },
+00073 {
+00074 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"show_cpuinfo"</span>,
+00075 .entry = (kprobe_opcode_t *) inst_show_cpuinfo,
+00076 },
+00077 };
+00078
+00079 <span class="preprocessor">#define MAX_DTR_ROUTINE (sizeof(dtr_probes)/sizeof(struct jprobe))</span>
+00080 <span class="preprocessor"></span>
+00081 <span class="keyword">static</span> <span class="keywordtype">int</span> init_dtr(<span class="keywordtype">void</span>)
+00082 {
+00083 <span class="keywordtype">int</span> ret;
+00084
+00085 <span class="keywordflow">if</span> (<a class="code" href="group__io.html#ga7">_stp_netlink_open</a>() &lt; 0)
+00086 return -1;
+00087
+00088 opens = _stp_map_new (1000, INT64);
+00089 reads = _stp_map_new (1000, STAT);
+00090 writes = _stp_map_new (1000, STAT);
+00091 traces = _stp_list_new (1000, STRING);
+00092
+00093 ret = _stp_register_jprobes (dtr_probes, MAX_DTR_ROUTINE);
+00094
+00095 _stp_log("instrumentation is enabled...\n");
+00096 return ret;
+00097 }
+00098
+00099 static <span class="keywordtype">void</span> probe_exit (<span class="keywordtype">void</span>)
+00100 {
+00101 <span class="keyword">struct </span>map_node_stat *st;
+00102 <span class="keyword">struct </span>map_node_int64 *ptr;
+00103 <span class="keyword">struct </span>map_node_str *sptr;
+00104
+00105 <a class="code" href="probes_8c.html#a2">_stp_unregister_jprobes</a> (dtr_probes, MAX_DTR_ROUTINE);
+00106
+00107 <a class="code" href="group__maps.html#ga32">foreach</a> (traces, sptr) {
+00108 <a class="code" href="group__print.html#ga3">_stp_printf</a> (<span class="stringliteral">"trace: %s\n"</span>, sptr-&gt;str);
+00109 <a class="code" href="group__print.html#ga2">_stp_print_flush</a> ();
+00110 }
+00111
+00112 <a class="code" href="group__maps.html#ga32">foreach</a> (opens, ptr) {
+00113 <a class="code" href="group__print.html#ga3">_stp_printf</a> (<span class="stringliteral">"opens[%s] = %lld\n"</span>, <a class="code" href="group__maps.html#ga25">key1str</a>(ptr), ptr-&gt;val);
+00114 <a class="code" href="group__print.html#ga2">_stp_print_flush</a> ();
+00115 }
+00116
+00117 <a class="code" href="group__maps.html#ga32">foreach</a> (reads, st) {
+00118 <a class="code" href="group__print.html#ga3">_stp_printf</a> (<span class="stringliteral">"reads[%s] = [count=%lld sum=%lld min=%lld max=%lld]\n"</span>, <a class="code" href="group__maps.html#ga25">key1str</a>(st),
+00119 st-&gt;stats.count, st-&gt;stats.sum, st-&gt;stats.min, st-&gt;stats.max);
+00120 <a class="code" href="group__print.html#ga2">_stp_print_flush</a> ();
+00121 }
+00122
+00123 <a class="code" href="group__maps.html#ga32">foreach</a> (writes, st) {
+00124 <a class="code" href="group__print.html#ga3">_stp_printf</a> (<span class="stringliteral">"writes[%s] = [count=%lld sum=%lld min=%lld max=%lld]\n"</span>, <a class="code" href="group__maps.html#ga25">key1str</a>(st),
+00125 st-&gt;stats.count, st-&gt;stats.sum, st-&gt;stats.min, st-&gt;stats.max);
+00126 <a class="code" href="group__print.html#ga2">_stp_print_flush</a>();
+00127 }
+00128
+00129 <a class="code" href="group__maps.html#ga7">_stp_map_del</a> (opens);
+00130 <a class="code" href="group__maps.html#ga7">_stp_map_del</a> (reads);
+00131 <a class="code" href="group__maps.html#ga7">_stp_map_del</a> (writes);
+00132 }
+00133
+00134 <span class="keyword">static</span> <span class="keywordtype">void</span> cleanup_dtr(<span class="keywordtype">void</span>)
+00135 {
+00136 <a class="code" href="group__io.html#ga8">_stp_netlink_close</a>();
+00137 }
+00138
+00139 module_init(init_dtr);
+00140 module_exit(cleanup_dtr);
+00141 MODULE_LICENSE(<span class="stringliteral">"GPL"</span>);
+00142
</pre></div></body></html>