netdev
[Top] [All Lists]

Re: [PATCH] Convert ipvs to use seq_file.

To: "LinuxVirtualServer.org users mailing list." <lvs-users@xxxxxxxxxxxxxxxxxxxxxx>
Subject: Re: [PATCH] Convert ipvs to use seq_file.
From: Roberto Nibali <ratz@xxxxxxxxxxxx>
Date: Tue, 16 Sep 2003 00:56:30 +0200
Cc: "David S. Miller" <davem@xxxxxxxxxx>, netdev@xxxxxxxxxxx, wensong@xxxxxxxxxxxx
In-reply-to: <20030915143957.041689d8.shemminger@xxxxxxxx>
References: <20030915143957.041689d8.shemminger@xxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030801
Hi Stephen,

Wow, thanks for doing this!

Convert IPVS (for 2.6.0-test5) to use seq_file for the /proc interface.
Got rid of gratuitous 64 column trailing blank padding.

Looks good, but in the end it's of course Wensong's call.

P.s: how come there is no MAINTAINER listed for IPVS?

You mean something along the lines of:

--- MAINTAINERS 2003-09-08 23:43:22.000000000 +0200
+++ MAINTAINERS.lvs     2003-09-16 00:24:17.000000000 +0200
@@ -1340,6 +1340,14 @@
 L:     netdev@xxxxxxxxxxx
 S:     Maintained

+NETWORKING [IPVS]
+P:     Wensong Zhang
+M:     wensong@xxxxxxxxxxxx
+M:     lvs-users@xxxxxxxxxxxxxxxxxxxxxx
+W:     http://www.linux-vs.org/
+L:     lvs-users@xxxxxxxxxxxxxxxxxxxxxx
+S:     Maintained
+
 NFS CLIENT
 P:     Trond Myklebust
 M:     trond.myklebust@xxxxxxxxxx

@@ -615,61 +614,116 @@ ip_vs_conn_new(int proto, __u32 caddr, _
 /*
  *     /proc/net/ip_vs_conn entries
  */
-static int
-ip_vs_conn_getinfo(char *buffer, char **start, off_t offset, int length)
-{
-       off_t pos=0;
-       int idx, len=0;
-       char temp[70];
-       struct ip_vs_conn *cp;
-       struct list_head *l, *e;
+#ifdef CONFIG_PROC_FS
- pos = 128;
-       if (pos > offset) {
-               len += sprintf(buffer+len, "%-127s\n",
-                              "Pro FromIP   FPrt ToIP     TPrt DestIP   DPrt State  
     Expires");
-       }
+#define SEQ_START_TOKEN        ((void *)1)
+static void *ip_vs_conn_array(struct seq_file *seq, loff_t pos)
+{
+       struct list_head *e;
+       int idx;
+       loff_t off = 0;
+       
        for(idx = 0; idx < IP_VS_CONN_TAB_SIZE; idx++) {
-               /*
-                *      Lock is actually only need in next loop
-                *      we are called from uspace: must stop bh.
-                */
                ct_read_lock_bh(idx);
+               list_for_each(e, &ip_vs_conn_tab[idx]) {
+                       if (off == pos) {
+                               seq->private = &ip_vs_conn_tab[idx];
+                               return list_entry(e, struct ip_vs_conn, c_list);
+                       }
+                       ++off;
+               }       
+               ct_read_unlock_bh(idx);
+       }
- l = &ip_vs_conn_tab[idx];
-               for (e=l->next; e!=l; e=e->next) {
-                       cp = list_entry(e, struct ip_vs_conn, c_list);
-                       pos += 128;
-                       if (pos <= offset)
-                               continue;
-                       sprintf(temp,
-                               "%-3s %08X %04X %08X %04X %08X %04X %-11s %7lu",
+       return NULL;
+}
+
+static void *ip_vs_conn_seq_start(struct seq_file *seq, loff_t *pos)
+{
+       seq->private = NULL;
+       return *pos ? ip_vs_conn_array(seq, *pos - 1) :SEQ_START_TOKEN;

Nitpicking: s/:S/: S/

-static int
-ip_vs_stats_get_info(char *buf, char **start, off_t offset, int length)
+#ifdef CONFIG_PROC_FS
+static int ip_vs_stats_show(struct seq_file *seq, void *v)
 {
-       int len=0;
-       off_t pos=0;
-       char temp[64];
-
-       pos += 320;
-       if (pos > offset) {
-               len += sprintf(buf+len, "%-63s\n%-63s\n",
-/*                              01234567 01234567 01234567 0123456701234567 
0123456701234567 */
-                              "   Total Incoming Outgoing         Incoming         
Outgoing",
-                              "   Conns  Packets  Packets            Bytes          
  Bytes");
-
-               spin_lock_bh(&ip_vs_stats.lock);
-               sprintf(temp, "%8X %8X %8X %8X%08X %8X%08X",
-                       ip_vs_stats.conns,
-                       ip_vs_stats.inpkts,
-                       ip_vs_stats.outpkts,
-                       (__u32)(ip_vs_stats.inbytes>>32),
-                       (__u32)ip_vs_stats.inbytes,
-                       (__u32)(ip_vs_stats.outbytes>>32),
-                       (__u32)ip_vs_stats.outbytes);
-               len += sprintf(buf+len, "%-62s\n\n", temp);
-
-               len += sprintf(buf+len, "%-63s\n",
-/*                              01234567 01234567 01234567 0123456701234567 
0123456701234567 */
-                              " Conns/s   Pkts/s   Pkts/s          Bytes/s          
Bytes/s");
-               sprintf(temp, "%8X %8X %8X %16X %16X",
+
+/*               01234567 01234567 01234567 0123456701234567 0123456701234567 
*/
+       seq_puts(seq,
+                "   Total Incoming Outgoing         Incoming         
Outgoing\n");
+ seq_printf(seq, + " Conns Packets Packets Bytes Bytes\n");
+
+       spin_lock_bh(&ip_vs_stats.lock);
+       seq_printf(seq, "%8X %8X %8X %16LX %16LX\n\n", ip_vs_stats.conns,
+                  ip_vs_stats.inpkts, ip_vs_stats.outpkts,
+                  ip_vs_stats.inbytes, ip_vs_stats.outbytes);

%16LX is maybe better than %8X%08X, I agree ;)

Now we have to wait for Wensong's approval. It certainly looks good to me. I have no idea what his plans are currently as the CVS version is not synched with the current bk version of 2.6.x. Also we still seem to have non-resolved issues with the skb linearisation patches.

Best regards,
Roberto Nibali, ratz
--
echo '[q]sa[ln0=aln256%Pln256/snlbx]sb3135071790101768542287578439snlbxq'|dc


<Prev in Thread] Current Thread [Next in Thread>