Whamcloud - gitweb
first part of 2.6.26 support (lnet/libcfs part)
[fs/lustre-release.git] / lnet / klnds / socklnd / socklnd_lib-linux.c
index c4dc1e1..e583c9c 100644 (file)
 #include "socklnd.h"
 
 # if defined(CONFIG_SYSCTL) && !CFS_SYSFS_MODULE_PARM
-static cfs_sysctl_table_t ksocknal_ctl_table[23];
 
-cfs_sysctl_table_t ksocknal_top_ctl_table[] = {
-        {
-                .ctl_name = 200,
-                .procname = "socknal",
-                .data     = NULL,
-                .maxlen   = 0,
-                .mode     = 0555,
-                .child    = ksocknal_ctl_table
-        },
-        { 0 }
+#ifndef HAVE_SYSCTL_UNNUMBERED
+
+enum {
+        SOCKLND_TIMEOUT = 1,
+        SOCKLND_CREDITS,
+        SOCKLND_PEER_CREDITS,
+        SOCKLND_NCONNDS,
+        SOCKLND_RECONNECTS_MIN,
+        SOCKLND_RECONNECTS_MAX,
+        SOCKLND_EAGER_ACK,
+        SOCKLND_ZERO_COPY,
+        SOCKLND_TYPED,
+        SOCKLND_BULK_MIN,
+        SOCKLND_RX_BUFFER_SIZE,
+        SOCKLND_TX_BUFFER_SIZE,
+        SOCKLND_NAGLE,
+        SOCKLND_IRQ_AFFINITY,
+        SOCKLND_KEEPALIVE_IDLE,
+        SOCKLND_KEEPALIVE_COUNT,
+        SOCKLND_KEEPALIVE_INTVL,
+        SOCKLND_BACKOFF_INIT,
+        SOCKLND_BACKOFF_MAX,
+        SOCKLND_PROTOCOL,
+        SOCKLND_ZERO_COPY_RECV,
+        SOCKLND_ZERO_COPY_RECV_MIN_NFRAGS
 };
+#else
 
-int
-ksocknal_lib_tunables_init ()
-{
-        int    i = 0;
-        int    j = 1;
-
-        if (*ksocknal_tunables.ksnd_zc_recv_min_nfrags < 2)
-                *ksocknal_tunables.ksnd_zc_recv_min_nfrags = 2;
-
-        if (*ksocknal_tunables.ksnd_zc_recv_min_nfrags > LNET_MAX_IOV)
-                *ksocknal_tunables.ksnd_zc_recv_min_nfrags = LNET_MAX_IOV;
+#define SOCKLND_TIMEOUT         CTL_UNNUMBERED
+#define SOCKLND_CREDITS         CTL_UNNUMBERED
+#define SOCKLND_PEER_CREDITS    CTL_UNNUMBERED
+#define SOCKLND_NCONNDS         CTL_UNNUMBERED
+#define SOCKLND_RECONNECTS_MIN  CTL_UNNUMBERED
+#define SOCKLND_RECONNECTS_MAX  CTL_UNNUMBERED
+#define SOCKLND_EAGER_ACK       CTL_UNNUMBERED
+#define SOCKLND_ZERO_COPY       CTL_UNNUMBERED
+#define SOCKLND_TYPED           CTL_UNNUMBERED
+#define SOCKLND_BULK_MIN        CTL_UNNUMBERED
+#define SOCKLND_RX_BUFFER_SIZE  CTL_UNNUMBERED
+#define SOCKLND_TX_BUFFER_SIZE  CTL_UNNUMBERED
+#define SOCKLND_NAGLE           CTL_UNNUMBERED
+#define SOCKLND_IRQ_AFFINITY    CTL_UNNUMBERED
+#define SOCKLND_KEEPALIVE_IDLE  CTL_UNNUMBERED
+#define SOCKLND_KEEPALIVE_COUNT CTL_UNNUMBERED
+#define SOCKLND_KEEPALIVE_INTVL CTL_UNNUMBERED
+#define SOCKLND_BACKOFF_INIT    CTL_UNNUMBERED
+#define SOCKLND_BACKOFF_MAX     CTL_UNNUMBERED
+#define SOCKLND_PROTOCOL        CTL_UNNUMBERED
+#define SOCKLND_ZERO_COPY_RECV  CTL_UNNUMBERED
+#define SOCKLND_ZERO_COPY_RECV_MIN_NFRAGS CTL_UNNUMBERED
+#endif
 
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+static cfs_sysctl_table_t ksocknal_ctl_table[] = {
+        {
+                .ctl_name = SOCKLND_TIMEOUT,
                 .procname = "timeout",
                 .data     = ksocknal_tunables.ksnd_timeout,
                 .maxlen   = sizeof (int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_CREDITS,
                 .procname = "credits",
                 .data     = ksocknal_tunables.ksnd_credits,
                 .maxlen   = sizeof (int),
                 .mode     = 0444,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+         {
+                .ctl_name = SOCKLND_PEER_CREDITS,
                 .procname = "peer_credits",
                 .data     = ksocknal_tunables.ksnd_peercredits,
                 .maxlen   = sizeof (int),
                 .mode     = 0444,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_NCONNDS,
                 .procname = "nconnds",
                 .data     = ksocknal_tunables.ksnd_nconnds,
                 .maxlen   = sizeof (int),
                 .mode     = 0444,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_RECONNECTS_MIN,
                 .procname = "min_reconnectms",
                 .data     = ksocknal_tunables.ksnd_min_reconnectms,
                 .maxlen   = sizeof (int),
                 .mode     = 0444,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_RECONNECTS_MAX,
                 .procname = "max_reconnectms",
                 .data     = ksocknal_tunables.ksnd_max_reconnectms,
                 .maxlen   = sizeof (int),
                 .mode     = 0444,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_EAGER_ACK,
                 .procname = "eager_ack",
                 .data     = ksocknal_tunables.ksnd_eager_ack,
                 .maxlen   = sizeof (int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_ZERO_COPY,
                 .procname = "zero_copy",
                 .data     = ksocknal_tunables.ksnd_zc_min_frag,
                 .maxlen   = sizeof (int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_ZERO_COPY_RECV,
                 .procname = "zero_copy_recv",
                 .data     = ksocknal_tunables.ksnd_zc_recv,
                 .maxlen   = sizeof (int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
-                .procname = "zero_copy_recv_min_nfrags",
-                .data     = ksocknal_tunables.ksnd_zc_recv_min_nfrags,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+
+        {
+                .ctl_name = SOCKLND_ZERO_COPY_RECV_MIN_NFRAGS,
+                .procname = "zero_copy_recv",
+                .data     = ksocknal_tunables.ksnd_zc_recv_min_nfrags
                 .maxlen   = sizeof (int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_TYPED,
                 .procname = "typed",
                 .data     = ksocknal_tunables.ksnd_typed_conns,
                 .maxlen   = sizeof (int),
                 .mode     = 0444,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_BULK_MIN,
                 .procname = "min_bulk",
                 .data     = ksocknal_tunables.ksnd_min_bulk,
                 .maxlen   = sizeof (int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_RX_BUFFER_SIZE,
                 .procname = "rx_buffer_size",
                 .data     = ksocknal_tunables.ksnd_rx_buffer_size,
                 .maxlen   = sizeof(int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_TX_BUFFER_SIZE,
                 .procname = "tx_buffer_size",
                 .data     = ksocknal_tunables.ksnd_tx_buffer_size,
                 .maxlen   = sizeof(int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_NAGLE,
                 .procname = "nagle",
                 .data     = ksocknal_tunables.ksnd_nagle,
                 .maxlen   = sizeof(int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
 #ifdef CPU_AFFINITY
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+        {
+                .ctl_name = SOCKLND_IRQ_AFFINITY,
                 .procname = "irq_affinity",
                 .data     = ksocknal_tunables.ksnd_irq_affinity,
                 .maxlen   = sizeof(int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
 #endif
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+        {
+                .ctl_name = SOCKLND_KEEPALIVE_IDLE,
                 .procname = "keepalive_idle",
                 .data     = ksocknal_tunables.ksnd_keepalive_idle,
                 .maxlen   = sizeof(int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_KEEPALIVE_COUNT,
                 .procname = "keepalive_count",
                 .data     = ksocknal_tunables.ksnd_keepalive_count,
                 .maxlen   = sizeof(int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_KEEPALIVE_INTVL,
                 .procname = "keepalive_intvl",
                 .data     = ksocknal_tunables.ksnd_keepalive_intvl,
                 .maxlen   = sizeof(int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
 #ifdef SOCKNAL_BACKOFF
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+        {
+                .ctl_name = SOCKLND_BACKOFF_INIT,
                 .procname = "backoff_init",
                 .data     = ksocknal_tunables.ksnd_backoff_init,
                 .maxlen   = sizeof(int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
+        {
+                .ctl_name = SOCKLND_BACKOFF_MAX,
                 .procname = "backoff_max",
                 .data     = ksocknal_tunables.ksnd_backoff_max,
                 .maxlen   = sizeof(int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
 #endif
 #if SOCKNAL_VERSION_DEBUG
-        ksocknal_ctl_table[i++] = (cfs_sysctl_table_t) {
-                .ctl_name = j++,
+        {
+                .ctl_name = SOCKLND_PROTOCOL,
                 .procname = "protocol",
                 .data     = ksocknal_tunables.ksnd_protocol,
                 .maxlen   = sizeof(int),
                 .mode     = 0644,
-                .proc_handler = &proc_dointvec
-        };
+                .proc_handler = &proc_dointvec,
+                .strategy = &sysctl_intvec,
+        },
 #endif
-        ksocknal_ctl_table[i++] =  (cfs_sysctl_table_t) { 0 };
+        {0}
+};
 
-        LASSERT (j == i);
-        LASSERT (i <= sizeof(ksocknal_ctl_table)/sizeof(ksocknal_ctl_table[0]));
+
+cfs_sysctl_table_t ksocknal_top_ctl_table[] = {
+        {
+                .ctl_name = CTL_SOCKLND,
+                .procname = "socknal",
+                .data     = NULL,
+                .maxlen   = 0,
+                .mode     = 0555,
+                .child    = ksocknal_ctl_table
+        },
+        { 0 }
+};
+
+int
+ksocknal_lib_tunables_init ()
+{
+        if (*ksocknal_tunables.ksnd_zc_recv_min_nfrags < 2)
+                *ksocknal_tunables.ksnd_zc_recv_min_nfrags = 2;
+        if (*ksocknal_tunables.ksnd_zc_recv_min_nfrags > LNET_MAX_IOV)
+                *ksocknal_tunables.ksnd_zc_recv_min_nfrags = LNET_MAX_IOV;
 
         ksocknal_tunables.ksnd_sysctl =
                 cfs_register_sysctl_table(ksocknal_top_ctl_table, 0);
@@ -697,7 +767,6 @@ ksocknal_lib_recv_kiov (ksock_conn_t *conn)
                 msg.msg_iovlen = niov;
         }
 
-
         LASSERT (nob <= conn->ksnc_rx_nob_wanted);
 
         set_fs (KERNEL_DS);