mib: add net to NET_ADD_STATS_BH
authorPavel Emelyanov <xemul@openvz.org>
Thu, 17 Jul 2008 03:32:25 +0000 (20:32 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 17 Jul 2008 03:32:25 +0000 (20:32 -0700)
This one is tricky.

The thing is that this macro is only used when killing tw buckets,
but since this killer is promiscuous wrt to which net each particular
tw belongs to, I have to use it only when NET_NS is off. When the net
namespaces are on, I use the INET_INC_STATS_BH for each bucket.

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/ip.h
net/ipv4/inet_timewait_sock.c

index 79d13192ecc8d4042e4fa67c9424baf1331f3d06..a8275b1338d70b13015febb4251521119fc16e3c 100644 (file)
@@ -164,7 +164,7 @@ DECLARE_SNMP_STAT(struct linux_mib, net_statistics);
 #define NET_INC_STATS(net, field)      do { (void)net; SNMP_INC_STATS(net_statistics, field); } while (0)
 #define NET_INC_STATS_BH(net, field)   do { (void)net; SNMP_INC_STATS_BH(net_statistics, field); } while (0)
 #define NET_INC_STATS_USER(net, field)         do { (void)net; SNMP_INC_STATS_USER(net_statistics, field); } while (0)
-#define NET_ADD_STATS_BH(field, adnd)  SNMP_ADD_STATS_BH(net_statistics, field, adnd)
+#define NET_ADD_STATS_BH(net, field, adnd) do { (void)net; SNMP_ADD_STATS_BH(net_statistics, field, adnd); } while (0)
 #define NET_ADD_STATS_USER(field, adnd)        SNMP_ADD_STATS_USER(net_statistics, field, adnd)
 
 extern unsigned long snmp_fold_field(void *mib[], int offt);
index 06006a5ac8b9e465c65f8c2e431fec2f5059f50f..75c2def8f9a0cbcd04a0a324e28cde2e756bb480 100644 (file)
@@ -160,6 +160,9 @@ rescan:
                __inet_twsk_del_dead_node(tw);
                spin_unlock(&twdr->death_lock);
                __inet_twsk_kill(tw, twdr->hashinfo);
+#ifdef CONFIG_NET_NS
+               NET_INC_STATS_BH(twsk_net(tw), LINUX_MIB_TIMEWAITED);
+#endif
                inet_twsk_put(tw);
                killed++;
                spin_lock(&twdr->death_lock);
@@ -178,8 +181,9 @@ rescan:
        }
 
        twdr->tw_count -= killed;
-       NET_ADD_STATS_BH(LINUX_MIB_TIMEWAITED, killed);
-
+#ifndef CONFIG_NET_NS
+       NET_ADD_STATS_BH(&init_net, LINUX_MIB_TIMEWAITED, killed);
+#endif
        return ret;
 }
 
@@ -372,6 +376,9 @@ void inet_twdr_twcal_tick(unsigned long data)
                                                       &twdr->twcal_row[slot]) {
                                __inet_twsk_del_dead_node(tw);
                                __inet_twsk_kill(tw, twdr->hashinfo);
+#ifdef CONFIG_NET_NS
+                               NET_INC_STATS_BH(twsk_net(tw), LINUX_MIB_TIMEWAITKILLED);
+#endif
                                inet_twsk_put(tw);
                                killed++;
                        }
@@ -395,7 +402,9 @@ void inet_twdr_twcal_tick(unsigned long data)
 out:
        if ((twdr->tw_count -= killed) == 0)
                del_timer(&twdr->tw_timer);
-       NET_ADD_STATS_BH(LINUX_MIB_TIMEWAITKILLED, killed);
+#ifndef CONFIG_NET_NS
+       NET_ADD_STATS_BH(&init_net, LINUX_MIB_TIMEWAITKILLED, killed);
+#endif
        spin_unlock(&twdr->death_lock);
 }