Whamcloud - gitweb
* Removed toenal
authoreeb <eeb>
Wed, 31 Dec 2003 14:58:38 +0000 (14:58 +0000)
committereeb <eeb>
Wed, 31 Dec 2003 14:58:38 +0000 (14:58 +0000)
37 files changed:
lnet/configure.in
lnet/include/linux/kp30.h
lnet/klnds/Makefile.am
lnet/klnds/toelnd/.cvsignore [deleted file]
lnet/klnds/toelnd/Makefile.am [deleted file]
lnet/klnds/toelnd/toenal.c [deleted file]
lnet/klnds/toelnd/toenal.h [deleted file]
lnet/klnds/toelnd/toenal_cb.c [deleted file]
lnet/libcfs/debug.c
lnet/libcfs/module.c
lnet/tests/ping_srv.c
lnet/tests/sping_srv.c
lnet/tests/startclient.sh
lnet/tests/startserver.sh
lnet/utils/portals.c
lustre/configure.in
lustre/liblustre/libtest.c
lustre/liblustre/llite_lib.c
lustre/portals/configure.in
lustre/portals/include/linux/kp30.h
lustre/portals/knals/Makefile.am
lustre/portals/knals/toenal/.cvsignore [deleted file]
lustre/portals/knals/toenal/Makefile.am [deleted file]
lustre/portals/knals/toenal/toenal.c [deleted file]
lustre/portals/knals/toenal/toenal.h [deleted file]
lustre/portals/knals/toenal/toenal_cb.c [deleted file]
lustre/portals/libcfs/debug.c
lustre/portals/libcfs/module.c
lustre/portals/tests/ping_srv.c
lustre/portals/tests/sping_srv.c
lustre/portals/tests/startclient.sh
lustre/portals/tests/startserver.sh
lustre/portals/utils/portals.c
lustre/ptlrpc/events.c
lustre/scripts/system-profile.sh
lustre/utils/lconf
lustre/utils/lmc

index 44657e0..bacf532 100644 (file)
@@ -29,6 +29,6 @@ AM_CONFIG_HEADER(include/config.h)
 AC_OUTPUT([Makefile Kernelenv libcfs/Makefile portals/Makefile \
           unals/Makefile knals/Makefile router/Makefile \
          knals/socknal/Makefile knals/gmnal/Makefile knals/qswnal/Makefile \
 AC_OUTPUT([Makefile Kernelenv libcfs/Makefile portals/Makefile \
           unals/Makefile knals/Makefile router/Makefile \
          knals/socknal/Makefile knals/gmnal/Makefile knals/qswnal/Makefile \
-         knals/scimacnal/Makefile knals/toenal/Makefile knals/ibnal/Makefile\
+         knals/scimacnal/Makefile knals/ibnal/Makefile\
           utils/Makefile tests/Makefile doc/Makefile ])
 
           utils/Makefile tests/Makefile doc/Makefile ])
 
index 3ea46d1..815375c 100644 (file)
@@ -1026,21 +1026,20 @@ static inline int portal_ioctl_getdata(char *buf, char *end, void *arg)
 #define IOC_PORTAL_MAX_NR                             42
 
 enum {
 #define IOC_PORTAL_MAX_NR                             42
 
 enum {
-        QSWNAL   1,
-        SOCKNAL,
-        GMNAL,
-        TOENAL,
-        TCPNAL,
-        SCIMACNAL,
-        ROUTER,
-        IBNAL,
+        QSWNAL    = 1,
+        SOCKNAL   = 2,
+        GMNAL     = 3,
+        /*          4 unused */
+        TCPNAL    = 5,
+        SCIMACNAL = 6,
+        ROUTER    = 7,
+        IBNAL     = 8,
         NAL_ENUM_END_MARKER
 };
 
 #ifdef __KERNEL__
 extern ptl_handle_ni_t  kqswnal_ni;
 extern ptl_handle_ni_t  ksocknal_ni;
         NAL_ENUM_END_MARKER
 };
 
 #ifdef __KERNEL__
 extern ptl_handle_ni_t  kqswnal_ni;
 extern ptl_handle_ni_t  ksocknal_ni;
-extern ptl_handle_ni_t  ktoenal_ni;
 extern ptl_handle_ni_t  kgmnal_ni;
 extern ptl_handle_ni_t  kibnal_ni;
 extern ptl_handle_ni_t  kscimacnal_ni;
 extern ptl_handle_ni_t  kgmnal_ni;
 extern ptl_handle_ni_t  kibnal_ni;
 extern ptl_handle_ni_t  kscimacnal_ni;
index 25aab9d..df6ee5c 100644 (file)
@@ -3,5 +3,5 @@
 # This code is issued under the GNU General Public License.
 # See the file COPYING in this distribution
 
 # This code is issued under the GNU General Public License.
 # See the file COPYING in this distribution
 
-DIST_SUBDIRS= socknal toenal qswnal gmnal scimacnal ibnal
-SUBDIRS= socknal toenal        @QSWNAL@ @GMNAL@ @SCIMACNAL@ @IBNAL@
+DIST_SUBDIRS= socknal qswnal gmnal scimacnal ibnal
+SUBDIRS= socknal @QSWNAL@ @GMNAL@ @SCIMACNAL@ @IBNAL@
diff --git a/lnet/klnds/toelnd/.cvsignore b/lnet/klnds/toelnd/.cvsignore
deleted file mode 100644 (file)
index e995588..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-.deps
-Makefile
-Makefile.in
diff --git a/lnet/klnds/toelnd/Makefile.am b/lnet/klnds/toelnd/Makefile.am
deleted file mode 100644 (file)
index 9bfff64..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (C) 2001  Cluster File Systems, Inc.
-#
-# This code is issued under the GNU General Public License.
-# See the file COPYING in this distribution
-
-include ../../Rules.linux
-
-MODULE = ktoenal
-modulenet_DATA = ktoenal.o
-EXTRA_PROGRAMS = ktoenal
-
-DEFS =
-ktoenal_SOURCES = toenal.c toenal_cb.c toenal.h
diff --git a/lnet/klnds/toelnd/toenal.c b/lnet/klnds/toelnd/toenal.c
deleted file mode 100644 (file)
index 07b93cb..0000000
+++ /dev/null
@@ -1,629 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * Copyright (C) 2001, 2002 Cluster File Systems, Inc.
- *   Author: Zach Brown <zab@zabbo.net>
- *   Author: Peter J. Braam <braam@clusterfs.com>
- *   Author: Phil Schwan <phil@clusterfs.com>
- *   Author: Eric Barton <eric@bartonsoftware.com>
- *   Author: Kedar Sovani <kedar@calsoftinc.com>
- *   Author: Amey Inamdar <amey@calsoftinc.com>
- *
- *   This file is part of Portals, http://www.sf.net/projects/lustre/
- *
- *   Portals is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   Portals is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with Portals; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-#include <linux/poll.h>
-#include "toenal.h"
-
-ptl_handle_ni_t         ktoenal_ni;
-static nal_t            ktoenal_api;
-static ksock_nal_data_t ktoenal_data;
-
-/*
-ksocknal_interface_t ktoenal_interface = {
-        ksni_add_sock:         ktoenal_add_sock,
-        ksni_close_sock:       ktoenal_close_sock,
-        ksni_set_mynid:                ktoenal_set_mynid,
-};
-*/
-
-kpr_nal_interface_t ktoenal_router_interface = {
-        kprni_nalid:   TOENAL,
-        kprni_arg:     &ktoenal_data,
-        kprni_fwd:     ktoenal_fwd_packet,
-};
-
-
-int
-ktoenal_api_forward(nal_t *nal, int id, void *args, size_t args_len,
-                       void *ret, size_t ret_len)
-{
-        ksock_nal_data_t *k;
-        nal_cb_t *nal_cb;
-
-        k = nal->nal_data;
-        nal_cb = k->ksnd_nal_cb;
-
-        lib_dispatch(nal_cb, k, id, args, ret); /* ktoenal_send needs k */
-        return PTL_OK;
-}
-
-int
-ktoenal_api_shutdown(nal_t *nal, int ni)
-{
-       CDEBUG (D_NET, "closing all connections\n");
-
-        return ktoenal_close_sock(0);          /* close all sockets */
-}
-
-void
-ktoenal_api_yield(nal_t *nal)
-{
-        our_cond_resched();
-        return;
-}
-
-void
-ktoenal_api_lock(nal_t *nal, unsigned long *flags)
-{
-        ksock_nal_data_t *k;
-        nal_cb_t *nal_cb;
-
-        k = nal->nal_data;
-        nal_cb = k->ksnd_nal_cb;
-        nal_cb->cb_cli(nal_cb,flags);
-}
-
-void
-ktoenal_api_unlock(nal_t *nal, unsigned long *flags)
-{
-        ksock_nal_data_t *k;
-        nal_cb_t *nal_cb;
-
-        k = nal->nal_data;
-        nal_cb = k->ksnd_nal_cb;
-        nal_cb->cb_sti(nal_cb,flags);
-}
-
-nal_t *
-ktoenal_init(int interface, ptl_pt_index_t ptl_size,
-              ptl_ac_index_t ac_size, ptl_pid_t requested_pid)
-{
-        CDEBUG(D_NET, "calling lib_init with nid "LPX64"\n",
-               ktoenal_data.ksnd_mynid);
-        lib_init(&ktoenal_lib, ktoenal_data.ksnd_mynid, 0, 10, ptl_size,
-                 ac_size);
-        return (&ktoenal_api);
-}
-
-/*
- *  EXTRA functions follow
- */
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-#define SOCKET_I(inode) (&(inode)->u.socket_i)
-#endif
-static __inline__ struct socket *
-socki_lookup(struct inode *inode)
-{
-        return SOCKET_I(inode);
-}
-
-int
-ktoenal_set_mynid(ptl_nid_t nid)
-{
-        lib_ni_t *ni = &ktoenal_lib.ni;
-
-        /* FIXME: we have to do this because we call lib_init() at module
-         * insertion time, which is before we have 'mynid' available.  lib_init
-         * sets the NAL's nid, which it uses to tell other nodes where packets
-         * are coming from.  This is not a very graceful solution to this
-         * problem. */
-
-        CDEBUG(D_IOCTL, "setting mynid to "LPX64" (old nid="LPX64")\n", nid, ni->nid);
-
-        ktoenal_data.ksnd_mynid = nid;
-        ni->nid = nid;
-        return (0);
-}
-
-int
-ktoenal_add_sock (ptl_nid_t nid, int fd)
-{
-        unsigned long      flags;
-        ksock_conn_t      *conn;
-        struct file       *file = NULL;
-        struct socket     *sock = NULL;
-        int                ret;
-        ENTRY;
-
-        file = fget(fd);
-        if (file == NULL)
-                RETURN(-EINVAL);
-
-        ret = -EINVAL;
-        sock = socki_lookup(file->f_dentry->d_inode);
-        if (sock == NULL)
-                GOTO(error, ret);
-
-        ret = -ENOMEM;
-        PORTAL_ALLOC(conn, sizeof(*conn));
-        if (!conn)
-                GOTO(error, ret);
-
-        memset (conn, 0, sizeof (conn));        /* zero for consistency */
-        file->f_flags |= O_NONBLOCK;  /*  Does this have any conflicts */
-        conn->ksnc_file = file;
-        conn->ksnc_sock = sock;
-        conn->ksnc_peernid = nid;
-        atomic_set (&conn->ksnc_refcount, 1);    /* 1 ref for socklist */
-
-        conn->ksnc_rx_ready = 0;
-        conn->ksnc_rx_scheduled = 0;
-        ktoenal_new_packet (conn, 0);
-
-        INIT_LIST_HEAD (&conn->ksnc_tx_queue);
-        conn->ksnc_tx_ready = 0;
-        conn->ksnc_tx_scheduled = 0;
-
-        LASSERT (!in_interrupt());
-        write_lock_irqsave (&ktoenal_data.ksnd_socklist_lock, flags);
-
-        list_add(&conn->ksnc_list, &ktoenal_data.ksnd_socklist);
-        write_unlock_irqrestore (&ktoenal_data.ksnd_socklist_lock, flags);
-
-        ktoenal_data_ready(conn);
-        ktoenal_write_space(conn);
-
-        ktoenal_data.ksnd_slistchange = 1;
-        wake_up_process(ktoenal_data.ksnd_pollthread_tsk);
-        /* Schedule pollthread so that it will poll
-         * for newly created socket
-         */
-
-
-        CDEBUG(D_IOCTL, "conn [%p] registered for nid "LPX64"\n",
-               conn, conn->ksnc_peernid);
-
-        /* Can't unload while connection active */
-        PORTAL_MODULE_USE;
-        RETURN(0);
-
-error:
-        fput(file);
-        return (ret);
-}
-
-/* Passing in a zero nid will close all connections */
-int
-ktoenal_close_sock(ptl_nid_t nid)
-{
-        unsigned long     flags;
-        ksock_conn_t      *conn;
-        LIST_HEAD         (death_row);
-        struct list_head  *tmp;
-
-        LASSERT (!in_interrupt());
-        write_lock_irqsave (&ktoenal_data.ksnd_socklist_lock, flags);
-
-        if (nid == 0)                           /* close ALL connections */
-        {
-                /* insert 'death row' into the socket list... */
-                list_add (&death_row, &ktoenal_data.ksnd_socklist);
-                /* ...extract and reinitialise the socket list itself... */
-                list_del_init (&ktoenal_data.ksnd_socklist);
-                /* ...and voila, death row is the proud owner of all conns */
-        } else list_for_each (tmp, &ktoenal_data.ksnd_socklist) {
-
-                conn = list_entry (tmp, ksock_conn_t, ksnc_list);
-
-                if (conn->ksnc_peernid == nid)
-                {
-                        list_del (&conn->ksnc_list);
-                        list_add (&conn->ksnc_list, &death_row);
-                        break;
-                }
-        }
-
-
-        write_unlock_irqrestore (&ktoenal_data.ksnd_socklist_lock, flags);
-
-        if (list_empty (&death_row))
-                return (-ENOENT);
-
-        do {
-                conn = list_entry (death_row.next, ksock_conn_t, ksnc_list);
-                list_del (&conn->ksnc_list);
-                ktoenal_put_conn (conn);       /* drop ref for ksnd_socklist */
-        } while (!list_empty (&death_row));
-
-        ktoenal_data.ksnd_slistchange = 1;
-        wake_up_process(ktoenal_data.ksnd_pollthread_tsk);
-
-        return (0);
-}
-
-
-ksock_conn_t *
-ktoenal_get_conn (ptl_nid_t nid)
-{
-        struct list_head *tmp;
-        ksock_conn_t     *conn;
-
-        PROF_START(conn_list_walk);
-
-        read_lock (&ktoenal_data.ksnd_socklist_lock);
-
-        list_for_each(tmp, &ktoenal_data.ksnd_socklist) {
-
-                conn = list_entry(tmp, ksock_conn_t, ksnc_list);
-
-                if (conn->ksnc_peernid == nid)
-                {
-                        /* caller is referencing */
-                        atomic_inc (&conn->ksnc_refcount);
-
-                        read_unlock (&ktoenal_data.ksnd_socklist_lock);
-
-                        CDEBUG(D_NET, "got conn [%p] -> "LPX64" (%d)\n",
-                               conn, nid, atomic_read (&conn->ksnc_refcount));
-
-                        PROF_FINISH(conn_list_walk);
-                        return (conn);
-                }
-        }
-
-        read_unlock (&ktoenal_data.ksnd_socklist_lock);
-
-        CDEBUG(D_NET, "No connection found when looking for nid "LPX64"\n", nid);
-        PROF_FINISH(conn_list_walk);
-        return (NULL);
-}
-
-void
-ktoenal_close_conn (ksock_conn_t *conn)
-{
-        CDEBUG (D_NET, "connection [%p] closed \n", conn);
-
-        fput (conn->ksnc_file);
-        PORTAL_FREE (conn, sizeof (*conn));
-        /* One less connection keeping us hanging on */
-        PORTAL_MODULE_UNUSE;
-}
-
-void
-_ktoenal_put_conn (ksock_conn_t *conn)
-{
-        unsigned long flags;
-
-        CDEBUG (D_NET, "connection [%p] handed the black spot\n", conn);
-
-        /* "But what is the black spot, captain?" I asked.
-         * "That's a summons, mate..." */
-
-        LASSERT (atomic_read (&conn->ksnc_refcount) == 0);
-        LASSERT (!conn->ksnc_rx_scheduled);
-
-        if (!in_interrupt())
-        {
-                ktoenal_close_conn (conn);
-                return;
-        }
-
-        spin_lock_irqsave (&ktoenal_data.ksnd_reaper_lock, flags);
-
-        list_add (&conn->ksnc_list, &ktoenal_data.ksnd_reaper_list);
-        wake_up (&ktoenal_data.ksnd_reaper_waitq);
-
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_reaper_lock, flags);
-}
-
-void
-ktoenal_free_buffers (void)
-{
-        if (ktoenal_data.ksnd_fmbs != NULL)
-        {
-                ksock_fmb_t *fmb = (ksock_fmb_t *)ktoenal_data.ksnd_fmbs;
-                int          i;
-                int          j;
-
-                for (i = 0; i < (SOCKNAL_SMALL_FWD_NMSGS + SOCKNAL_LARGE_FWD_NMSGS); i++, fmb++)
-                        for (j = 0; j < fmb->fmb_npages; j++)
-                                if (fmb->fmb_pages[j] != NULL)
-                                        __free_page (fmb->fmb_pages[j]);
-
-                PORTAL_FREE (ktoenal_data.ksnd_fmbs,
-                             sizeof (ksock_fmb_t) * (SOCKNAL_SMALL_FWD_NMSGS + SOCKNAL_LARGE_FWD_NMSGS));
-        }
-
-        if (ktoenal_data.ksnd_ltxs != NULL)
-                PORTAL_FREE (ktoenal_data.ksnd_ltxs,
-                             sizeof (ksock_ltx_t) * (SOCKNAL_NLTXS + SOCKNAL_NNBLK_LTXS));
-}
-
-int
-ktoenal_cmd(struct portals_cfg *pcfg, void * private)
-{
-        int rc = -EINVAL;
-
-        LASSERT (pcfg != NULL);
-
-        switch(pcfg->pcfg_command) {
-        case NAL_CMD_REGISTER_PEER_FD: {
-                rc = ktoenal_add_sock(pcfg->pcfg_nid, pcfg->pcfg_fd);
-                break;
-        }
-        case NAL_CMD_CLOSE_CONNECTION: {
-                rc = ktoenal_close_sock(pcfg->pcfg_nid);
-                break;
-        }
-        case NAL_CMD_REGISTER_MYNID: {
-                rc = ktoenal_set_mynid (pcfg->pcfg_nid);
-                break;
-        }
-        }
-
-        return rc;
-}
-
-
-void /*__exit*/
-ktoenal_module_fini (void)
-{
-        CDEBUG(D_MALLOC, "before NAL cleanup: kmem %d\n",
-               atomic_read (&portal_kmemory));
-
-        switch (ktoenal_data.ksnd_init)
-        {
-        default:
-                LASSERT (0);
-
-        case SOCKNAL_INIT_ALL:
-                kportal_nal_unregister(TOENAL);
-                PORTAL_SYMBOL_UNREGISTER (ktoenal_ni);
-                /* fall through */
-
-        case SOCKNAL_INIT_PTL:
-                PtlNIFini(ktoenal_ni);
-                lib_fini(&ktoenal_lib);
-                /* fall through */
-
-        case SOCKNAL_INIT_DATA:
-                /* Module refcount only gets to zero when all connections
-                 * have been closed so all lists must be empty */
-                LASSERT (list_empty (&ktoenal_data.ksnd_socklist));
-                LASSERT (list_empty (&ktoenal_data.ksnd_reaper_list));
-                LASSERT (list_empty (&ktoenal_data.ksnd_rx_conns));
-                LASSERT (list_empty (&ktoenal_data.ksnd_tx_conns));
-                LASSERT (list_empty (&ktoenal_data.ksnd_small_fmp.fmp_blocked_conns));
-                LASSERT (list_empty (&ktoenal_data.ksnd_large_fmp.fmp_blocked_conns));
-
-                kpr_shutdown (&ktoenal_data.ksnd_router); /* stop router calling me */
-
-                /* flag threads to terminate; wake and wait for them to die */
-                ktoenal_data.ksnd_shuttingdown = 1;
-                wake_up_all (&ktoenal_data.ksnd_reaper_waitq);
-                wake_up_all (&ktoenal_data.ksnd_sched_waitq);
-                wake_up_process(ktoenal_data.ksnd_pollthread_tsk);
-
-                while (atomic_read (&ktoenal_data.ksnd_nthreads) != 0)
-                {
-                        CDEBUG (D_NET, "waitinf for %d threads to terminate\n",
-                                atomic_read (&ktoenal_data.ksnd_nthreads));
-                        set_current_state (TASK_UNINTERRUPTIBLE);
-                        schedule_timeout (HZ);
-                }
-
-                kpr_deregister (&ktoenal_data.ksnd_router);
-
-                ktoenal_free_buffers();
-                /* fall through */
-
-        case SOCKNAL_INIT_NOTHING:
-                break;
-        }
-
-        CDEBUG(D_MALLOC, "after NAL cleanup: kmem %d\n",
-               atomic_read (&portal_kmemory));
-
-        printk(KERN_INFO "Lustre: Routing socket NAL unloaded (final mem %d)\n",
-               atomic_read(&portal_kmemory));
-}
-
-int __init
-ktoenal_module_init (void)
-{
-        int   pkmem = atomic_read(&portal_kmemory);
-        int   rc;
-        int   i;
-        int   j;
-
-        /* packet descriptor must fit in a router descriptor's scratchpad */
-        LASSERT(sizeof (ksock_tx_t) <= sizeof (kprfd_scratch_t));
-
-        LASSERT (ktoenal_data.ksnd_init == SOCKNAL_INIT_NOTHING);
-
-        ktoenal_api.forward  = ktoenal_api_forward;
-        ktoenal_api.shutdown = ktoenal_api_shutdown;
-        ktoenal_api.yield    = ktoenal_api_yield;
-        ktoenal_api.validate = NULL;           /* our api validate is a NOOP */
-        ktoenal_api.lock     = ktoenal_api_lock;
-        ktoenal_api.unlock   = ktoenal_api_unlock;
-        ktoenal_api.nal_data = &ktoenal_data;
-
-        ktoenal_lib.nal_data = &ktoenal_data;
-
-        memset (&ktoenal_data, 0, sizeof (ktoenal_data)); /* zero pointers */
-
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_socklist);
-        rwlock_init(&ktoenal_data.ksnd_socklist_lock);
-
-        ktoenal_data.ksnd_nal_cb = &ktoenal_lib;
-        spin_lock_init (&ktoenal_data.ksnd_nal_cb_lock);
-
-        spin_lock_init (&ktoenal_data.ksnd_sched_lock);
-
-        init_waitqueue_head (&ktoenal_data.ksnd_sched_waitq);
-
-        INIT_LIST_HEAD (&ktoenal_data.ksnd_rx_conns);
-        INIT_LIST_HEAD (&ktoenal_data.ksnd_tx_conns);
-
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_small_fmp.fmp_idle_fmbs);
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_small_fmp.fmp_blocked_conns);
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_large_fmp.fmp_idle_fmbs);
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_large_fmp.fmp_blocked_conns);
-
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_idle_nblk_ltx_list);
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_idle_ltx_list);
-        init_waitqueue_head(&ktoenal_data.ksnd_idle_ltx_waitq);
-
-        INIT_LIST_HEAD (&ktoenal_data.ksnd_reaper_list);
-        init_waitqueue_head(&ktoenal_data.ksnd_reaper_waitq);
-        spin_lock_init (&ktoenal_data.ksnd_reaper_lock);
-
-        ktoenal_data.ksnd_init = SOCKNAL_INIT_DATA; /* flag lists/ptrs/locks initialised */
-
-        PORTAL_ALLOC(ktoenal_data.ksnd_fmbs,
-                     sizeof(ksock_fmb_t) * (SOCKNAL_SMALL_FWD_NMSGS + SOCKNAL_LARGE_FWD_NMSGS));
-        if (ktoenal_data.ksnd_fmbs == NULL)
-                RETURN(-ENOMEM);
-
-        /* NULL out buffer pointers etc */
-        memset(ktoenal_data.ksnd_fmbs, 0,
-               sizeof(ksock_fmb_t) * (SOCKNAL_SMALL_FWD_NMSGS + SOCKNAL_LARGE_FWD_NMSGS));
-
-        for (i = 0; i < (SOCKNAL_SMALL_FWD_NMSGS + SOCKNAL_LARGE_FWD_NMSGS); i++)
-        {
-                ksock_fmb_t *fmb = &((ksock_fmb_t *)ktoenal_data.ksnd_fmbs)[i];
-
-                if (i < SOCKNAL_SMALL_FWD_NMSGS)
-                {
-                        fmb->fmb_npages = SOCKNAL_SMALL_FWD_PAGES;
-                        fmb->fmb_pool = &ktoenal_data.ksnd_small_fmp;
-                }
-                else
-                {
-                        fmb->fmb_npages = SOCKNAL_LARGE_FWD_PAGES;
-                        fmb->fmb_pool = &ktoenal_data.ksnd_large_fmp;
-                }
-
-                LASSERT (fmb->fmb_npages > 0);
-                for (j = 0; j < fmb->fmb_npages; j++)
-                {
-                        fmb->fmb_pages[j] = alloc_page(GFP_KERNEL);
-
-                        if (fmb->fmb_pages[j] == NULL)
-                        {
-                                ktoenal_module_fini ();
-                                return (-ENOMEM);
-                        }
-
-                        LASSERT (page_address (fmb->fmb_pages[j]) != NULL);
-                }
-
-                list_add (&fmb->fmb_list, &fmb->fmb_pool->fmp_idle_fmbs);
-        }
-
-        PORTAL_ALLOC(ktoenal_data.ksnd_ltxs,
-                     sizeof (ksock_ltx_t) * (SOCKNAL_NLTXS + SOCKNAL_NNBLK_LTXS));
-        if (ktoenal_data.ksnd_ltxs == NULL)
-        {
-                ktoenal_module_fini ();
-                return (-ENOMEM);
-        }
-
-        /* Deterministic bugs please */
-        memset (ktoenal_data.ksnd_ltxs, 0xeb,
-                sizeof (ksock_ltx_t) * (SOCKNAL_NLTXS + SOCKNAL_NNBLK_LTXS));
-
-        for (i = 0; i < SOCKNAL_NLTXS + SOCKNAL_NNBLK_LTXS; i++)
-        {
-                ksock_ltx_t *ltx = &((ksock_ltx_t *)ktoenal_data.ksnd_ltxs)[i];
-
-                ltx->ltx_idle = i < SOCKNAL_NLTXS ?
-                                &ktoenal_data.ksnd_idle_ltx_list :
-                                &ktoenal_data.ksnd_idle_nblk_ltx_list;
-                list_add (&ltx->ltx_tx.tx_list, ltx->ltx_idle);
-        }
-
-        rc = PtlNIInit(ktoenal_init, 32, 4, 0, &ktoenal_ni);
-        if (rc != 0)
-        {
-                CERROR("ktoenal: PtlNIInit failed: error %d\n", rc);
-                ktoenal_module_fini ();
-                RETURN (rc);
-        }
-        PtlNIDebug(ktoenal_ni, ~0);
-
-        ktoenal_data.ksnd_init = SOCKNAL_INIT_PTL; /* flag PtlNIInit() called */
-
-        ktoenal_data.ksnd_slistchange = 1;
-        for (i = 0; i < TOENAL_N_SCHED; i++)
-        {
-                rc = ktoenal_thread_start (ktoenal_scheduler, NULL);
-                if (rc != 0)
-                {
-                        CERROR("Can't spawn socknal scheduler[%d]: %d\n", i, rc);
-                        ktoenal_module_fini ();
-                        RETURN (rc);
-                }
-        }
-
-        rc = ktoenal_thread_start (ktoenal_reaper, NULL);
-        if (rc != 0)
-        {
-                CERROR("Can't spawn socknal reaper: %d\n", rc);
-                ktoenal_module_fini ();
-                RETURN (rc);
-        }
-
-        rc = ktoenal_thread_start (ktoenal_pollthread, NULL);
-        if (rc != 0)
-        {
-                CERROR("Can't spawn socknal pollthread: %d\n", rc);
-                ktoenal_module_fini ();
-                RETURN (rc);
-        }
-
-        rc = kpr_register(&ktoenal_data.ksnd_router,
-                  &ktoenal_router_interface);
-        if (rc != 0)
-                CDEBUG (D_NET, "Can't initialise routing interface (rc = %d): not routing\n", rc);
-
-        rc = kportal_nal_register(TOENAL, &ktoenal_cmd, NULL);
-        if (rc != 0)
-                CDEBUG(D_NET, "Can't initialise command interface (rc = %d)\n",
-                       rc);
-
-        PORTAL_SYMBOL_REGISTER(ktoenal_ni);
-
-        /* flag everything initialised */
-        ktoenal_data.ksnd_init = SOCKNAL_INIT_ALL;
-
-       printk(KERN_INFO "Lustre: Routing TOE NAL loaded (Routing %s, initial mem %d)\n",
-              kpr_routing(&ktoenal_data.ksnd_router) ? "enabled" : "disabled",
-               pkmem);
-
-        return (0);
-}
-
-MODULE_AUTHOR("Cluster File Systems, Inc. <info@clusterfs.com>");
-MODULE_DESCRIPTION("Kernel TCP Socket NAL v0.01");
-MODULE_LICENSE("GPL");
-
-module_init(ktoenal_module_init);
-module_exit(ktoenal_module_fini);
-
-EXPORT_SYMBOL (ktoenal_ni);
diff --git a/lnet/klnds/toelnd/toenal.h b/lnet/klnds/toelnd/toenal.h
deleted file mode 100644 (file)
index b211d6c..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * Copyright (C) 2001, 2002 Cluster File Systems, Inc.
- *   Author: Zach Brown <zab@zabbo.net>
- *   Author: Peter J. Braam <braam@clusterfs.com>
- *   Author: Phil Schwan <phil@clusterfs.com>
- *   Author: Eric Barton <eric@bartonsoftware.com>
- *   Author: Kedar Sovani <kedar@calsoftinc.com>
- *   Author: Amey Inamdar <amey@calsoftinc.com>
- *
- *   This file is part of Portals, http://www.sf.net/projects/lustre/
- *
- *   Portals is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   Portals is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with Portals; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-#define DEBUG_PORTAL_ALLOC
-#ifndef EXPORT_SYMTAB
-# define EXPORT_SYMTAB
-#endif
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/string.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <linux/smp_lock.h>
-#include <linux/unistd.h>
-#include <net/tcp.h>
-#include <linux/uio.h>
-#include <linux/sched.h> 
-
-#include <asm/system.h>
-#include <asm/uaccess.h>
-
-#include <linux/fs.h>
-#include <linux/file.h>
-#include <linux/stat.h>
-#include <linux/list.h>
-#include <asm/uaccess.h>
-#include <asm/segment.h>
-
-#define DEBUG_SUBSYSTEM S_SOCKNAL
-
-#include <linux/kp30.h>
-#include <portals/p30.h>
-#include <portals/lib-p30.h>
-
-#define SOCKNAL_NLTXS           128             /* # normal transmit messages */
-#define SOCKNAL_NNBLK_LTXS     128             /* # transmit messages reserved if can't block */
-
-#define SOCKNAL_SMALL_FWD_NMSGS        128             /* # small messages I can be forwarding at any time */
-#define SOCKNAL_LARGE_FWD_NMSGS 32              /* # large messages I can be forwarding at any time */
-
-#define SOCKNAL_SMALL_FWD_PAGES        1               /* # pages in a small message fwd buffer */
-
-#define SOCKNAL_LARGE_FWD_PAGES (PAGE_ALIGN (sizeof (ptl_hdr_t) + PTL_MTU) >> PAGE_SHIFT)
-                                               /* # pages in a large message fwd buffer */
-
-#define SOCKNAL_RESCHED         100             /* # scheduler loops before reschedule */
-
-#define SOCKNAL_TX_LOW_WATER(sk) (((sk)->sndbuf*8)/10)
-
-#define TOENAL_N_SCHED 1
-
-typedef struct                                  /* pool of forwarding buffers */
-{
-        struct list_head  fmp_idle_fmbs;        /* buffers waiting for a connection */
-        struct list_head  fmp_blocked_conns;    /* connections waiting for a buffer */
-} ksock_fmb_pool_t;
-
-typedef struct {
-        int               ksnd_init;            /* initialisation state */
-        
-        struct list_head  ksnd_socklist;        /* all my connections */
-        rwlock_t          ksnd_socklist_lock;   /* stabilise add/find/remove */
-
-
-        ptl_nid_t         ksnd_mynid;
-        nal_cb_t         *ksnd_nal_cb;
-        spinlock_t        ksnd_nal_cb_lock;     /* lib cli/sti lock */
-
-        atomic_t          ksnd_nthreads;        /* # live threads */
-        int               ksnd_shuttingdown;    /* tell threads to exit */
-        
-        kpr_router_t      ksnd_router;          /* THE router */
-
-        spinlock_t        ksnd_sched_lock;      /* serialise packet scheduling */
-        wait_queue_head_t ksnd_sched_waitq;     /* where scheduler(s) wait */
-
-        struct list_head  ksnd_rx_conns;        /* conn waiting to be read */
-        struct list_head  ksnd_tx_conns;        /* conn waiting to be written */
-        
-        void             *ksnd_fmbs;            /* all the pre-allocated FMBs */
-        ksock_fmb_pool_t  ksnd_small_fmp;       /* small message forwarding buffers */
-        ksock_fmb_pool_t  ksnd_large_fmp;       /* large message forwarding buffers */
-
-        void             *ksnd_ltxs;            /* all the pre-allocated LTXs */
-        struct list_head  ksnd_idle_ltx_list;   /* where to get an idle LTX */
-        struct list_head  ksnd_idle_nblk_ltx_list; /* where to get an idle LTX if you can't block */
-        wait_queue_head_t ksnd_idle_ltx_waitq;  /* where to block for an idle LTX */
-
-        struct list_head  ksnd_reaper_list;     /* conn waiting to be reaped */
-        wait_queue_head_t ksnd_reaper_waitq;    /* reaper sleeps here */
-        spinlock_t        ksnd_reaper_lock;     /* serialise */
-        
-        struct task_struct *ksnd_pollthread_tsk;/* task_struct for the poll thread */
-        poll_table          ksnd_pwait;         /* poll wait table for the socket */
-        int                 ksnd_slistchange;   /* informs the pollthread that
-                                                 * the socklist has changed */  
-} ksock_nal_data_t;
-
-#define SOCKNAL_INIT_NOTHING    0
-#define SOCKNAL_INIT_DATA       1
-#define SOCKNAL_INIT_PTL        2
-#define SOCKNAL_INIT_ALL        3
-
-typedef struct                                  /* transmit packet */
-{
-        struct list_head        tx_list;       /* queue on conn for transmission etc */
-        char                    tx_isfwd;      /* forwarding / sourced here */
-        int                     tx_nob;        /* # packet bytes */
-        int                     tx_niov;       /* # packet frags */
-        struct iovec           *tx_iov;        /* packet frags */
-} ksock_tx_t;
-
-typedef struct                                  /* locally transmitted packet */
-{
-        ksock_tx_t              ltx_tx;         /* send info */
-        struct list_head       *ltx_idle;       /* where to put when idle */
-        void                   *ltx_private;    /* lib_finalize() callback arg */
-        void                   *ltx_cookie;     /* lib_finalize() callback arg */
-        struct iovec            ltx_iov[1 + PTL_MD_MAX_IOV]; /* msg frags */
-        ptl_hdr_t               ltx_hdr;        /* buffer for packet header */
-} ksock_ltx_t;
-
-#define KSOCK_TX_2_KPR_FWD_DESC(ptr)    list_entry (ptr, kpr_fwd_desc_t, kprfd_scratch)
-/* forwarded packets (router->socknal) embedded in kpr_fwd_desc_t::kprfd_scratch */
-
-#define KSOCK_TX_2_KSOCK_LTX(ptr)       list_entry (ptr, ksock_ltx_t, ltx_tx)
-/* local packets (lib->socknal) embedded in ksock_ltx_t::ltx_tx */
-
-/* NB list_entry() is used here as convenient macro for calculating a
- * pointer to a struct from the addres of a member.
- */
-
-typedef struct                                  /* Kernel portals Socket Forwarding message buffer */
-{                                               /* (socknal->router) */
-        struct list_head        fmb_list;       /* queue idle */
-        kpr_fwd_desc_t          fmb_fwd;        /* router's descriptor */
-        int                     fmb_npages;     /* # pages allocated */
-        ksock_fmb_pool_t       *fmb_pool;       /* owning pool */
-        struct page            *fmb_pages[SOCKNAL_LARGE_FWD_PAGES];
-        struct iovec            fmb_iov[SOCKNAL_LARGE_FWD_PAGES];
-} ksock_fmb_t;
-
-#define SOCKNAL_RX_HEADER       1               /* reading header */
-#define SOCKNAL_RX_BODY         2               /* reading body (to deliver here) */
-#define SOCKNAL_RX_BODY_FWD     3               /* reading body (to forward) */
-#define SOCKNAL_RX_SLOP         4               /* skipping body */
-#define SOCKNAL_RX_GET_FMB      5               /* scheduled for forwarding */
-#define SOCKNAL_RX_FMB_SLEEP    6               /* blocked waiting for a fwd desc */
-
-typedef struct 
-{ 
-        struct list_head    ksnc_list;          /* stash on global socket list */
-        struct file        *ksnc_file;          /* socket filp */
-        struct socket      *ksnc_sock;          /* socket */
-        ptl_nid_t           ksnc_peernid;       /* who's on the other end */
-        atomic_t            ksnc_refcount;      /* # users */
-        
-        /* READER */
-        struct list_head    ksnc_rx_list;       /* where I enq waiting input or a forwarding descriptor */
-        unsigned long       ksnc_rx_ready;      /* data ready to read */
-        int                 ksnc_rx_scheduled;  /* being progressed */
-        int                 ksnc_rx_state;      /* what is being read */
-        int                 ksnc_rx_nob_left;   /* # bytes to next hdr/body  */
-        int                 ksnc_rx_nob_wanted; /* bytes actually wanted */
-        int                 ksnc_rx_niov;       /* # frags */
-        struct iovec        ksnc_rx_iov[1 + PTL_MD_MAX_IOV]; /* the frags */
-
-        void               *ksnc_cookie;        /* rx lib_finalize passthru arg */
-        ptl_hdr_t           ksnc_hdr;           /* where I read headers into */
-
-        /* WRITER */
-        struct list_head    ksnc_tx_list;       /* where I enq waiting for output space */
-        struct list_head    ksnc_tx_queue;      /* packets waiting to be sent */
-        unsigned long       ksnc_tx_ready;      /* write space */
-        int                 ksnc_tx_scheduled;  /* being progressed */
-        
-} ksock_conn_t;
-
-extern int ktoenal_add_sock (ptl_nid_t nid, int fd);
-extern int ktoenal_close_sock(ptl_nid_t nid);
-extern int ktoenal_set_mynid(ptl_nid_t nid);
-extern int ktoenal_push_sock(ptl_nid_t nid);
-extern ksock_conn_t *ktoenal_get_conn (ptl_nid_t nid);
-extern void _ktoenal_put_conn (ksock_conn_t *conn);
-extern void ktoenal_close_conn (ksock_conn_t *conn);
-
-static inline void
-ktoenal_put_conn (ksock_conn_t *conn)
-{
-        CDEBUG (D_OTHER, "putting conn[%p] -> "LPX64" (%d)\n", 
-                conn, conn->ksnc_peernid, atomic_read (&conn->ksnc_refcount));
-        
-        if (atomic_dec_and_test (&conn->ksnc_refcount))
-                _ktoenal_put_conn (conn);
-}
-
-extern int ktoenal_thread_start (int (*fn)(void *arg), void *arg);
-extern int ktoenal_new_packet (ksock_conn_t *conn, int skip);
-extern void ktoenal_fwd_packet (void *arg, kpr_fwd_desc_t *fwd);
-extern int ktoenal_scheduler (void *arg);
-extern int ktoenal_reaper (void *arg);
-extern int ktoenal_pollthread (void *arg);
-extern void ktoenal_data_ready(ksock_conn_t *conn);
-extern void ktoenal_write_space(ksock_conn_t *conn);
-
-
-extern nal_cb_t         ktoenal_lib;
-extern ksock_nal_data_t ktoenal_data;
diff --git a/lnet/klnds/toelnd/toenal_cb.c b/lnet/klnds/toelnd/toenal_cb.c
deleted file mode 100644 (file)
index 3af9e33..0000000
+++ /dev/null
@@ -1,1202 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * Copyright (C) 2001, 2002 Cluster File Systems, Inc.
- *   Author: Zach Brown <zab@zabbo.net>
- *   Author: Peter J. Braam <braam@clusterfs.com>
- *   Author: Phil Schwan <phil@clusterfs.com>
- *   Author: Eric Barton <eric@bartonsoftware.com>
- *   Author: Kedar Sovani <kedar@calsoftinc.com>
- *   Author: Amey Inamdar <amey@calsoftinc.com>
- *   
- *   This file is part of Portals, http://www.sf.net/projects/lustre/
- *
- *   Portals is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   Portals is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with Portals; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-#include <linux/poll.h>
-#include "toenal.h"
-
-atomic_t   ktoenal_packets_received;
-long       ktoenal_packets_launched;
-long       ktoenal_packets_transmitted;
-
-/*
- *  LIB functions follow
- *
- */
-int
-ktoenal_read(nal_cb_t *nal, void *private, void *dst_addr,
-              user_ptr src_addr, size_t len)
-{
-        CDEBUG(D_NET, LPX64": reading %ld bytes from %p -> %p\n",
-               nal->ni.nid, (long)len, src_addr, dst_addr);
-
-        memcpy( dst_addr, src_addr, len );
-        return 0;
-}
-
-int
-ktoenal_write(nal_cb_t *nal, void *private, user_ptr dst_addr,
-               void *src_addr, size_t len)
-{
-        CDEBUG(D_NET, LPX64": writing %ld bytes from %p -> %p\n",
-               nal->ni.nid, (long)len, src_addr, dst_addr);
-
-        memcpy( dst_addr, src_addr, len );
-        return 0;
-}
-
-int 
-ktoenal_callback (nal_cb_t * nal, void *private, lib_eq_t *eq,
-                        ptl_event_t *ev)
-{
-        CDEBUG(D_NET, LPX64": callback eq %p ev %p\n",
-               nal->ni.nid, eq, ev);
-
-        if (eq->event_callback != NULL) 
-                eq->event_callback(ev);
-
-        return 0;
-}
-
-void *
-ktoenal_malloc(nal_cb_t *nal, size_t len)
-{
-        void *buf;
-
-        PORTAL_ALLOC(buf, len);
-
-        if (buf != NULL)
-                memset(buf, 0, len);
-
-        return (buf);
-}
-
-void
-ktoenal_free(nal_cb_t *nal, void *buf, size_t len)
-{
-        PORTAL_FREE(buf, len);
-}
-
-void
-ktoenal_printf(nal_cb_t *nal, const char *fmt, ...)
-{
-       va_list ap;
-       char msg[256];
-
-       va_start (ap, fmt);
-       vsnprintf (msg, sizeof (msg), fmt, ap); /* sprint safely */
-       va_end (ap);
-
-       msg[sizeof (msg) - 1] = 0;              /* ensure terminated */
-
-        CDEBUG (D_NET, "%s", msg);
-}
-
-void
-ktoenal_cli(nal_cb_t *nal, unsigned long *flags)
-{
-        ksock_nal_data_t *data = nal->nal_data;
-
-        spin_lock(&data->ksnd_nal_cb_lock);
-}
-
-void
-ktoenal_sti(nal_cb_t *nal, unsigned long *flags)
-{
-        ksock_nal_data_t *data;
-        data = nal->nal_data;
-
-        spin_unlock(&data->ksnd_nal_cb_lock);
-}
-
-int
-ktoenal_dist(nal_cb_t *nal, ptl_nid_t nid, unsigned long *dist)
-{
-        /* I would guess that if ktoenal_get_conn(nid) == NULL,
-           and we're not routing, then 'nid' is very distant :) */
-        if ( nal->ni.nid == nid ) {
-                *dist = 0;
-        } else {
-                *dist = 1;
-        }
-
-        return 0;
-}
-
-ksock_ltx_t *
-ktoenal_get_ltx (int may_block)
-{
-        unsigned long   flags;
-        ksock_ltx_t *ltx = NULL;
-        
-        for (;;)
-        {
-                spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-        
-                if (!list_empty (&ktoenal_data.ksnd_idle_ltx_list))
-                {
-                        ltx = list_entry (ktoenal_data.ksnd_idle_ltx_list.next, ksock_ltx_t, ltx_tx.tx_list);
-                        list_del (&ltx->ltx_tx.tx_list);
-                        break;
-                }
-
-                if (!may_block)
-                {
-                        if (!list_empty (&ktoenal_data.ksnd_idle_nblk_ltx_list))
-                        {
-                                ltx = list_entry (ktoenal_data.ksnd_idle_nblk_ltx_list.next, 
-                                                  ksock_ltx_t, ltx_tx.tx_list);
-                                list_del (&ltx->ltx_tx.tx_list);
-                        }
-                        break;
-                }
-                
-                spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-                
-                wait_event (ktoenal_data.ksnd_idle_ltx_waitq,
-                            !list_empty (&ktoenal_data.ksnd_idle_ltx_list));
-        }
-
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-
-        return (ltx);
-}
-
-int
-ktoenal_sendmsg (struct file *sock, struct iovec *iov, int niov, int nob, int flags)
-{
-        /* NB This procedure "consumes" iov (actually we do, tcp_sendmsg doesn't)
-         */
-        mm_segment_t oldmm;
-        int           rc;
-
-        LASSERT (niov > 0);
-        LASSERT (nob > 0);
-        
-        oldmm = get_fs();
-        set_fs (KERNEL_DS);
-
-#ifdef PORTAL_DEBUG
-        {
-                int total_nob;
-                int i;
-                
-                for (i = total_nob = 0; i < niov; i++)
-                        total_nob += iov[i].iov_len;
-                
-                LASSERT (nob == total_nob);
-        }
-#endif        
-        LASSERT (!in_interrupt());
-       
-        rc = sock->f_op->writev(sock, iov, niov, NULL);
-
-        set_fs (oldmm);
-
-        if (rc > 0)                             /* sent something? */
-        {
-                nob = rc;                       /* consume iov */
-                for (;;)
-                {
-                        LASSERT (niov > 0);
-                        
-                        if (iov->iov_len >= nob)
-                        {
-                                iov->iov_len -= nob;
-                                iov->iov_base = (void *)(((unsigned long)iov->iov_base) + nob);
-                                break;
-                        }
-                        nob -= iov->iov_len;
-                        iov->iov_len = 0;
-                        iov++;
-                        niov--;
-                }
-        }
-
-        return (rc);
-}
-
-int
-ktoenal_recvmsg(struct file *sock, struct iovec *iov, int niov, int toread)
-{
-        /* NB This procedure "consumes" iov (actually tcp_recvmsg does)
-         */
-        mm_segment_t oldmm;
-        int ret, i, len = 0, origlen = 0;
-        
-        PROF_START(our_recvmsg);
-        for(i = 0; i < niov; i++) {
-                len += iov[i].iov_len;
-                if(len >= toread)
-                        break;
-        }
-
-        if(len >= toread) {
-                origlen = iov[i].iov_len;
-                iov[i].iov_len -= (len - toread);
-        }
-        else {  /* i == niov */
-                i = niov - 1;
-        }
-
-        oldmm = get_fs();
-        set_fs(KERNEL_DS);
-
-        ret = sock->f_op->readv(sock, iov, i + 1, NULL);
-        
-        set_fs(oldmm);
-
-        if(origlen)
-                iov[i].iov_len = origlen;
-
-        PROF_FINISH(our_recvmsg);
-        return ret;
-}
-
-void
-ktoenal_process_transmit (ksock_conn_t *conn, unsigned long *irq_flags)
-{
-        ksock_tx_t *tx = list_entry (conn->ksnc_tx_queue.next, ksock_tx_t, tx_list);
-        int         rc;
-        
-        LASSERT (conn->ksnc_tx_scheduled);
-        LASSERT (conn->ksnc_tx_ready);
-        LASSERT (!list_empty (&conn->ksnc_tx_queue));
-
-        /* assume transmit will complete now, so dequeue while I've got the lock */
-        list_del (&tx->tx_list);
-
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-
-        LASSERT (tx->tx_nob > 0);
-
-        conn->ksnc_tx_ready = 0;                /* write_space may race with me and set ready */
-        mb();                                   /* => clear BEFORE trying to write */
-
-        rc = ktoenal_sendmsg (conn->ksnc_file,
-                               tx->tx_iov, tx->tx_niov, tx->tx_nob,
-                               list_empty (&conn->ksnc_tx_queue) ? 
-                               MSG_DONTWAIT : (MSG_DONTWAIT | MSG_MORE));
-
-        CDEBUG (D_NET, "send(%d) %d\n", tx->tx_nob, rc);
-
-        if (rc < 0)                             /* error */
-        {
-                if (rc == -EAGAIN)              /* socket full => */
-                        rc = 0;                 /* nothing sent */
-                else
-                {
-                        //warning FIXME: handle socket errors properly
-                        CERROR ("Error socknal send(%d) %p: %d\n", tx->tx_nob, conn, rc);
-                        rc = tx->tx_nob;        /* kid on for now whole packet went */
-                }
-        }
-
-        if (rc == tx->tx_nob)                   /* everything went */
-        {
-                conn->ksnc_tx_ready = 1;        /* assume more can go (ASAP) */
-                ktoenal_put_conn (conn);       /* release packet's ref */
-
-                if (tx->tx_isfwd)               /* was a forwarded packet? */
-                {
-                        kpr_fwd_done (&ktoenal_data.ksnd_router,
-                                      KSOCK_TX_2_KPR_FWD_DESC (tx), 0);
-
-                        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-                }
-                else                            /* local send */
-                {
-                        ksock_ltx_t *ltx = KSOCK_TX_2_KSOCK_LTX (tx);
-
-                        lib_finalize (&ktoenal_lib, ltx->ltx_private, ltx->ltx_cookie);
-
-                        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-                        
-                        list_add (&ltx->ltx_tx.tx_list, ltx->ltx_idle);
-
-                        /* normal tx desc => wakeup anyone blocking for one */
-                        if (ltx->ltx_idle == &ktoenal_data.ksnd_idle_ltx_list &&
-                            waitqueue_active (&ktoenal_data.ksnd_idle_ltx_waitq))
-                                wake_up (&ktoenal_data.ksnd_idle_ltx_waitq);
-                }
-                ktoenal_packets_transmitted++;
-        }
-        else
-        {
-                tx->tx_nob -= rc;
-
-                spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-
-                /* back onto HEAD of tx_queue */
-                list_add (&tx->tx_list, &conn->ksnc_tx_queue);
-        }
-
-        if (!conn->ksnc_tx_ready ||             /* no space to write now */
-            list_empty (&conn->ksnc_tx_queue))  /* nothing to write */
-        {
-                conn->ksnc_tx_scheduled = 0;    /* not being scheduled */
-                ktoenal_put_conn (conn);       /* release scheduler's ref */
-        }
-        else                                    /* let scheduler call me again */
-                list_add_tail (&conn->ksnc_tx_list, &ktoenal_data.ksnd_tx_conns);
-}
-
-void
-ktoenal_launch_packet (ksock_conn_t *conn, ksock_tx_t *tx)
-{
-        unsigned long flags;
-        int           nob = tx->tx_nob;
-        struct iovec *iov = tx->tx_iov;
-        int           niov = 1;
-        
-        LASSERT (nob >= sizeof (ptl_hdr_t));
-
-        /* Truncate iov to exactly match total packet length
-         * since socket sendmsg pays no attention to requested length.
-         */
-        for (;;)
-        {
-                LASSERT (niov <= tx->tx_niov);
-                
-                if (iov->iov_len >= nob)
-                {
-                        iov->iov_len = nob;
-                        break;
-                }
-                nob -= iov->iov_len;
-                iov++;
-                niov++;
-        }
-        tx->tx_niov = niov;
-        
-        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-        list_add_tail (&tx->tx_list, &conn->ksnc_tx_queue);
-
-        if (conn->ksnc_tx_ready &&              /* able to send */
-            !conn->ksnc_tx_scheduled)           /* not scheduled to send */
-        {
-                list_add_tail (&conn->ksnc_tx_list, &ktoenal_data.ksnd_tx_conns);
-                conn->ksnc_tx_scheduled = 1;
-                atomic_inc (&conn->ksnc_refcount); /* extra ref for scheduler */
-                if (waitqueue_active (&ktoenal_data.ksnd_sched_waitq))
-                        wake_up (&ktoenal_data.ksnd_sched_waitq);
-        }
-
-        ktoenal_packets_launched++;
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-}
-
-int
-ktoenal_send(nal_cb_t *nal, void *private, lib_msg_t *cookie,
-              ptl_hdr_t *hdr, int type, ptl_nid_t nid, ptl_pid_t pid,
-              unsigned int payload_niov, struct iovec *payload_iov, size_t payload_len)
-{
-        ptl_nid_t     gatewaynid;
-        ksock_conn_t *conn;
-        ksock_ltx_t  *ltx;
-        int           rc;
-        int           i;
-
-        /* By this point, as it happens, we have absolutely no idea what
-         * 'private' is.  It might be ksock_nal_data or it might be ksock_conn.
-         * Ha ha, isn't that a funny joke?
-         *
-         * FIXME: this is not the right way to fix this; the right way is to
-         * always pass in the same kind of structure.  This is hard right now.
-         * To revisit this issue, set a breakpoint in here and watch for when
-         * it's called from lib_finalize.  I think this occurs when we send a
-         * packet as a side-effect of another packet, such as when an ACK has
-         * been requested. -phil */
-
-        CDEBUG(D_NET, "sending %d bytes from [%d](%p,%d)... to nid: "
-               LPX64" pid %d\n", (int)payload_len, payload_niov,
-               payload_niov > 0 ? payload_iov[0].iov_base : NULL,
-               (int)(payload_niov > 0 ? payload_iov[0].iov_len : 0), nid, pid);
-
-        if ((conn = ktoenal_get_conn (nid)) == NULL)
-        {
-                /* It's not a peer; try to find a gateway */
-                rc = kpr_lookup (&ktoenal_data.ksnd_router, nid, payload_niov,
-                                 &gatewaynid);
-                if (rc != 0)
-                {
-                        CERROR ("Can't route to "LPX64": router error %d\n", nid, rc);
-                        return (-1);
-                }
-
-                if ((conn = ktoenal_get_conn (gatewaynid)) == NULL)
-                {
-                        CERROR ("Can't route to "LPX64": gateway "LPX64" is not a peer\n", 
-                                nid, gatewaynid);
-                        return (-1);
-                }
-        }
-
-        /* This transmit has now got a ref on conn */
-
-        /* I may not block for a transmit descriptor if I might block the
-         * receiver, or an interrupt handler. */
-        ltx = ktoenal_get_ltx (!(type == PTL_MSG_ACK ||
-                                 type == PTL_MSG_REPLY ||
-                                 in_interrupt ()));
-        if (ltx == NULL)
-        {
-                CERROR ("Can't allocate tx desc\n");
-                ktoenal_put_conn (conn);
-                return (-1);
-        }
-        
-        /* Init common (to sends and forwards) packet part */
-        ltx->ltx_tx.tx_isfwd = 0;
-        ltx->ltx_tx.tx_nob = sizeof (*hdr) + payload_len;
-        ltx->ltx_tx.tx_niov = 1 + payload_niov;
-        ltx->ltx_tx.tx_iov = ltx->ltx_iov;
-
-        /* Init local send packet (storage for hdr, finalize() args, iov) */
-        ltx->ltx_hdr = *hdr;
-        ltx->ltx_private = private;
-        ltx->ltx_cookie = cookie;
-
-        ltx->ltx_iov[0].iov_base = &ltx->ltx_hdr;
-        ltx->ltx_iov[0].iov_len = sizeof (ltx->ltx_hdr);
-
-        LASSERT (payload_niov <= PTL_MD_MAX_IOV);
-
-        for (i = 0; i < payload_niov; i++)
-        {
-                ltx->ltx_iov[1 + i].iov_base = payload_iov[i].iov_base;
-                ltx->ltx_iov[1 + i].iov_len  = payload_iov[i].iov_len;
-        }
-
-        ktoenal_launch_packet (conn, &ltx->ltx_tx);
-        return (0);
-}
-
-void
-ktoenal_fwd_packet (void *arg, kpr_fwd_desc_t *fwd)
-{
-        ksock_conn_t *conn;
-        ptl_nid_t     nid = fwd->kprfd_gateway_nid;
-        ksock_tx_t   *tx  = (ksock_tx_t *)&fwd->kprfd_scratch;
-
-        CDEBUG (D_NET, "Forwarding [%p] -> "LPX64" ("LPX64"))\n", fwd, 
-                fwd->kprfd_gateway_nid, fwd->kprfd_target_nid);
-
-        if (nid == ktoenal_lib.ni.nid)         /* I'm the gateway; must be the last hop */
-                nid = fwd->kprfd_target_nid;
-        
-        conn = ktoenal_get_conn (nid);
-        if (conn == NULL)
-        {
-                CERROR ("[%p] fwd to "LPX64" isn't a peer\n", fwd, nid);
-                kpr_fwd_done (&ktoenal_data.ksnd_router, fwd, -EHOSTUNREACH);
-                return;
-        }
-
-        /* This forward has now got a ref on conn */
-
-        tx->tx_isfwd = 1;                       /* This is a forwarding packet */
-        tx->tx_nob   = fwd->kprfd_nob;
-        tx->tx_niov  = fwd->kprfd_niov;
-        tx->tx_iov   = fwd->kprfd_iov;
-
-        ktoenal_launch_packet (conn, tx);
-}
-
-int
-ktoenal_thread_start (int (*fn)(void *arg), void *arg)
-{
-        long    pid = kernel_thread (fn, arg, 0);
-
-        if (pid < 0)
-                return ((int)pid);
-
-        atomic_inc (&ktoenal_data.ksnd_nthreads);
-        return (0);
-}
-
-void
-ktoenal_thread_fini (void)
-{
-        atomic_dec (&ktoenal_data.ksnd_nthreads);
-}
-
-void
-ktoenal_fmb_callback (void *arg, int error)
-{
-        ksock_fmb_t       *fmb = (ksock_fmb_t *)arg;
-        ptl_hdr_t         *hdr = (ptl_hdr_t *) page_address(fmb->fmb_pages[0]);
-        ksock_conn_t      *conn;
-        unsigned long     flags;
-
-        CDEBUG (D_NET, "routed packet from "LPX64" to "LPX64": %d\n", 
-                hdr->src_nid, hdr->dest_nid, error);
-
-        if (error != 0)
-                CERROR ("Failed to route packet from "LPX64" to "LPX64": %d\n", 
-                        hdr->src_nid, hdr->dest_nid, error);
-
-        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-        
-        list_add (&fmb->fmb_list, &fmb->fmb_pool->fmp_idle_fmbs);
-
-        if (!list_empty (&fmb->fmb_pool->fmp_blocked_conns))
-        {
-                conn = list_entry (fmb->fmb_pool->fmp_blocked_conns.next, ksock_conn_t, ksnc_rx_list);
-                list_del (&conn->ksnc_rx_list);
-
-                CDEBUG (D_NET, "Scheduling conn %p\n", conn);
-                LASSERT (conn->ksnc_rx_scheduled);
-                LASSERT (conn->ksnc_rx_state == SOCKNAL_RX_FMB_SLEEP);
-
-                conn->ksnc_rx_state = SOCKNAL_RX_GET_FMB;
-                list_add_tail (&conn->ksnc_rx_list, &ktoenal_data.ksnd_rx_conns);
-
-                if (waitqueue_active (&ktoenal_data.ksnd_sched_waitq))
-                        wake_up (&ktoenal_data.ksnd_sched_waitq);
-        }
-
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-}
-
-ksock_fmb_t *
-ktoenal_get_idle_fmb (ksock_conn_t *conn)
-{
-        /* NB called with sched lock held */
-        int               payload_nob = conn->ksnc_rx_nob_left;
-        int               packet_nob = sizeof (ptl_hdr_t) + payload_nob;
-        ksock_fmb_pool_t *pool;
-        ksock_fmb_t      *fmb;
-        
-        LASSERT (conn->ksnc_rx_state == SOCKNAL_RX_GET_FMB);
-
-        if (packet_nob <= SOCKNAL_SMALL_FWD_PAGES * PAGE_SIZE)
-                pool = &ktoenal_data.ksnd_small_fmp;
-        else
-                pool = &ktoenal_data.ksnd_large_fmp;
-        
-        if (!list_empty (&pool->fmp_idle_fmbs))
-        {
-                fmb = list_entry (pool->fmp_idle_fmbs.next, ksock_fmb_t, fmb_list);
-                list_del (&fmb->fmb_list);
-                return (fmb);
-        }
-
-        /* deschedule until fmb free */
-
-        conn->ksnc_rx_state = SOCKNAL_RX_FMB_SLEEP;
-
-        list_add_tail (&conn->ksnc_rx_list,
-                       &pool->fmp_blocked_conns);
-        return (NULL);
-}
-
-
-int
-ktoenal_init_fmb (ksock_conn_t *conn, ksock_fmb_t *fmb)
-{
-        int payload_nob = conn->ksnc_rx_nob_left;
-        int packet_nob = sizeof (ptl_hdr_t) + payload_nob;
-        int niov;                               /* at least the header */
-        int nob;
-        
-        LASSERT (conn->ksnc_rx_scheduled);
-        LASSERT (conn->ksnc_rx_state == SOCKNAL_RX_GET_FMB);
-        LASSERT (conn->ksnc_rx_nob_wanted == conn->ksnc_rx_nob_left);
-        LASSERT (payload_nob >= 0);
-        LASSERT (packet_nob <= fmb->fmb_npages * PAGE_SIZE);
-        LASSERT (sizeof (ptl_hdr_t) < PAGE_SIZE);
-        
-        /* Got a forwarding buffer; copy the header we just read into the
-         * forwarding buffer.  If there's payload start reading reading it
-         * into the buffer, otherwise the forwarding buffer can be kicked
-         * off immediately.
-         *
-         * NB fmb->fmb_iov spans the WHOLE packet.
-         *    conn->ksnc_rx_iov spans just the payload.
-         */
-
-        fmb->fmb_iov[0].iov_base = page_address (fmb->fmb_pages[0]);
-                
-        memcpy (fmb->fmb_iov[0].iov_base, &conn->ksnc_hdr, sizeof (ptl_hdr_t)); /* copy header */
-
-        if (payload_nob == 0)                   /* got complete packet already */
-        {
-                atomic_inc (&ktoenal_packets_received);
-
-                CDEBUG (D_NET, "%p "LPX64"->"LPX64" %d fwd_start (immediate)\n", conn,
-                        conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, packet_nob);
-
-                fmb->fmb_iov[0].iov_len = sizeof (ptl_hdr_t);
-
-                kpr_fwd_init (&fmb->fmb_fwd, conn->ksnc_hdr.dest_nid, 
-                              packet_nob, 1, fmb->fmb_iov, 
-                              ktoenal_fmb_callback, fmb);
-
-                kpr_fwd_start (&ktoenal_data.ksnd_router, &fmb->fmb_fwd); /* forward it now */
-
-                ktoenal_new_packet (conn, 0);  /* on to next packet */
-                return (1);
-        }
-
-        niov = 1;
-        if (packet_nob <= PAGE_SIZE)            /* whole packet fits in first page */
-                fmb->fmb_iov[0].iov_len = packet_nob;
-        else
-        {
-                fmb->fmb_iov[0].iov_len = PAGE_SIZE;
-                nob = packet_nob - PAGE_SIZE;
-                
-                do
-                {
-                        LASSERT (niov < fmb->fmb_npages);
-                        fmb->fmb_iov[niov].iov_base = page_address (fmb->fmb_pages[niov]);
-                        fmb->fmb_iov[niov].iov_len = MIN (PAGE_SIZE, nob);
-                        nob -= PAGE_SIZE;
-                        niov++;
-                } while (nob > 0);
-        }
-
-        kpr_fwd_init (&fmb->fmb_fwd, conn->ksnc_hdr.dest_nid, 
-                      packet_nob, niov, fmb->fmb_iov, 
-                      ktoenal_fmb_callback, fmb);
-
-        /* stash router's descriptor ready for call to kpr_fwd_start */        
-        conn->ksnc_cookie = &fmb->fmb_fwd;
-
-        conn->ksnc_rx_state = SOCKNAL_RX_BODY_FWD; /* read in the payload */
-
-        /* payload is desc's iov-ed buffer, but skipping the hdr */
-        LASSERT (niov <= sizeof (conn->ksnc_rx_iov) / sizeof (conn->ksnc_rx_iov[0]));
-
-        conn->ksnc_rx_iov[0].iov_base = (void *)(((unsigned long)fmb->fmb_iov[0].iov_base) + sizeof (ptl_hdr_t));
-        conn->ksnc_rx_iov[0].iov_len = fmb->fmb_iov[0].iov_len - sizeof (ptl_hdr_t);
-
-        if (niov > 1)
-                memcpy (&conn->ksnc_rx_iov[1], &fmb->fmb_iov[1], (niov - 1) * sizeof (struct iovec));
-
-        conn->ksnc_rx_niov = niov;
-
-        CDEBUG (D_NET, "%p "LPX64"->"LPX64" %d reading body\n", conn,
-                conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, payload_nob);
-        return (0);
-}
-
-void
-ktoenal_fwd_parse (ksock_conn_t *conn)
-{
-        ksock_conn_t *conn2;
-        int           body_len;
-
-        CDEBUG (D_NET, "%p "LPX64"->"LPX64" %d parsing header\n", conn,
-                conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, conn->ksnc_rx_nob_left);
-
-        LASSERT (conn->ksnc_rx_state == SOCKNAL_RX_HEADER);
-        LASSERT (conn->ksnc_rx_scheduled);
-
-        body_len = conn->ksnc_hdr.payload_length;
-
-        if (body_len < 0)                               /* length corrupt */
-        {
-                CERROR ("dropping packet from "LPX64" for "LPX64": packet size %d illegal\n",
-                        conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, body_len);
-                ktoenal_new_packet (conn, 0);          /* on to new packet */
-                return;
-        }
-
-        if (body_len > PTL_MTU)         /* too big to forward */
-        {
-                CERROR ("dropping packet from "LPX64" for "LPX64": packet size %d too big\n",
-                        conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, body_len);
-                ktoenal_new_packet (conn, body_len);    /* on to new packet (skip this one's body) */
-                return;
-        }
-
-        conn2 = ktoenal_get_conn (conn->ksnc_hdr.dest_nid); /* should have gone direct */
-        if (conn2 != NULL)
-        {
-                CERROR ("dropping packet from "LPX64" for "LPX64": target is a peer\n",
-                        conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid);
-                ktoenal_put_conn (conn2);          /* drop ref from get above */
-
-                ktoenal_new_packet (conn, body_len);  /* on to next packet (skip this one's body) */
-                return;
-        }
-
-        conn->ksnc_rx_state = SOCKNAL_RX_GET_FMB;       /* Getting FMB now */
-        conn->ksnc_rx_nob_left = body_len;              /* stash packet size */
-        conn->ksnc_rx_nob_wanted = body_len;            /* (no slop) */
-}
-
-int
-ktoenal_new_packet (ksock_conn_t *conn, int nob_to_skip)
-{
-        static char ktoenal_slop_buffer[4096];
-
-        int   nob;
-        int   niov;
-        int   skipped;
-
-        if (nob_to_skip == 0)                   /* right at next packet boundary now */
-        {
-                conn->ksnc_rx_state = SOCKNAL_RX_HEADER;
-                conn->ksnc_rx_nob_wanted = sizeof (ptl_hdr_t);
-                conn->ksnc_rx_nob_left = sizeof (ptl_hdr_t);
-
-                conn->ksnc_rx_iov[0].iov_base = (char *)&conn->ksnc_hdr;
-                conn->ksnc_rx_iov[0].iov_len  = sizeof (ptl_hdr_t);
-                conn->ksnc_rx_niov = 1;
-                return (1);
-        }
-
-        /* set up to skip as much a possible now */
-        /* if there's more left (ran out of iov entries) we'll get called again */
-
-        conn->ksnc_rx_state = SOCKNAL_RX_SLOP;
-        conn->ksnc_rx_nob_left = nob_to_skip;
-        skipped = 0;
-        niov = 0;
-
-        do
-        {
-                nob = MIN (nob_to_skip, sizeof (ktoenal_slop_buffer));
-
-                conn->ksnc_rx_iov[niov].iov_base = ktoenal_slop_buffer;
-                conn->ksnc_rx_iov[niov].iov_len  = nob;
-                niov++;
-                skipped += nob;
-                nob_to_skip -=nob;
-
-        } while (nob_to_skip != 0 &&            /* mustn't overflow conn's rx iov */
-                 niov < sizeof (conn->ksnc_rx_iov)/sizeof (conn->ksnc_rx_iov[0]));
-
-        conn->ksnc_rx_niov = niov;
-        conn->ksnc_rx_nob_wanted = skipped;
-        return (0);
-}
-
-void
-ktoenal_process_receive (ksock_conn_t *conn, unsigned long *irq_flags)
-{
-        ksock_fmb_t *fmb;
-        int          len;
-        LASSERT (atomic_read (&conn->ksnc_refcount) > 0);
-        LASSERT (conn->ksnc_rx_scheduled);
-        LASSERT (conn->ksnc_rx_ready);
-
-        /* NB: sched lock held */
-        CDEBUG(D_NET, "conn %p\n", conn);
-
-        if (conn->ksnc_rx_state != SOCKNAL_RX_GET_FMB)     /* doesn't need a forwarding buffer */
-        {
-                spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-                goto try_read;
-        }
-
- get_fmb:
-        /* NB: sched lock held */
-        fmb = ktoenal_get_idle_fmb (conn);
-        if (fmb == NULL)                        /* conn descheduled waiting for idle fmb */
-                return;
-
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-        
-        if (ktoenal_init_fmb (conn, fmb)) /* packet forwarded ? */
-                goto out;               /* come back later for next packet */
-
- try_read:
-        /* NB: sched lock NOT held */
-        LASSERT (conn->ksnc_rx_state == SOCKNAL_RX_HEADER ||
-                 conn->ksnc_rx_state == SOCKNAL_RX_BODY ||
-                 conn->ksnc_rx_state == SOCKNAL_RX_BODY_FWD ||
-                 conn->ksnc_rx_state == SOCKNAL_RX_SLOP);
-
-        LASSERT (conn->ksnc_rx_niov > 0);
-        LASSERT (conn->ksnc_rx_nob_wanted > 0);
-
-        conn->ksnc_rx_ready = 0;                /* data ready may race with me and set ready */
-        mb();                                   /* => clear BEFORE trying to read */
-
-        /* NB ktoenal_recvmsg "consumes" the iov passed to it */
-        len = ktoenal_recvmsg(conn->ksnc_file,
-                               conn->ksnc_rx_iov, conn->ksnc_rx_niov,
-                               conn->ksnc_rx_nob_wanted);
-        CDEBUG (D_NET, "%p read(%d) %d\n", conn, conn->ksnc_rx_nob_wanted, len);
-
-        if (len <= 0)                           /* nothing ready (EAGAIN) or EOF or error */
-        {
-                if (len != -EAGAIN &&           /* ! nothing to read now */
-                    len != 0)                   /* ! nothing to read ever */
-                {
-                        // warning FIXME: handle socket errors properly
-                        CERROR ("Error socknal read(%d) %p: %d\n",
-                                conn->ksnc_rx_nob_wanted, conn, len);
-                }
-                goto out;                       /* come back when there's data ready */
-        }
-
-        LASSERT (len <= conn->ksnc_rx_nob_wanted);
-        conn->ksnc_rx_nob_wanted -= len;
-        conn->ksnc_rx_nob_left -= len;
-
-        if (conn->ksnc_rx_nob_wanted != 0)      /* short read */
-                goto out;                       /* try again later */
-
-        conn->ksnc_rx_ready = 1;                /* assume there's more to be had */
-
-        switch (conn->ksnc_rx_state)
-        {
-        case SOCKNAL_RX_HEADER:
-                if (conn->ksnc_hdr.dest_nid != ktoenal_lib.ni.nid) /* It's not for me */
-                {
-                        ktoenal_fwd_parse (conn);
-                        switch (conn->ksnc_rx_state)
-                        {
-                        case SOCKNAL_RX_HEADER: /* skipped this packet (zero payload) */
-                                goto out;       /* => come back later */
-                        case SOCKNAL_RX_SLOP:   /* skipping this packet's body */
-                                goto try_read;  /* => go read it */
-                        case SOCKNAL_RX_GET_FMB: /* forwarding */
-                                spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-                                goto get_fmb;   /* => go get a fwd msg buffer */
-                        default:
-                                break;
-                        }
-                        /* Not Reached */
-                        LBUG ();
-                }
-
-                PROF_START(lib_parse);
-                lib_parse(&ktoenal_lib, &conn->ksnc_hdr, conn); /* sets wanted_len, iovs etc */
-                PROF_FINISH(lib_parse);
-
-                if (conn->ksnc_rx_nob_wanted != 0) /* need to get some payload? */
-                {
-                        conn->ksnc_rx_state = SOCKNAL_RX_BODY;
-                        goto try_read;          /* go read the payload */
-                }
-                /* Fall through (completed packet for me) */
-
-        case SOCKNAL_RX_BODY:
-                atomic_inc (&ktoenal_packets_received);
-                lib_finalize(&ktoenal_lib, NULL, conn->ksnc_cookie); /* packet is done now */
-                /* Fall through */
-
-        case SOCKNAL_RX_SLOP:
-                if (ktoenal_new_packet (conn, conn->ksnc_rx_nob_left)) /* starting new packet? */
-                        goto out;               /* come back later */
-                goto try_read;                  /* try to finish reading slop now */
-
-        case SOCKNAL_RX_BODY_FWD:
-                CDEBUG (D_NET, "%p "LPX64"->"LPX64" %d fwd_start (got body)\n", conn,
-                        conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, conn->ksnc_rx_nob_left);
-
-                atomic_inc (&ktoenal_packets_received);
-
-                /* ktoenal_init_fmb() stashed router descriptor in conn->ksnc_cookie */
-                kpr_fwd_start (&ktoenal_data.ksnd_router, (kpr_fwd_desc_t *)conn->ksnc_cookie);
-
-                LASSERT (conn->ksnc_rx_nob_left == 0); /* no slop in forwarded packets */
-
-                ktoenal_new_packet (conn, 0);  /* on to next packet */
-                goto out;                       /* (later) */
-
-        default:
-                break;
-        }
-
-        /* Not Reached */
-        LBUG ();
-
- out:
-        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-
-        if (!conn->ksnc_rx_ready)               /* no data there to read? */
-        {
-                conn->ksnc_rx_scheduled = 0;    /* let socket callback schedule again */
-                ktoenal_put_conn (conn);       /* release scheduler's ref */
-        }
-        else                                    /* let scheduler call me again */
-                list_add_tail (&conn->ksnc_rx_list, &ktoenal_data.ksnd_rx_conns);
-}
-
-int
-ktoenal_recv(nal_cb_t *nal, void *private, lib_msg_t *msg,
-             unsigned int niov, struct iovec *iov, size_t mlen, size_t rlen)
-{
-        ksock_conn_t *conn = (ksock_conn_t *)private;
-        int           i;
-
-        conn->ksnc_cookie = msg;
-
-        LASSERT (niov <= PTL_MD_MAX_IOV);
-        for (i = 0; i < niov; i++)
-        {
-                conn->ksnc_rx_iov[i].iov_len = iov[i].iov_len;
-                conn->ksnc_rx_iov[i].iov_base = iov[i].iov_base;
-        }
-
-        conn->ksnc_rx_niov       = niov;
-        conn->ksnc_rx_nob_wanted = mlen;
-        conn->ksnc_rx_nob_left   = rlen;
-
-        return (rlen);
-}
-
-int
-ktoenal_scheduler (void *arg)
-{
-        unsigned long      flags;
-        ksock_conn_t      *conn;
-        int                rc;
-        int                nloops = 0;
-
-        kportal_daemonize ("ktoenal_sched");
-        kportal_blockallsigs ();
-        
-        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-
-        while (!ktoenal_data.ksnd_shuttingdown)
-        {
-                int did_something = 0;
-
-                /* Ensure I progress everything semi-fairly */
-
-                if (!list_empty (&ktoenal_data.ksnd_rx_conns))
-                {
-                        did_something = 1;
-                        conn = list_entry (ktoenal_data.ksnd_rx_conns.next,
-                                           ksock_conn_t, ksnc_rx_list);
-                        list_del (&conn->ksnc_rx_list);
-
-                        ktoenal_process_receive (conn, &flags); /* drops & regains ksnd_sched_lock */
-                }
-
-                if (!list_empty (&ktoenal_data.ksnd_tx_conns))
-                {
-                        did_something = 1;
-                        conn = list_entry (ktoenal_data.ksnd_tx_conns.next,
-                                           ksock_conn_t, ksnc_tx_list);
-
-                        list_del (&conn->ksnc_tx_list);
-                        ktoenal_process_transmit (conn, &flags); /* drops and regains ksnd_sched_lock */
-                }
-
-                if (!did_something ||           /* nothing to do */
-                    ++nloops == SOCKNAL_RESCHED) /* hogging CPU? */
-                {
-                        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-
-                        nloops = 0;
-
-                        if (!did_something) {   /* wait for something to do */
-                                rc = wait_event_interruptible (ktoenal_data.ksnd_sched_waitq,
-                                                               ktoenal_data.ksnd_shuttingdown ||
-                                                               !list_empty (&ktoenal_data.ksnd_rx_conns) ||
-                                                               !list_empty (&ktoenal_data.ksnd_tx_conns));
-                                LASSERT (rc == 0);
-                        } else 
-                                our_cond_resched();
-
-                        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-                }
-        }
-
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-        ktoenal_thread_fini ();
-        return (0);
-}
-
-
-int
-ktoenal_reaper (void *arg)
-{
-        unsigned long      flags;
-        ksock_conn_t      *conn;
-        int                rc;
-        
-        kportal_daemonize ("ktoenal_reaper");
-        kportal_blockallsigs ();
-
-        while (!ktoenal_data.ksnd_shuttingdown)
-        {
-                spin_lock_irqsave (&ktoenal_data.ksnd_reaper_lock, flags);
-
-                if (list_empty (&ktoenal_data.ksnd_reaper_list))
-                        conn = NULL;
-                else
-                {
-                        conn = list_entry (ktoenal_data.ksnd_reaper_list.next,
-                                           ksock_conn_t, ksnc_list);
-                        list_del (&conn->ksnc_list);
-                }
-
-                spin_unlock_irqrestore (&ktoenal_data.ksnd_reaper_lock, flags);
-
-                if (conn != NULL)
-                        ktoenal_close_conn (conn);
-                else {
-                        rc = wait_event_interruptible (ktoenal_data.ksnd_reaper_waitq,
-                                                       ktoenal_data.ksnd_shuttingdown ||
-                                                       !list_empty(&ktoenal_data.ksnd_reaper_list));
-                        LASSERT (rc == 0);
-                }
-        }
-
-        ktoenal_thread_fini ();
-        return (0);
-}
-
-#define POLLREAD        (POLLIN | POLLRDNORM | POLLRDBAND | POLLPRI)
-#define POLLWRITE       (POLLOUT | POLLWRNORM | POLLWRBAND)
-
-int
-ktoenal_pollthread(void *arg)
-{
-        unsigned int mask;
-        struct list_head *tmp;
-        ksock_conn_t *conn;
-        
-        /* Save the task struct for waking it up */
-        ktoenal_data.ksnd_pollthread_tsk = current; 
-        
-        kportal_daemonize ("ktoenal_pollthread");
-        kportal_blockallsigs ();
-        
-        poll_initwait(&ktoenal_data.ksnd_pwait);
-        
-        while(!ktoenal_data.ksnd_shuttingdown) {
-                
-                set_current_state(TASK_INTERRUPTIBLE);
-                
-                read_lock (&ktoenal_data.ksnd_socklist_lock);
-                list_for_each(tmp, &ktoenal_data.ksnd_socklist) {
-                        
-                        conn = list_entry(tmp, ksock_conn_t, ksnc_list);
-                        atomic_inc(&conn->ksnc_refcount);
-                        read_unlock (&ktoenal_data.ksnd_socklist_lock);
-                        
-                        mask = conn->ksnc_file->f_op->poll(conn->ksnc_file,
-                                  ktoenal_data.ksnd_slistchange ? 
-                                  &ktoenal_data.ksnd_pwait : NULL);
-                         
-                        if(mask & POLLREAD) {
-                                ktoenal_data_ready(conn);
-                                                        
-                        } 
-                        if (mask & POLLWRITE) {
-                                ktoenal_write_space(conn);  
-                              
-                        }
-                        if (mask & (POLLERR | POLLHUP)) {
-                                         /* Do error processing */          
-                        }      
-                        
-                        read_lock (&ktoenal_data.ksnd_socklist_lock);
-                        if(atomic_dec_and_test(&conn->ksnc_refcount))
-                                _ktoenal_put_conn(conn);
-                }
-                ktoenal_data.ksnd_slistchange = 0;
-                read_unlock (&ktoenal_data.ksnd_socklist_lock);
-                
-                schedule_timeout(MAX_SCHEDULE_TIMEOUT);
-                if(ktoenal_data.ksnd_slistchange) {
-                        poll_freewait(&ktoenal_data.ksnd_pwait); 
-                        poll_initwait(&ktoenal_data.ksnd_pwait);
-                }
-         }
-        poll_freewait(&ktoenal_data.ksnd_pwait);
-        ktoenal_thread_fini();
-        return (0);
-}
-
-void
-ktoenal_data_ready (ksock_conn_t *conn)
-{
-        unsigned long  flags;
-        ENTRY;
-
-        if (!test_and_set_bit (0, &conn->ksnc_rx_ready)) { 
-                spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-
-                if (!conn->ksnc_rx_scheduled) {  /* not being progressed */
-                        list_add_tail (&conn->ksnc_rx_list, 
-                                        &ktoenal_data.ksnd_rx_conns);
-                        conn->ksnc_rx_scheduled = 1;
-                        /* extra ref for scheduler */
-                        atomic_inc (&conn->ksnc_refcount);
-
-                        /* This is done to avoid the effects of a sequence
-                         * of events in which the rx_ready is lost
-                         */
-                        conn->ksnc_rx_ready=1;
-                          
-                        if (waitqueue_active (&ktoenal_data.ksnd_sched_waitq))
-                                wake_up (&ktoenal_data.ksnd_sched_waitq);
-                }
-
-                spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-        }
-
-        EXIT;
-}
-
-void
-ktoenal_write_space (ksock_conn_t *conn)
-{
-        unsigned long  flags;
-
-        CDEBUG (D_NET, "conn %p%s%s%s\n",
-                         conn,
-                        (conn == NULL) ? "" : (test_bit (0, &conn->ksnc_tx_ready) ? " ready" : " blocked"),
-                        (conn == NULL) ? "" : (conn->ksnc_tx_scheduled ? " scheduled" : " idle"),
-                        (conn == NULL) ? "" : (list_empty (&conn->ksnc_tx_queue) ? " empty" : " queued"));
-
-
-        if (!test_and_set_bit (0, &conn->ksnc_tx_ready)) {
-                spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-
-                if (!list_empty (&conn->ksnc_tx_queue) && /* packets to send */
-                                !conn->ksnc_tx_scheduled) { /* not being progressed */
-
-                        list_add_tail (&conn->ksnc_tx_list, 
-                                        &ktoenal_data.ksnd_tx_conns);
-                        conn->ksnc_tx_scheduled = 1;
-                        /* extra ref for scheduler */
-                        atomic_inc (&conn->ksnc_refcount);
-
-                        if (waitqueue_active (&ktoenal_data.ksnd_sched_waitq))
-                                wake_up (&ktoenal_data.ksnd_sched_waitq);
-                }
-                spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-        }
-}
-
-nal_cb_t ktoenal_lib = {
-        nal_data:       &ktoenal_data,                /* NAL private data */
-        cb_send:         ktoenal_send,
-        cb_recv:         ktoenal_recv,
-        cb_read:         ktoenal_read,
-        cb_write:        ktoenal_write,
-        cb_callback:     ktoenal_callback,
-        cb_malloc:       ktoenal_malloc,
-        cb_free:         ktoenal_free,
-        cb_printf:       ktoenal_printf,
-        cb_cli:          ktoenal_cli,
-        cb_sti:          ktoenal_sti,
-        cb_dist:         ktoenal_dist
-};
index 8449511..1af687c 100644 (file)
@@ -931,7 +931,6 @@ char *portals_nid2str(int nal, ptl_nid_t nid, char *str)
         case QSWNAL:
         case GMNAL:
         case IBNAL:
         case QSWNAL:
         case GMNAL:
         case IBNAL:
-        case TOENAL:
         case SCIMACNAL:
                 sprintf(str, "%u:%u", (__u32)(nid >> 32), (__u32)nid);
                 break;
         case SCIMACNAL:
                 sprintf(str, "%u:%u", (__u32)(nid >> 32), (__u32)nid);
                 break;
index 55e1935..2768c8d 100644 (file)
@@ -414,8 +414,6 @@ kportal_get_ni (int nal)
                 return (PORTAL_SYMBOL_GET(kqswnal_ni));
         case SOCKNAL:
                 return (PORTAL_SYMBOL_GET(ksocknal_ni));
                 return (PORTAL_SYMBOL_GET(kqswnal_ni));
         case SOCKNAL:
                 return (PORTAL_SYMBOL_GET(ksocknal_ni));
-        case TOENAL:
-                return  (PORTAL_SYMBOL_GET(ktoenal_ni));
         case GMNAL:
                 return  (PORTAL_SYMBOL_GET(kgmnal_ni));
         case IBNAL:
         case GMNAL:
                 return  (PORTAL_SYMBOL_GET(kgmnal_ni));
         case IBNAL:
@@ -444,9 +442,6 @@ kportal_put_ni (int nal)
         case SOCKNAL:
                 PORTAL_SYMBOL_PUT(ksocknal_ni);
                 break;
         case SOCKNAL:
                 PORTAL_SYMBOL_PUT(ksocknal_ni);
                 break;
-        case TOENAL:
-                PORTAL_SYMBOL_PUT(ktoenal_ni);
-                break;
         case GMNAL:
                 PORTAL_SYMBOL_PUT(kgmnal_ni);
                 break;
         case GMNAL:
                 PORTAL_SYMBOL_PUT(kgmnal_ni);
                 break;
index 2a96f55..1e40ed8 100644 (file)
@@ -298,7 +298,7 @@ static void /*__exit*/ pingsrv_cleanup(void)
 
 MODULE_PARM(nal, "i");
 MODULE_PARM_DESC(nal, "Use the specified NAL "
 
 MODULE_PARM(nal, "i");
 MODULE_PARM_DESC(nal, "Use the specified NAL "
-                "(6-kscimacnal, 4-toenal, 2-ksocknal, 1-kqswnal)");
+                "(6-kscimacnal, 2-ksocknal, 1-kqswnal)");
  
 MODULE_AUTHOR("Brian Behlendorf (LLNL)");
 MODULE_DESCRIPTION("A kernel space ping server for portals testing");
  
 MODULE_AUTHOR("Brian Behlendorf (LLNL)");
 MODULE_DESCRIPTION("A kernel space ping server for portals testing");
index 0d52e1f..b8bda29 100644 (file)
@@ -285,7 +285,7 @@ static void /*__exit*/ pingsrv_cleanup(void)
 
 MODULE_PARM(nal, "i");
 MODULE_PARM_DESC(nal, "Use the specified NAL "
 
 MODULE_PARM(nal, "i");
 MODULE_PARM_DESC(nal, "Use the specified NAL "
-                "(6-kscimacnal, 4-toenal, 2-ksocknal, 1-kqswnal)");
+                "(6-kscimacnal, 2-ksocknal, 1-kqswnal)");
  
 MODULE_AUTHOR("Brian Behlendorf (LLNL)");
 MODULE_DESCRIPTION("A kernel space ping server for portals testing");
  
 MODULE_AUTHOR("Brian Behlendorf (LLNL)");
 MODULE_DESCRIPTION("A kernel space ping server for portals testing");
index de01bc7..be60509 100644 (file)
@@ -9,13 +9,6 @@ else
 fi
 
 case "$1" in
 fi
 
 case "$1" in
-       toe)
-               /sbin/insmod  ../oslib/portals.o
-               /sbin/insmod ../toenal/ktoenal.o
-               /sbin/insmod ./$PING
-               echo ktoenal > /tmp/nal
-       ;;
-       
        tcp)
                /sbin/insmod  ../oslib/portals.o
                /sbin/insmod ../socknal/ksocknal.o
        tcp)
                /sbin/insmod  ../oslib/portals.o
                /sbin/insmod ../socknal/ksocknal.o
@@ -38,7 +31,7 @@ case "$1" in
        ;;
        
        *)
        ;;
        
        *)
-               echo "Usage : ${0} < tcp | toe | elan | gm>"
+               echo "Usage : ${0} < tcp | elan | gm>"
                exit 1;
 esac
 exit 0;
                exit 1;
 esac
 exit 0;
index 4f66eeb..9b5ccf6 100644 (file)
@@ -9,13 +9,6 @@ else
 fi
 
 case "$1" in
 fi
 
 case "$1" in
-       toe)
-               /sbin/insmod  ../oslib/portals.o
-               /sbin/insmod ../toenal/ktoenal.o
-               /sbin/insmod ./$PING nal=4
-               echo ktoenal > /tmp/nal
-       ;;
-       
        tcp)
                /sbin/insmod  ../oslib/portals.o
                /sbin/insmod ../socknal/ksocknal.o
        tcp)
                /sbin/insmod  ../oslib/portals.o
                /sbin/insmod ../socknal/ksocknal.o
@@ -38,7 +31,7 @@ case "$1" in
        ;;
        
        *)
        ;;
        
        *)
-               echo "Usage : ${0} < tcp | toe | elan | gm>"
+               echo "Usage : ${0} < tcp | elan | gm>"
                exit 1;
 esac
 ../utils/acceptor 9999&
                exit 1;
 esac
 ../utils/acceptor 9999&
index b46ee16..3c7ec20 100644 (file)
@@ -63,7 +63,6 @@ typedef struct
 static name2num_t nalnames[] = {
         {"any",         0},
         {"tcp",                SOCKNAL},
 static name2num_t nalnames[] = {
         {"any",         0},
         {"tcp",                SOCKNAL},
-        {"toe",                TOENAL},
         {"elan",       QSWNAL},
         {"gm",         GMNAL},
         {"ib",         IBNAL},
         {"elan",       QSWNAL},
         {"gm",         GMNAL},
         {"ib",         IBNAL},
@@ -651,7 +650,7 @@ int jt_ptl_connect(int argc, char **argv)
                 return 0;
         }
 
                 return 0;
         }
 
-        if (!g_nal_is_compatible (argv[0], SOCKNAL, TOENAL, 0))
+        if (!g_nal_is_compatible (argv[0], SOCKNAL, 0))
                 return -1;
         
         rc = ptl_parse_ipaddr (&ipaddr, argv[1]);
                 return -1;
         
         rc = ptl_parse_ipaddr (&ipaddr, argv[1]);
@@ -797,7 +796,7 @@ int jt_ptl_disconnect(int argc, char **argv)
                 return 0;
         }
 
                 return 0;
         }
 
-        if (!g_nal_is_compatible (NULL, SOCKNAL, TOENAL, 0))
+        if (!g_nal_is_compatible (NULL, SOCKNAL, 0))
                 return 0;
 
         if (argc >= 2 &&
                 return 0;
 
         if (argc >= 2 &&
@@ -838,7 +837,7 @@ int jt_ptl_push_connection (int argc, char **argv)
                 return 0;
         }
 
                 return 0;
         }
 
-        if (!g_nal_is_compatible (argv[0], SOCKNAL, TOENAL, 0))
+        if (!g_nal_is_compatible (argv[0], SOCKNAL, 0))
                 return -1;
         
         if (argc > 1 &&
                 return -1;
         
         if (argc > 1 &&
index 3d2fd24..f4f6b5c 100644 (file)
@@ -53,7 +53,7 @@ AC_OUTPUT([Makefile lvfs/Makefile portals/Makefile portals/Kernelenv \
           portals/unals/Makefile portals/knals/Makefile \
           portals/router/Makefile portals/knals/socknal/Makefile \
           portals/knals/gmnal/Makefile portals/knals/qswnal/Makefile \
           portals/unals/Makefile portals/knals/Makefile \
           portals/router/Makefile portals/knals/socknal/Makefile \
           portals/knals/gmnal/Makefile portals/knals/qswnal/Makefile \
-         portals/knals/scimacnal/Makefile portals/knals/toenal/Makefile \
+         portals/knals/scimacnal/Makefile \
          portals/knals/ibnal/Makefile \
           portals/utils/Makefile portals/tests/Makefile portals/doc/Makefile \
           obdecho/Makefile ptlrpc/Makefile liblustre/Makefile \
          portals/knals/ibnal/Makefile \
           portals/utils/Makefile portals/tests/Makefile portals/doc/Makefile \
           obdecho/Makefile ptlrpc/Makefile liblustre/Makefile \
index 87dba3d..b956347 100644 (file)
@@ -46,7 +46,6 @@ char *portals_nid2str(int nal, ptl_nid_t nid, char *str)
         case QSWNAL:
         case GMNAL:
         case IBNAL:
         case QSWNAL:
         case GMNAL:
         case IBNAL:
-        case TOENAL:
         case SCIMACNAL:
                 sprintf(str, "%u:%u", (__u32)(nid >> 32), (__u32)nid);
                 break;
         case SCIMACNAL:
                 sprintf(str, "%u:%u", (__u32)(nid >> 32), (__u32)nid);
                 break;
index ec0d06c..baf564a 100644 (file)
@@ -98,7 +98,6 @@ char *portals_nid2str(int nal, ptl_nid_t nid, char *str)
         case QSWNAL:
         case GMNAL:
         case IBNAL:
         case QSWNAL:
         case GMNAL:
         case IBNAL:
-        case TOENAL:
         case SCIMACNAL:
                 sprintf(str, "%u:%u", (__u32)(nid >> 32), (__u32)nid);
                 break;
         case SCIMACNAL:
                 sprintf(str, "%u:%u", (__u32)(nid >> 32), (__u32)nid);
                 break;
index 44657e0..bacf532 100644 (file)
@@ -29,6 +29,6 @@ AM_CONFIG_HEADER(include/config.h)
 AC_OUTPUT([Makefile Kernelenv libcfs/Makefile portals/Makefile \
           unals/Makefile knals/Makefile router/Makefile \
          knals/socknal/Makefile knals/gmnal/Makefile knals/qswnal/Makefile \
 AC_OUTPUT([Makefile Kernelenv libcfs/Makefile portals/Makefile \
           unals/Makefile knals/Makefile router/Makefile \
          knals/socknal/Makefile knals/gmnal/Makefile knals/qswnal/Makefile \
-         knals/scimacnal/Makefile knals/toenal/Makefile knals/ibnal/Makefile\
+         knals/scimacnal/Makefile knals/ibnal/Makefile\
           utils/Makefile tests/Makefile doc/Makefile ])
 
           utils/Makefile tests/Makefile doc/Makefile ])
 
index 3ea46d1..815375c 100644 (file)
@@ -1026,21 +1026,20 @@ static inline int portal_ioctl_getdata(char *buf, char *end, void *arg)
 #define IOC_PORTAL_MAX_NR                             42
 
 enum {
 #define IOC_PORTAL_MAX_NR                             42
 
 enum {
-        QSWNAL   1,
-        SOCKNAL,
-        GMNAL,
-        TOENAL,
-        TCPNAL,
-        SCIMACNAL,
-        ROUTER,
-        IBNAL,
+        QSWNAL    = 1,
+        SOCKNAL   = 2,
+        GMNAL     = 3,
+        /*          4 unused */
+        TCPNAL    = 5,
+        SCIMACNAL = 6,
+        ROUTER    = 7,
+        IBNAL     = 8,
         NAL_ENUM_END_MARKER
 };
 
 #ifdef __KERNEL__
 extern ptl_handle_ni_t  kqswnal_ni;
 extern ptl_handle_ni_t  ksocknal_ni;
         NAL_ENUM_END_MARKER
 };
 
 #ifdef __KERNEL__
 extern ptl_handle_ni_t  kqswnal_ni;
 extern ptl_handle_ni_t  ksocknal_ni;
-extern ptl_handle_ni_t  ktoenal_ni;
 extern ptl_handle_ni_t  kgmnal_ni;
 extern ptl_handle_ni_t  kibnal_ni;
 extern ptl_handle_ni_t  kscimacnal_ni;
 extern ptl_handle_ni_t  kgmnal_ni;
 extern ptl_handle_ni_t  kibnal_ni;
 extern ptl_handle_ni_t  kscimacnal_ni;
index 25aab9d..df6ee5c 100644 (file)
@@ -3,5 +3,5 @@
 # This code is issued under the GNU General Public License.
 # See the file COPYING in this distribution
 
 # This code is issued under the GNU General Public License.
 # See the file COPYING in this distribution
 
-DIST_SUBDIRS= socknal toenal qswnal gmnal scimacnal ibnal
-SUBDIRS= socknal toenal        @QSWNAL@ @GMNAL@ @SCIMACNAL@ @IBNAL@
+DIST_SUBDIRS= socknal qswnal gmnal scimacnal ibnal
+SUBDIRS= socknal @QSWNAL@ @GMNAL@ @SCIMACNAL@ @IBNAL@
diff --git a/lustre/portals/knals/toenal/.cvsignore b/lustre/portals/knals/toenal/.cvsignore
deleted file mode 100644 (file)
index e995588..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-.deps
-Makefile
-Makefile.in
diff --git a/lustre/portals/knals/toenal/Makefile.am b/lustre/portals/knals/toenal/Makefile.am
deleted file mode 100644 (file)
index 9bfff64..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (C) 2001  Cluster File Systems, Inc.
-#
-# This code is issued under the GNU General Public License.
-# See the file COPYING in this distribution
-
-include ../../Rules.linux
-
-MODULE = ktoenal
-modulenet_DATA = ktoenal.o
-EXTRA_PROGRAMS = ktoenal
-
-DEFS =
-ktoenal_SOURCES = toenal.c toenal_cb.c toenal.h
diff --git a/lustre/portals/knals/toenal/toenal.c b/lustre/portals/knals/toenal/toenal.c
deleted file mode 100644 (file)
index 07b93cb..0000000
+++ /dev/null
@@ -1,629 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * Copyright (C) 2001, 2002 Cluster File Systems, Inc.
- *   Author: Zach Brown <zab@zabbo.net>
- *   Author: Peter J. Braam <braam@clusterfs.com>
- *   Author: Phil Schwan <phil@clusterfs.com>
- *   Author: Eric Barton <eric@bartonsoftware.com>
- *   Author: Kedar Sovani <kedar@calsoftinc.com>
- *   Author: Amey Inamdar <amey@calsoftinc.com>
- *
- *   This file is part of Portals, http://www.sf.net/projects/lustre/
- *
- *   Portals is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   Portals is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with Portals; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-#include <linux/poll.h>
-#include "toenal.h"
-
-ptl_handle_ni_t         ktoenal_ni;
-static nal_t            ktoenal_api;
-static ksock_nal_data_t ktoenal_data;
-
-/*
-ksocknal_interface_t ktoenal_interface = {
-        ksni_add_sock:         ktoenal_add_sock,
-        ksni_close_sock:       ktoenal_close_sock,
-        ksni_set_mynid:                ktoenal_set_mynid,
-};
-*/
-
-kpr_nal_interface_t ktoenal_router_interface = {
-        kprni_nalid:   TOENAL,
-        kprni_arg:     &ktoenal_data,
-        kprni_fwd:     ktoenal_fwd_packet,
-};
-
-
-int
-ktoenal_api_forward(nal_t *nal, int id, void *args, size_t args_len,
-                       void *ret, size_t ret_len)
-{
-        ksock_nal_data_t *k;
-        nal_cb_t *nal_cb;
-
-        k = nal->nal_data;
-        nal_cb = k->ksnd_nal_cb;
-
-        lib_dispatch(nal_cb, k, id, args, ret); /* ktoenal_send needs k */
-        return PTL_OK;
-}
-
-int
-ktoenal_api_shutdown(nal_t *nal, int ni)
-{
-       CDEBUG (D_NET, "closing all connections\n");
-
-        return ktoenal_close_sock(0);          /* close all sockets */
-}
-
-void
-ktoenal_api_yield(nal_t *nal)
-{
-        our_cond_resched();
-        return;
-}
-
-void
-ktoenal_api_lock(nal_t *nal, unsigned long *flags)
-{
-        ksock_nal_data_t *k;
-        nal_cb_t *nal_cb;
-
-        k = nal->nal_data;
-        nal_cb = k->ksnd_nal_cb;
-        nal_cb->cb_cli(nal_cb,flags);
-}
-
-void
-ktoenal_api_unlock(nal_t *nal, unsigned long *flags)
-{
-        ksock_nal_data_t *k;
-        nal_cb_t *nal_cb;
-
-        k = nal->nal_data;
-        nal_cb = k->ksnd_nal_cb;
-        nal_cb->cb_sti(nal_cb,flags);
-}
-
-nal_t *
-ktoenal_init(int interface, ptl_pt_index_t ptl_size,
-              ptl_ac_index_t ac_size, ptl_pid_t requested_pid)
-{
-        CDEBUG(D_NET, "calling lib_init with nid "LPX64"\n",
-               ktoenal_data.ksnd_mynid);
-        lib_init(&ktoenal_lib, ktoenal_data.ksnd_mynid, 0, 10, ptl_size,
-                 ac_size);
-        return (&ktoenal_api);
-}
-
-/*
- *  EXTRA functions follow
- */
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-#define SOCKET_I(inode) (&(inode)->u.socket_i)
-#endif
-static __inline__ struct socket *
-socki_lookup(struct inode *inode)
-{
-        return SOCKET_I(inode);
-}
-
-int
-ktoenal_set_mynid(ptl_nid_t nid)
-{
-        lib_ni_t *ni = &ktoenal_lib.ni;
-
-        /* FIXME: we have to do this because we call lib_init() at module
-         * insertion time, which is before we have 'mynid' available.  lib_init
-         * sets the NAL's nid, which it uses to tell other nodes where packets
-         * are coming from.  This is not a very graceful solution to this
-         * problem. */
-
-        CDEBUG(D_IOCTL, "setting mynid to "LPX64" (old nid="LPX64")\n", nid, ni->nid);
-
-        ktoenal_data.ksnd_mynid = nid;
-        ni->nid = nid;
-        return (0);
-}
-
-int
-ktoenal_add_sock (ptl_nid_t nid, int fd)
-{
-        unsigned long      flags;
-        ksock_conn_t      *conn;
-        struct file       *file = NULL;
-        struct socket     *sock = NULL;
-        int                ret;
-        ENTRY;
-
-        file = fget(fd);
-        if (file == NULL)
-                RETURN(-EINVAL);
-
-        ret = -EINVAL;
-        sock = socki_lookup(file->f_dentry->d_inode);
-        if (sock == NULL)
-                GOTO(error, ret);
-
-        ret = -ENOMEM;
-        PORTAL_ALLOC(conn, sizeof(*conn));
-        if (!conn)
-                GOTO(error, ret);
-
-        memset (conn, 0, sizeof (conn));        /* zero for consistency */
-        file->f_flags |= O_NONBLOCK;  /*  Does this have any conflicts */
-        conn->ksnc_file = file;
-        conn->ksnc_sock = sock;
-        conn->ksnc_peernid = nid;
-        atomic_set (&conn->ksnc_refcount, 1);    /* 1 ref for socklist */
-
-        conn->ksnc_rx_ready = 0;
-        conn->ksnc_rx_scheduled = 0;
-        ktoenal_new_packet (conn, 0);
-
-        INIT_LIST_HEAD (&conn->ksnc_tx_queue);
-        conn->ksnc_tx_ready = 0;
-        conn->ksnc_tx_scheduled = 0;
-
-        LASSERT (!in_interrupt());
-        write_lock_irqsave (&ktoenal_data.ksnd_socklist_lock, flags);
-
-        list_add(&conn->ksnc_list, &ktoenal_data.ksnd_socklist);
-        write_unlock_irqrestore (&ktoenal_data.ksnd_socklist_lock, flags);
-
-        ktoenal_data_ready(conn);
-        ktoenal_write_space(conn);
-
-        ktoenal_data.ksnd_slistchange = 1;
-        wake_up_process(ktoenal_data.ksnd_pollthread_tsk);
-        /* Schedule pollthread so that it will poll
-         * for newly created socket
-         */
-
-
-        CDEBUG(D_IOCTL, "conn [%p] registered for nid "LPX64"\n",
-               conn, conn->ksnc_peernid);
-
-        /* Can't unload while connection active */
-        PORTAL_MODULE_USE;
-        RETURN(0);
-
-error:
-        fput(file);
-        return (ret);
-}
-
-/* Passing in a zero nid will close all connections */
-int
-ktoenal_close_sock(ptl_nid_t nid)
-{
-        unsigned long     flags;
-        ksock_conn_t      *conn;
-        LIST_HEAD         (death_row);
-        struct list_head  *tmp;
-
-        LASSERT (!in_interrupt());
-        write_lock_irqsave (&ktoenal_data.ksnd_socklist_lock, flags);
-
-        if (nid == 0)                           /* close ALL connections */
-        {
-                /* insert 'death row' into the socket list... */
-                list_add (&death_row, &ktoenal_data.ksnd_socklist);
-                /* ...extract and reinitialise the socket list itself... */
-                list_del_init (&ktoenal_data.ksnd_socklist);
-                /* ...and voila, death row is the proud owner of all conns */
-        } else list_for_each (tmp, &ktoenal_data.ksnd_socklist) {
-
-                conn = list_entry (tmp, ksock_conn_t, ksnc_list);
-
-                if (conn->ksnc_peernid == nid)
-                {
-                        list_del (&conn->ksnc_list);
-                        list_add (&conn->ksnc_list, &death_row);
-                        break;
-                }
-        }
-
-
-        write_unlock_irqrestore (&ktoenal_data.ksnd_socklist_lock, flags);
-
-        if (list_empty (&death_row))
-                return (-ENOENT);
-
-        do {
-                conn = list_entry (death_row.next, ksock_conn_t, ksnc_list);
-                list_del (&conn->ksnc_list);
-                ktoenal_put_conn (conn);       /* drop ref for ksnd_socklist */
-        } while (!list_empty (&death_row));
-
-        ktoenal_data.ksnd_slistchange = 1;
-        wake_up_process(ktoenal_data.ksnd_pollthread_tsk);
-
-        return (0);
-}
-
-
-ksock_conn_t *
-ktoenal_get_conn (ptl_nid_t nid)
-{
-        struct list_head *tmp;
-        ksock_conn_t     *conn;
-
-        PROF_START(conn_list_walk);
-
-        read_lock (&ktoenal_data.ksnd_socklist_lock);
-
-        list_for_each(tmp, &ktoenal_data.ksnd_socklist) {
-
-                conn = list_entry(tmp, ksock_conn_t, ksnc_list);
-
-                if (conn->ksnc_peernid == nid)
-                {
-                        /* caller is referencing */
-                        atomic_inc (&conn->ksnc_refcount);
-
-                        read_unlock (&ktoenal_data.ksnd_socklist_lock);
-
-                        CDEBUG(D_NET, "got conn [%p] -> "LPX64" (%d)\n",
-                               conn, nid, atomic_read (&conn->ksnc_refcount));
-
-                        PROF_FINISH(conn_list_walk);
-                        return (conn);
-                }
-        }
-
-        read_unlock (&ktoenal_data.ksnd_socklist_lock);
-
-        CDEBUG(D_NET, "No connection found when looking for nid "LPX64"\n", nid);
-        PROF_FINISH(conn_list_walk);
-        return (NULL);
-}
-
-void
-ktoenal_close_conn (ksock_conn_t *conn)
-{
-        CDEBUG (D_NET, "connection [%p] closed \n", conn);
-
-        fput (conn->ksnc_file);
-        PORTAL_FREE (conn, sizeof (*conn));
-        /* One less connection keeping us hanging on */
-        PORTAL_MODULE_UNUSE;
-}
-
-void
-_ktoenal_put_conn (ksock_conn_t *conn)
-{
-        unsigned long flags;
-
-        CDEBUG (D_NET, "connection [%p] handed the black spot\n", conn);
-
-        /* "But what is the black spot, captain?" I asked.
-         * "That's a summons, mate..." */
-
-        LASSERT (atomic_read (&conn->ksnc_refcount) == 0);
-        LASSERT (!conn->ksnc_rx_scheduled);
-
-        if (!in_interrupt())
-        {
-                ktoenal_close_conn (conn);
-                return;
-        }
-
-        spin_lock_irqsave (&ktoenal_data.ksnd_reaper_lock, flags);
-
-        list_add (&conn->ksnc_list, &ktoenal_data.ksnd_reaper_list);
-        wake_up (&ktoenal_data.ksnd_reaper_waitq);
-
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_reaper_lock, flags);
-}
-
-void
-ktoenal_free_buffers (void)
-{
-        if (ktoenal_data.ksnd_fmbs != NULL)
-        {
-                ksock_fmb_t *fmb = (ksock_fmb_t *)ktoenal_data.ksnd_fmbs;
-                int          i;
-                int          j;
-
-                for (i = 0; i < (SOCKNAL_SMALL_FWD_NMSGS + SOCKNAL_LARGE_FWD_NMSGS); i++, fmb++)
-                        for (j = 0; j < fmb->fmb_npages; j++)
-                                if (fmb->fmb_pages[j] != NULL)
-                                        __free_page (fmb->fmb_pages[j]);
-
-                PORTAL_FREE (ktoenal_data.ksnd_fmbs,
-                             sizeof (ksock_fmb_t) * (SOCKNAL_SMALL_FWD_NMSGS + SOCKNAL_LARGE_FWD_NMSGS));
-        }
-
-        if (ktoenal_data.ksnd_ltxs != NULL)
-                PORTAL_FREE (ktoenal_data.ksnd_ltxs,
-                             sizeof (ksock_ltx_t) * (SOCKNAL_NLTXS + SOCKNAL_NNBLK_LTXS));
-}
-
-int
-ktoenal_cmd(struct portals_cfg *pcfg, void * private)
-{
-        int rc = -EINVAL;
-
-        LASSERT (pcfg != NULL);
-
-        switch(pcfg->pcfg_command) {
-        case NAL_CMD_REGISTER_PEER_FD: {
-                rc = ktoenal_add_sock(pcfg->pcfg_nid, pcfg->pcfg_fd);
-                break;
-        }
-        case NAL_CMD_CLOSE_CONNECTION: {
-                rc = ktoenal_close_sock(pcfg->pcfg_nid);
-                break;
-        }
-        case NAL_CMD_REGISTER_MYNID: {
-                rc = ktoenal_set_mynid (pcfg->pcfg_nid);
-                break;
-        }
-        }
-
-        return rc;
-}
-
-
-void /*__exit*/
-ktoenal_module_fini (void)
-{
-        CDEBUG(D_MALLOC, "before NAL cleanup: kmem %d\n",
-               atomic_read (&portal_kmemory));
-
-        switch (ktoenal_data.ksnd_init)
-        {
-        default:
-                LASSERT (0);
-
-        case SOCKNAL_INIT_ALL:
-                kportal_nal_unregister(TOENAL);
-                PORTAL_SYMBOL_UNREGISTER (ktoenal_ni);
-                /* fall through */
-
-        case SOCKNAL_INIT_PTL:
-                PtlNIFini(ktoenal_ni);
-                lib_fini(&ktoenal_lib);
-                /* fall through */
-
-        case SOCKNAL_INIT_DATA:
-                /* Module refcount only gets to zero when all connections
-                 * have been closed so all lists must be empty */
-                LASSERT (list_empty (&ktoenal_data.ksnd_socklist));
-                LASSERT (list_empty (&ktoenal_data.ksnd_reaper_list));
-                LASSERT (list_empty (&ktoenal_data.ksnd_rx_conns));
-                LASSERT (list_empty (&ktoenal_data.ksnd_tx_conns));
-                LASSERT (list_empty (&ktoenal_data.ksnd_small_fmp.fmp_blocked_conns));
-                LASSERT (list_empty (&ktoenal_data.ksnd_large_fmp.fmp_blocked_conns));
-
-                kpr_shutdown (&ktoenal_data.ksnd_router); /* stop router calling me */
-
-                /* flag threads to terminate; wake and wait for them to die */
-                ktoenal_data.ksnd_shuttingdown = 1;
-                wake_up_all (&ktoenal_data.ksnd_reaper_waitq);
-                wake_up_all (&ktoenal_data.ksnd_sched_waitq);
-                wake_up_process(ktoenal_data.ksnd_pollthread_tsk);
-
-                while (atomic_read (&ktoenal_data.ksnd_nthreads) != 0)
-                {
-                        CDEBUG (D_NET, "waitinf for %d threads to terminate\n",
-                                atomic_read (&ktoenal_data.ksnd_nthreads));
-                        set_current_state (TASK_UNINTERRUPTIBLE);
-                        schedule_timeout (HZ);
-                }
-
-                kpr_deregister (&ktoenal_data.ksnd_router);
-
-                ktoenal_free_buffers();
-                /* fall through */
-
-        case SOCKNAL_INIT_NOTHING:
-                break;
-        }
-
-        CDEBUG(D_MALLOC, "after NAL cleanup: kmem %d\n",
-               atomic_read (&portal_kmemory));
-
-        printk(KERN_INFO "Lustre: Routing socket NAL unloaded (final mem %d)\n",
-               atomic_read(&portal_kmemory));
-}
-
-int __init
-ktoenal_module_init (void)
-{
-        int   pkmem = atomic_read(&portal_kmemory);
-        int   rc;
-        int   i;
-        int   j;
-
-        /* packet descriptor must fit in a router descriptor's scratchpad */
-        LASSERT(sizeof (ksock_tx_t) <= sizeof (kprfd_scratch_t));
-
-        LASSERT (ktoenal_data.ksnd_init == SOCKNAL_INIT_NOTHING);
-
-        ktoenal_api.forward  = ktoenal_api_forward;
-        ktoenal_api.shutdown = ktoenal_api_shutdown;
-        ktoenal_api.yield    = ktoenal_api_yield;
-        ktoenal_api.validate = NULL;           /* our api validate is a NOOP */
-        ktoenal_api.lock     = ktoenal_api_lock;
-        ktoenal_api.unlock   = ktoenal_api_unlock;
-        ktoenal_api.nal_data = &ktoenal_data;
-
-        ktoenal_lib.nal_data = &ktoenal_data;
-
-        memset (&ktoenal_data, 0, sizeof (ktoenal_data)); /* zero pointers */
-
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_socklist);
-        rwlock_init(&ktoenal_data.ksnd_socklist_lock);
-
-        ktoenal_data.ksnd_nal_cb = &ktoenal_lib;
-        spin_lock_init (&ktoenal_data.ksnd_nal_cb_lock);
-
-        spin_lock_init (&ktoenal_data.ksnd_sched_lock);
-
-        init_waitqueue_head (&ktoenal_data.ksnd_sched_waitq);
-
-        INIT_LIST_HEAD (&ktoenal_data.ksnd_rx_conns);
-        INIT_LIST_HEAD (&ktoenal_data.ksnd_tx_conns);
-
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_small_fmp.fmp_idle_fmbs);
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_small_fmp.fmp_blocked_conns);
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_large_fmp.fmp_idle_fmbs);
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_large_fmp.fmp_blocked_conns);
-
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_idle_nblk_ltx_list);
-        INIT_LIST_HEAD(&ktoenal_data.ksnd_idle_ltx_list);
-        init_waitqueue_head(&ktoenal_data.ksnd_idle_ltx_waitq);
-
-        INIT_LIST_HEAD (&ktoenal_data.ksnd_reaper_list);
-        init_waitqueue_head(&ktoenal_data.ksnd_reaper_waitq);
-        spin_lock_init (&ktoenal_data.ksnd_reaper_lock);
-
-        ktoenal_data.ksnd_init = SOCKNAL_INIT_DATA; /* flag lists/ptrs/locks initialised */
-
-        PORTAL_ALLOC(ktoenal_data.ksnd_fmbs,
-                     sizeof(ksock_fmb_t) * (SOCKNAL_SMALL_FWD_NMSGS + SOCKNAL_LARGE_FWD_NMSGS));
-        if (ktoenal_data.ksnd_fmbs == NULL)
-                RETURN(-ENOMEM);
-
-        /* NULL out buffer pointers etc */
-        memset(ktoenal_data.ksnd_fmbs, 0,
-               sizeof(ksock_fmb_t) * (SOCKNAL_SMALL_FWD_NMSGS + SOCKNAL_LARGE_FWD_NMSGS));
-
-        for (i = 0; i < (SOCKNAL_SMALL_FWD_NMSGS + SOCKNAL_LARGE_FWD_NMSGS); i++)
-        {
-                ksock_fmb_t *fmb = &((ksock_fmb_t *)ktoenal_data.ksnd_fmbs)[i];
-
-                if (i < SOCKNAL_SMALL_FWD_NMSGS)
-                {
-                        fmb->fmb_npages = SOCKNAL_SMALL_FWD_PAGES;
-                        fmb->fmb_pool = &ktoenal_data.ksnd_small_fmp;
-                }
-                else
-                {
-                        fmb->fmb_npages = SOCKNAL_LARGE_FWD_PAGES;
-                        fmb->fmb_pool = &ktoenal_data.ksnd_large_fmp;
-                }
-
-                LASSERT (fmb->fmb_npages > 0);
-                for (j = 0; j < fmb->fmb_npages; j++)
-                {
-                        fmb->fmb_pages[j] = alloc_page(GFP_KERNEL);
-
-                        if (fmb->fmb_pages[j] == NULL)
-                        {
-                                ktoenal_module_fini ();
-                                return (-ENOMEM);
-                        }
-
-                        LASSERT (page_address (fmb->fmb_pages[j]) != NULL);
-                }
-
-                list_add (&fmb->fmb_list, &fmb->fmb_pool->fmp_idle_fmbs);
-        }
-
-        PORTAL_ALLOC(ktoenal_data.ksnd_ltxs,
-                     sizeof (ksock_ltx_t) * (SOCKNAL_NLTXS + SOCKNAL_NNBLK_LTXS));
-        if (ktoenal_data.ksnd_ltxs == NULL)
-        {
-                ktoenal_module_fini ();
-                return (-ENOMEM);
-        }
-
-        /* Deterministic bugs please */
-        memset (ktoenal_data.ksnd_ltxs, 0xeb,
-                sizeof (ksock_ltx_t) * (SOCKNAL_NLTXS + SOCKNAL_NNBLK_LTXS));
-
-        for (i = 0; i < SOCKNAL_NLTXS + SOCKNAL_NNBLK_LTXS; i++)
-        {
-                ksock_ltx_t *ltx = &((ksock_ltx_t *)ktoenal_data.ksnd_ltxs)[i];
-
-                ltx->ltx_idle = i < SOCKNAL_NLTXS ?
-                                &ktoenal_data.ksnd_idle_ltx_list :
-                                &ktoenal_data.ksnd_idle_nblk_ltx_list;
-                list_add (&ltx->ltx_tx.tx_list, ltx->ltx_idle);
-        }
-
-        rc = PtlNIInit(ktoenal_init, 32, 4, 0, &ktoenal_ni);
-        if (rc != 0)
-        {
-                CERROR("ktoenal: PtlNIInit failed: error %d\n", rc);
-                ktoenal_module_fini ();
-                RETURN (rc);
-        }
-        PtlNIDebug(ktoenal_ni, ~0);
-
-        ktoenal_data.ksnd_init = SOCKNAL_INIT_PTL; /* flag PtlNIInit() called */
-
-        ktoenal_data.ksnd_slistchange = 1;
-        for (i = 0; i < TOENAL_N_SCHED; i++)
-        {
-                rc = ktoenal_thread_start (ktoenal_scheduler, NULL);
-                if (rc != 0)
-                {
-                        CERROR("Can't spawn socknal scheduler[%d]: %d\n", i, rc);
-                        ktoenal_module_fini ();
-                        RETURN (rc);
-                }
-        }
-
-        rc = ktoenal_thread_start (ktoenal_reaper, NULL);
-        if (rc != 0)
-        {
-                CERROR("Can't spawn socknal reaper: %d\n", rc);
-                ktoenal_module_fini ();
-                RETURN (rc);
-        }
-
-        rc = ktoenal_thread_start (ktoenal_pollthread, NULL);
-        if (rc != 0)
-        {
-                CERROR("Can't spawn socknal pollthread: %d\n", rc);
-                ktoenal_module_fini ();
-                RETURN (rc);
-        }
-
-        rc = kpr_register(&ktoenal_data.ksnd_router,
-                  &ktoenal_router_interface);
-        if (rc != 0)
-                CDEBUG (D_NET, "Can't initialise routing interface (rc = %d): not routing\n", rc);
-
-        rc = kportal_nal_register(TOENAL, &ktoenal_cmd, NULL);
-        if (rc != 0)
-                CDEBUG(D_NET, "Can't initialise command interface (rc = %d)\n",
-                       rc);
-
-        PORTAL_SYMBOL_REGISTER(ktoenal_ni);
-
-        /* flag everything initialised */
-        ktoenal_data.ksnd_init = SOCKNAL_INIT_ALL;
-
-       printk(KERN_INFO "Lustre: Routing TOE NAL loaded (Routing %s, initial mem %d)\n",
-              kpr_routing(&ktoenal_data.ksnd_router) ? "enabled" : "disabled",
-               pkmem);
-
-        return (0);
-}
-
-MODULE_AUTHOR("Cluster File Systems, Inc. <info@clusterfs.com>");
-MODULE_DESCRIPTION("Kernel TCP Socket NAL v0.01");
-MODULE_LICENSE("GPL");
-
-module_init(ktoenal_module_init);
-module_exit(ktoenal_module_fini);
-
-EXPORT_SYMBOL (ktoenal_ni);
diff --git a/lustre/portals/knals/toenal/toenal.h b/lustre/portals/knals/toenal/toenal.h
deleted file mode 100644 (file)
index b211d6c..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * Copyright (C) 2001, 2002 Cluster File Systems, Inc.
- *   Author: Zach Brown <zab@zabbo.net>
- *   Author: Peter J. Braam <braam@clusterfs.com>
- *   Author: Phil Schwan <phil@clusterfs.com>
- *   Author: Eric Barton <eric@bartonsoftware.com>
- *   Author: Kedar Sovani <kedar@calsoftinc.com>
- *   Author: Amey Inamdar <amey@calsoftinc.com>
- *
- *   This file is part of Portals, http://www.sf.net/projects/lustre/
- *
- *   Portals is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   Portals is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with Portals; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-#define DEBUG_PORTAL_ALLOC
-#ifndef EXPORT_SYMTAB
-# define EXPORT_SYMTAB
-#endif
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/string.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <linux/smp_lock.h>
-#include <linux/unistd.h>
-#include <net/tcp.h>
-#include <linux/uio.h>
-#include <linux/sched.h> 
-
-#include <asm/system.h>
-#include <asm/uaccess.h>
-
-#include <linux/fs.h>
-#include <linux/file.h>
-#include <linux/stat.h>
-#include <linux/list.h>
-#include <asm/uaccess.h>
-#include <asm/segment.h>
-
-#define DEBUG_SUBSYSTEM S_SOCKNAL
-
-#include <linux/kp30.h>
-#include <portals/p30.h>
-#include <portals/lib-p30.h>
-
-#define SOCKNAL_NLTXS           128             /* # normal transmit messages */
-#define SOCKNAL_NNBLK_LTXS     128             /* # transmit messages reserved if can't block */
-
-#define SOCKNAL_SMALL_FWD_NMSGS        128             /* # small messages I can be forwarding at any time */
-#define SOCKNAL_LARGE_FWD_NMSGS 32              /* # large messages I can be forwarding at any time */
-
-#define SOCKNAL_SMALL_FWD_PAGES        1               /* # pages in a small message fwd buffer */
-
-#define SOCKNAL_LARGE_FWD_PAGES (PAGE_ALIGN (sizeof (ptl_hdr_t) + PTL_MTU) >> PAGE_SHIFT)
-                                               /* # pages in a large message fwd buffer */
-
-#define SOCKNAL_RESCHED         100             /* # scheduler loops before reschedule */
-
-#define SOCKNAL_TX_LOW_WATER(sk) (((sk)->sndbuf*8)/10)
-
-#define TOENAL_N_SCHED 1
-
-typedef struct                                  /* pool of forwarding buffers */
-{
-        struct list_head  fmp_idle_fmbs;        /* buffers waiting for a connection */
-        struct list_head  fmp_blocked_conns;    /* connections waiting for a buffer */
-} ksock_fmb_pool_t;
-
-typedef struct {
-        int               ksnd_init;            /* initialisation state */
-        
-        struct list_head  ksnd_socklist;        /* all my connections */
-        rwlock_t          ksnd_socklist_lock;   /* stabilise add/find/remove */
-
-
-        ptl_nid_t         ksnd_mynid;
-        nal_cb_t         *ksnd_nal_cb;
-        spinlock_t        ksnd_nal_cb_lock;     /* lib cli/sti lock */
-
-        atomic_t          ksnd_nthreads;        /* # live threads */
-        int               ksnd_shuttingdown;    /* tell threads to exit */
-        
-        kpr_router_t      ksnd_router;          /* THE router */
-
-        spinlock_t        ksnd_sched_lock;      /* serialise packet scheduling */
-        wait_queue_head_t ksnd_sched_waitq;     /* where scheduler(s) wait */
-
-        struct list_head  ksnd_rx_conns;        /* conn waiting to be read */
-        struct list_head  ksnd_tx_conns;        /* conn waiting to be written */
-        
-        void             *ksnd_fmbs;            /* all the pre-allocated FMBs */
-        ksock_fmb_pool_t  ksnd_small_fmp;       /* small message forwarding buffers */
-        ksock_fmb_pool_t  ksnd_large_fmp;       /* large message forwarding buffers */
-
-        void             *ksnd_ltxs;            /* all the pre-allocated LTXs */
-        struct list_head  ksnd_idle_ltx_list;   /* where to get an idle LTX */
-        struct list_head  ksnd_idle_nblk_ltx_list; /* where to get an idle LTX if you can't block */
-        wait_queue_head_t ksnd_idle_ltx_waitq;  /* where to block for an idle LTX */
-
-        struct list_head  ksnd_reaper_list;     /* conn waiting to be reaped */
-        wait_queue_head_t ksnd_reaper_waitq;    /* reaper sleeps here */
-        spinlock_t        ksnd_reaper_lock;     /* serialise */
-        
-        struct task_struct *ksnd_pollthread_tsk;/* task_struct for the poll thread */
-        poll_table          ksnd_pwait;         /* poll wait table for the socket */
-        int                 ksnd_slistchange;   /* informs the pollthread that
-                                                 * the socklist has changed */  
-} ksock_nal_data_t;
-
-#define SOCKNAL_INIT_NOTHING    0
-#define SOCKNAL_INIT_DATA       1
-#define SOCKNAL_INIT_PTL        2
-#define SOCKNAL_INIT_ALL        3
-
-typedef struct                                  /* transmit packet */
-{
-        struct list_head        tx_list;       /* queue on conn for transmission etc */
-        char                    tx_isfwd;      /* forwarding / sourced here */
-        int                     tx_nob;        /* # packet bytes */
-        int                     tx_niov;       /* # packet frags */
-        struct iovec           *tx_iov;        /* packet frags */
-} ksock_tx_t;
-
-typedef struct                                  /* locally transmitted packet */
-{
-        ksock_tx_t              ltx_tx;         /* send info */
-        struct list_head       *ltx_idle;       /* where to put when idle */
-        void                   *ltx_private;    /* lib_finalize() callback arg */
-        void                   *ltx_cookie;     /* lib_finalize() callback arg */
-        struct iovec            ltx_iov[1 + PTL_MD_MAX_IOV]; /* msg frags */
-        ptl_hdr_t               ltx_hdr;        /* buffer for packet header */
-} ksock_ltx_t;
-
-#define KSOCK_TX_2_KPR_FWD_DESC(ptr)    list_entry (ptr, kpr_fwd_desc_t, kprfd_scratch)
-/* forwarded packets (router->socknal) embedded in kpr_fwd_desc_t::kprfd_scratch */
-
-#define KSOCK_TX_2_KSOCK_LTX(ptr)       list_entry (ptr, ksock_ltx_t, ltx_tx)
-/* local packets (lib->socknal) embedded in ksock_ltx_t::ltx_tx */
-
-/* NB list_entry() is used here as convenient macro for calculating a
- * pointer to a struct from the addres of a member.
- */
-
-typedef struct                                  /* Kernel portals Socket Forwarding message buffer */
-{                                               /* (socknal->router) */
-        struct list_head        fmb_list;       /* queue idle */
-        kpr_fwd_desc_t          fmb_fwd;        /* router's descriptor */
-        int                     fmb_npages;     /* # pages allocated */
-        ksock_fmb_pool_t       *fmb_pool;       /* owning pool */
-        struct page            *fmb_pages[SOCKNAL_LARGE_FWD_PAGES];
-        struct iovec            fmb_iov[SOCKNAL_LARGE_FWD_PAGES];
-} ksock_fmb_t;
-
-#define SOCKNAL_RX_HEADER       1               /* reading header */
-#define SOCKNAL_RX_BODY         2               /* reading body (to deliver here) */
-#define SOCKNAL_RX_BODY_FWD     3               /* reading body (to forward) */
-#define SOCKNAL_RX_SLOP         4               /* skipping body */
-#define SOCKNAL_RX_GET_FMB      5               /* scheduled for forwarding */
-#define SOCKNAL_RX_FMB_SLEEP    6               /* blocked waiting for a fwd desc */
-
-typedef struct 
-{ 
-        struct list_head    ksnc_list;          /* stash on global socket list */
-        struct file        *ksnc_file;          /* socket filp */
-        struct socket      *ksnc_sock;          /* socket */
-        ptl_nid_t           ksnc_peernid;       /* who's on the other end */
-        atomic_t            ksnc_refcount;      /* # users */
-        
-        /* READER */
-        struct list_head    ksnc_rx_list;       /* where I enq waiting input or a forwarding descriptor */
-        unsigned long       ksnc_rx_ready;      /* data ready to read */
-        int                 ksnc_rx_scheduled;  /* being progressed */
-        int                 ksnc_rx_state;      /* what is being read */
-        int                 ksnc_rx_nob_left;   /* # bytes to next hdr/body  */
-        int                 ksnc_rx_nob_wanted; /* bytes actually wanted */
-        int                 ksnc_rx_niov;       /* # frags */
-        struct iovec        ksnc_rx_iov[1 + PTL_MD_MAX_IOV]; /* the frags */
-
-        void               *ksnc_cookie;        /* rx lib_finalize passthru arg */
-        ptl_hdr_t           ksnc_hdr;           /* where I read headers into */
-
-        /* WRITER */
-        struct list_head    ksnc_tx_list;       /* where I enq waiting for output space */
-        struct list_head    ksnc_tx_queue;      /* packets waiting to be sent */
-        unsigned long       ksnc_tx_ready;      /* write space */
-        int                 ksnc_tx_scheduled;  /* being progressed */
-        
-} ksock_conn_t;
-
-extern int ktoenal_add_sock (ptl_nid_t nid, int fd);
-extern int ktoenal_close_sock(ptl_nid_t nid);
-extern int ktoenal_set_mynid(ptl_nid_t nid);
-extern int ktoenal_push_sock(ptl_nid_t nid);
-extern ksock_conn_t *ktoenal_get_conn (ptl_nid_t nid);
-extern void _ktoenal_put_conn (ksock_conn_t *conn);
-extern void ktoenal_close_conn (ksock_conn_t *conn);
-
-static inline void
-ktoenal_put_conn (ksock_conn_t *conn)
-{
-        CDEBUG (D_OTHER, "putting conn[%p] -> "LPX64" (%d)\n", 
-                conn, conn->ksnc_peernid, atomic_read (&conn->ksnc_refcount));
-        
-        if (atomic_dec_and_test (&conn->ksnc_refcount))
-                _ktoenal_put_conn (conn);
-}
-
-extern int ktoenal_thread_start (int (*fn)(void *arg), void *arg);
-extern int ktoenal_new_packet (ksock_conn_t *conn, int skip);
-extern void ktoenal_fwd_packet (void *arg, kpr_fwd_desc_t *fwd);
-extern int ktoenal_scheduler (void *arg);
-extern int ktoenal_reaper (void *arg);
-extern int ktoenal_pollthread (void *arg);
-extern void ktoenal_data_ready(ksock_conn_t *conn);
-extern void ktoenal_write_space(ksock_conn_t *conn);
-
-
-extern nal_cb_t         ktoenal_lib;
-extern ksock_nal_data_t ktoenal_data;
diff --git a/lustre/portals/knals/toenal/toenal_cb.c b/lustre/portals/knals/toenal/toenal_cb.c
deleted file mode 100644 (file)
index 3af9e33..0000000
+++ /dev/null
@@ -1,1202 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * Copyright (C) 2001, 2002 Cluster File Systems, Inc.
- *   Author: Zach Brown <zab@zabbo.net>
- *   Author: Peter J. Braam <braam@clusterfs.com>
- *   Author: Phil Schwan <phil@clusterfs.com>
- *   Author: Eric Barton <eric@bartonsoftware.com>
- *   Author: Kedar Sovani <kedar@calsoftinc.com>
- *   Author: Amey Inamdar <amey@calsoftinc.com>
- *   
- *   This file is part of Portals, http://www.sf.net/projects/lustre/
- *
- *   Portals is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   Portals is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with Portals; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-#include <linux/poll.h>
-#include "toenal.h"
-
-atomic_t   ktoenal_packets_received;
-long       ktoenal_packets_launched;
-long       ktoenal_packets_transmitted;
-
-/*
- *  LIB functions follow
- *
- */
-int
-ktoenal_read(nal_cb_t *nal, void *private, void *dst_addr,
-              user_ptr src_addr, size_t len)
-{
-        CDEBUG(D_NET, LPX64": reading %ld bytes from %p -> %p\n",
-               nal->ni.nid, (long)len, src_addr, dst_addr);
-
-        memcpy( dst_addr, src_addr, len );
-        return 0;
-}
-
-int
-ktoenal_write(nal_cb_t *nal, void *private, user_ptr dst_addr,
-               void *src_addr, size_t len)
-{
-        CDEBUG(D_NET, LPX64": writing %ld bytes from %p -> %p\n",
-               nal->ni.nid, (long)len, src_addr, dst_addr);
-
-        memcpy( dst_addr, src_addr, len );
-        return 0;
-}
-
-int 
-ktoenal_callback (nal_cb_t * nal, void *private, lib_eq_t *eq,
-                        ptl_event_t *ev)
-{
-        CDEBUG(D_NET, LPX64": callback eq %p ev %p\n",
-               nal->ni.nid, eq, ev);
-
-        if (eq->event_callback != NULL) 
-                eq->event_callback(ev);
-
-        return 0;
-}
-
-void *
-ktoenal_malloc(nal_cb_t *nal, size_t len)
-{
-        void *buf;
-
-        PORTAL_ALLOC(buf, len);
-
-        if (buf != NULL)
-                memset(buf, 0, len);
-
-        return (buf);
-}
-
-void
-ktoenal_free(nal_cb_t *nal, void *buf, size_t len)
-{
-        PORTAL_FREE(buf, len);
-}
-
-void
-ktoenal_printf(nal_cb_t *nal, const char *fmt, ...)
-{
-       va_list ap;
-       char msg[256];
-
-       va_start (ap, fmt);
-       vsnprintf (msg, sizeof (msg), fmt, ap); /* sprint safely */
-       va_end (ap);
-
-       msg[sizeof (msg) - 1] = 0;              /* ensure terminated */
-
-        CDEBUG (D_NET, "%s", msg);
-}
-
-void
-ktoenal_cli(nal_cb_t *nal, unsigned long *flags)
-{
-        ksock_nal_data_t *data = nal->nal_data;
-
-        spin_lock(&data->ksnd_nal_cb_lock);
-}
-
-void
-ktoenal_sti(nal_cb_t *nal, unsigned long *flags)
-{
-        ksock_nal_data_t *data;
-        data = nal->nal_data;
-
-        spin_unlock(&data->ksnd_nal_cb_lock);
-}
-
-int
-ktoenal_dist(nal_cb_t *nal, ptl_nid_t nid, unsigned long *dist)
-{
-        /* I would guess that if ktoenal_get_conn(nid) == NULL,
-           and we're not routing, then 'nid' is very distant :) */
-        if ( nal->ni.nid == nid ) {
-                *dist = 0;
-        } else {
-                *dist = 1;
-        }
-
-        return 0;
-}
-
-ksock_ltx_t *
-ktoenal_get_ltx (int may_block)
-{
-        unsigned long   flags;
-        ksock_ltx_t *ltx = NULL;
-        
-        for (;;)
-        {
-                spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-        
-                if (!list_empty (&ktoenal_data.ksnd_idle_ltx_list))
-                {
-                        ltx = list_entry (ktoenal_data.ksnd_idle_ltx_list.next, ksock_ltx_t, ltx_tx.tx_list);
-                        list_del (&ltx->ltx_tx.tx_list);
-                        break;
-                }
-
-                if (!may_block)
-                {
-                        if (!list_empty (&ktoenal_data.ksnd_idle_nblk_ltx_list))
-                        {
-                                ltx = list_entry (ktoenal_data.ksnd_idle_nblk_ltx_list.next, 
-                                                  ksock_ltx_t, ltx_tx.tx_list);
-                                list_del (&ltx->ltx_tx.tx_list);
-                        }
-                        break;
-                }
-                
-                spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-                
-                wait_event (ktoenal_data.ksnd_idle_ltx_waitq,
-                            !list_empty (&ktoenal_data.ksnd_idle_ltx_list));
-        }
-
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-
-        return (ltx);
-}
-
-int
-ktoenal_sendmsg (struct file *sock, struct iovec *iov, int niov, int nob, int flags)
-{
-        /* NB This procedure "consumes" iov (actually we do, tcp_sendmsg doesn't)
-         */
-        mm_segment_t oldmm;
-        int           rc;
-
-        LASSERT (niov > 0);
-        LASSERT (nob > 0);
-        
-        oldmm = get_fs();
-        set_fs (KERNEL_DS);
-
-#ifdef PORTAL_DEBUG
-        {
-                int total_nob;
-                int i;
-                
-                for (i = total_nob = 0; i < niov; i++)
-                        total_nob += iov[i].iov_len;
-                
-                LASSERT (nob == total_nob);
-        }
-#endif        
-        LASSERT (!in_interrupt());
-       
-        rc = sock->f_op->writev(sock, iov, niov, NULL);
-
-        set_fs (oldmm);
-
-        if (rc > 0)                             /* sent something? */
-        {
-                nob = rc;                       /* consume iov */
-                for (;;)
-                {
-                        LASSERT (niov > 0);
-                        
-                        if (iov->iov_len >= nob)
-                        {
-                                iov->iov_len -= nob;
-                                iov->iov_base = (void *)(((unsigned long)iov->iov_base) + nob);
-                                break;
-                        }
-                        nob -= iov->iov_len;
-                        iov->iov_len = 0;
-                        iov++;
-                        niov--;
-                }
-        }
-
-        return (rc);
-}
-
-int
-ktoenal_recvmsg(struct file *sock, struct iovec *iov, int niov, int toread)
-{
-        /* NB This procedure "consumes" iov (actually tcp_recvmsg does)
-         */
-        mm_segment_t oldmm;
-        int ret, i, len = 0, origlen = 0;
-        
-        PROF_START(our_recvmsg);
-        for(i = 0; i < niov; i++) {
-                len += iov[i].iov_len;
-                if(len >= toread)
-                        break;
-        }
-
-        if(len >= toread) {
-                origlen = iov[i].iov_len;
-                iov[i].iov_len -= (len - toread);
-        }
-        else {  /* i == niov */
-                i = niov - 1;
-        }
-
-        oldmm = get_fs();
-        set_fs(KERNEL_DS);
-
-        ret = sock->f_op->readv(sock, iov, i + 1, NULL);
-        
-        set_fs(oldmm);
-
-        if(origlen)
-                iov[i].iov_len = origlen;
-
-        PROF_FINISH(our_recvmsg);
-        return ret;
-}
-
-void
-ktoenal_process_transmit (ksock_conn_t *conn, unsigned long *irq_flags)
-{
-        ksock_tx_t *tx = list_entry (conn->ksnc_tx_queue.next, ksock_tx_t, tx_list);
-        int         rc;
-        
-        LASSERT (conn->ksnc_tx_scheduled);
-        LASSERT (conn->ksnc_tx_ready);
-        LASSERT (!list_empty (&conn->ksnc_tx_queue));
-
-        /* assume transmit will complete now, so dequeue while I've got the lock */
-        list_del (&tx->tx_list);
-
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-
-        LASSERT (tx->tx_nob > 0);
-
-        conn->ksnc_tx_ready = 0;                /* write_space may race with me and set ready */
-        mb();                                   /* => clear BEFORE trying to write */
-
-        rc = ktoenal_sendmsg (conn->ksnc_file,
-                               tx->tx_iov, tx->tx_niov, tx->tx_nob,
-                               list_empty (&conn->ksnc_tx_queue) ? 
-                               MSG_DONTWAIT : (MSG_DONTWAIT | MSG_MORE));
-
-        CDEBUG (D_NET, "send(%d) %d\n", tx->tx_nob, rc);
-
-        if (rc < 0)                             /* error */
-        {
-                if (rc == -EAGAIN)              /* socket full => */
-                        rc = 0;                 /* nothing sent */
-                else
-                {
-                        //warning FIXME: handle socket errors properly
-                        CERROR ("Error socknal send(%d) %p: %d\n", tx->tx_nob, conn, rc);
-                        rc = tx->tx_nob;        /* kid on for now whole packet went */
-                }
-        }
-
-        if (rc == tx->tx_nob)                   /* everything went */
-        {
-                conn->ksnc_tx_ready = 1;        /* assume more can go (ASAP) */
-                ktoenal_put_conn (conn);       /* release packet's ref */
-
-                if (tx->tx_isfwd)               /* was a forwarded packet? */
-                {
-                        kpr_fwd_done (&ktoenal_data.ksnd_router,
-                                      KSOCK_TX_2_KPR_FWD_DESC (tx), 0);
-
-                        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-                }
-                else                            /* local send */
-                {
-                        ksock_ltx_t *ltx = KSOCK_TX_2_KSOCK_LTX (tx);
-
-                        lib_finalize (&ktoenal_lib, ltx->ltx_private, ltx->ltx_cookie);
-
-                        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-                        
-                        list_add (&ltx->ltx_tx.tx_list, ltx->ltx_idle);
-
-                        /* normal tx desc => wakeup anyone blocking for one */
-                        if (ltx->ltx_idle == &ktoenal_data.ksnd_idle_ltx_list &&
-                            waitqueue_active (&ktoenal_data.ksnd_idle_ltx_waitq))
-                                wake_up (&ktoenal_data.ksnd_idle_ltx_waitq);
-                }
-                ktoenal_packets_transmitted++;
-        }
-        else
-        {
-                tx->tx_nob -= rc;
-
-                spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-
-                /* back onto HEAD of tx_queue */
-                list_add (&tx->tx_list, &conn->ksnc_tx_queue);
-        }
-
-        if (!conn->ksnc_tx_ready ||             /* no space to write now */
-            list_empty (&conn->ksnc_tx_queue))  /* nothing to write */
-        {
-                conn->ksnc_tx_scheduled = 0;    /* not being scheduled */
-                ktoenal_put_conn (conn);       /* release scheduler's ref */
-        }
-        else                                    /* let scheduler call me again */
-                list_add_tail (&conn->ksnc_tx_list, &ktoenal_data.ksnd_tx_conns);
-}
-
-void
-ktoenal_launch_packet (ksock_conn_t *conn, ksock_tx_t *tx)
-{
-        unsigned long flags;
-        int           nob = tx->tx_nob;
-        struct iovec *iov = tx->tx_iov;
-        int           niov = 1;
-        
-        LASSERT (nob >= sizeof (ptl_hdr_t));
-
-        /* Truncate iov to exactly match total packet length
-         * since socket sendmsg pays no attention to requested length.
-         */
-        for (;;)
-        {
-                LASSERT (niov <= tx->tx_niov);
-                
-                if (iov->iov_len >= nob)
-                {
-                        iov->iov_len = nob;
-                        break;
-                }
-                nob -= iov->iov_len;
-                iov++;
-                niov++;
-        }
-        tx->tx_niov = niov;
-        
-        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-        list_add_tail (&tx->tx_list, &conn->ksnc_tx_queue);
-
-        if (conn->ksnc_tx_ready &&              /* able to send */
-            !conn->ksnc_tx_scheduled)           /* not scheduled to send */
-        {
-                list_add_tail (&conn->ksnc_tx_list, &ktoenal_data.ksnd_tx_conns);
-                conn->ksnc_tx_scheduled = 1;
-                atomic_inc (&conn->ksnc_refcount); /* extra ref for scheduler */
-                if (waitqueue_active (&ktoenal_data.ksnd_sched_waitq))
-                        wake_up (&ktoenal_data.ksnd_sched_waitq);
-        }
-
-        ktoenal_packets_launched++;
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-}
-
-int
-ktoenal_send(nal_cb_t *nal, void *private, lib_msg_t *cookie,
-              ptl_hdr_t *hdr, int type, ptl_nid_t nid, ptl_pid_t pid,
-              unsigned int payload_niov, struct iovec *payload_iov, size_t payload_len)
-{
-        ptl_nid_t     gatewaynid;
-        ksock_conn_t *conn;
-        ksock_ltx_t  *ltx;
-        int           rc;
-        int           i;
-
-        /* By this point, as it happens, we have absolutely no idea what
-         * 'private' is.  It might be ksock_nal_data or it might be ksock_conn.
-         * Ha ha, isn't that a funny joke?
-         *
-         * FIXME: this is not the right way to fix this; the right way is to
-         * always pass in the same kind of structure.  This is hard right now.
-         * To revisit this issue, set a breakpoint in here and watch for when
-         * it's called from lib_finalize.  I think this occurs when we send a
-         * packet as a side-effect of another packet, such as when an ACK has
-         * been requested. -phil */
-
-        CDEBUG(D_NET, "sending %d bytes from [%d](%p,%d)... to nid: "
-               LPX64" pid %d\n", (int)payload_len, payload_niov,
-               payload_niov > 0 ? payload_iov[0].iov_base : NULL,
-               (int)(payload_niov > 0 ? payload_iov[0].iov_len : 0), nid, pid);
-
-        if ((conn = ktoenal_get_conn (nid)) == NULL)
-        {
-                /* It's not a peer; try to find a gateway */
-                rc = kpr_lookup (&ktoenal_data.ksnd_router, nid, payload_niov,
-                                 &gatewaynid);
-                if (rc != 0)
-                {
-                        CERROR ("Can't route to "LPX64": router error %d\n", nid, rc);
-                        return (-1);
-                }
-
-                if ((conn = ktoenal_get_conn (gatewaynid)) == NULL)
-                {
-                        CERROR ("Can't route to "LPX64": gateway "LPX64" is not a peer\n", 
-                                nid, gatewaynid);
-                        return (-1);
-                }
-        }
-
-        /* This transmit has now got a ref on conn */
-
-        /* I may not block for a transmit descriptor if I might block the
-         * receiver, or an interrupt handler. */
-        ltx = ktoenal_get_ltx (!(type == PTL_MSG_ACK ||
-                                 type == PTL_MSG_REPLY ||
-                                 in_interrupt ()));
-        if (ltx == NULL)
-        {
-                CERROR ("Can't allocate tx desc\n");
-                ktoenal_put_conn (conn);
-                return (-1);
-        }
-        
-        /* Init common (to sends and forwards) packet part */
-        ltx->ltx_tx.tx_isfwd = 0;
-        ltx->ltx_tx.tx_nob = sizeof (*hdr) + payload_len;
-        ltx->ltx_tx.tx_niov = 1 + payload_niov;
-        ltx->ltx_tx.tx_iov = ltx->ltx_iov;
-
-        /* Init local send packet (storage for hdr, finalize() args, iov) */
-        ltx->ltx_hdr = *hdr;
-        ltx->ltx_private = private;
-        ltx->ltx_cookie = cookie;
-
-        ltx->ltx_iov[0].iov_base = &ltx->ltx_hdr;
-        ltx->ltx_iov[0].iov_len = sizeof (ltx->ltx_hdr);
-
-        LASSERT (payload_niov <= PTL_MD_MAX_IOV);
-
-        for (i = 0; i < payload_niov; i++)
-        {
-                ltx->ltx_iov[1 + i].iov_base = payload_iov[i].iov_base;
-                ltx->ltx_iov[1 + i].iov_len  = payload_iov[i].iov_len;
-        }
-
-        ktoenal_launch_packet (conn, &ltx->ltx_tx);
-        return (0);
-}
-
-void
-ktoenal_fwd_packet (void *arg, kpr_fwd_desc_t *fwd)
-{
-        ksock_conn_t *conn;
-        ptl_nid_t     nid = fwd->kprfd_gateway_nid;
-        ksock_tx_t   *tx  = (ksock_tx_t *)&fwd->kprfd_scratch;
-
-        CDEBUG (D_NET, "Forwarding [%p] -> "LPX64" ("LPX64"))\n", fwd, 
-                fwd->kprfd_gateway_nid, fwd->kprfd_target_nid);
-
-        if (nid == ktoenal_lib.ni.nid)         /* I'm the gateway; must be the last hop */
-                nid = fwd->kprfd_target_nid;
-        
-        conn = ktoenal_get_conn (nid);
-        if (conn == NULL)
-        {
-                CERROR ("[%p] fwd to "LPX64" isn't a peer\n", fwd, nid);
-                kpr_fwd_done (&ktoenal_data.ksnd_router, fwd, -EHOSTUNREACH);
-                return;
-        }
-
-        /* This forward has now got a ref on conn */
-
-        tx->tx_isfwd = 1;                       /* This is a forwarding packet */
-        tx->tx_nob   = fwd->kprfd_nob;
-        tx->tx_niov  = fwd->kprfd_niov;
-        tx->tx_iov   = fwd->kprfd_iov;
-
-        ktoenal_launch_packet (conn, tx);
-}
-
-int
-ktoenal_thread_start (int (*fn)(void *arg), void *arg)
-{
-        long    pid = kernel_thread (fn, arg, 0);
-
-        if (pid < 0)
-                return ((int)pid);
-
-        atomic_inc (&ktoenal_data.ksnd_nthreads);
-        return (0);
-}
-
-void
-ktoenal_thread_fini (void)
-{
-        atomic_dec (&ktoenal_data.ksnd_nthreads);
-}
-
-void
-ktoenal_fmb_callback (void *arg, int error)
-{
-        ksock_fmb_t       *fmb = (ksock_fmb_t *)arg;
-        ptl_hdr_t         *hdr = (ptl_hdr_t *) page_address(fmb->fmb_pages[0]);
-        ksock_conn_t      *conn;
-        unsigned long     flags;
-
-        CDEBUG (D_NET, "routed packet from "LPX64" to "LPX64": %d\n", 
-                hdr->src_nid, hdr->dest_nid, error);
-
-        if (error != 0)
-                CERROR ("Failed to route packet from "LPX64" to "LPX64": %d\n", 
-                        hdr->src_nid, hdr->dest_nid, error);
-
-        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-        
-        list_add (&fmb->fmb_list, &fmb->fmb_pool->fmp_idle_fmbs);
-
-        if (!list_empty (&fmb->fmb_pool->fmp_blocked_conns))
-        {
-                conn = list_entry (fmb->fmb_pool->fmp_blocked_conns.next, ksock_conn_t, ksnc_rx_list);
-                list_del (&conn->ksnc_rx_list);
-
-                CDEBUG (D_NET, "Scheduling conn %p\n", conn);
-                LASSERT (conn->ksnc_rx_scheduled);
-                LASSERT (conn->ksnc_rx_state == SOCKNAL_RX_FMB_SLEEP);
-
-                conn->ksnc_rx_state = SOCKNAL_RX_GET_FMB;
-                list_add_tail (&conn->ksnc_rx_list, &ktoenal_data.ksnd_rx_conns);
-
-                if (waitqueue_active (&ktoenal_data.ksnd_sched_waitq))
-                        wake_up (&ktoenal_data.ksnd_sched_waitq);
-        }
-
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-}
-
-ksock_fmb_t *
-ktoenal_get_idle_fmb (ksock_conn_t *conn)
-{
-        /* NB called with sched lock held */
-        int               payload_nob = conn->ksnc_rx_nob_left;
-        int               packet_nob = sizeof (ptl_hdr_t) + payload_nob;
-        ksock_fmb_pool_t *pool;
-        ksock_fmb_t      *fmb;
-        
-        LASSERT (conn->ksnc_rx_state == SOCKNAL_RX_GET_FMB);
-
-        if (packet_nob <= SOCKNAL_SMALL_FWD_PAGES * PAGE_SIZE)
-                pool = &ktoenal_data.ksnd_small_fmp;
-        else
-                pool = &ktoenal_data.ksnd_large_fmp;
-        
-        if (!list_empty (&pool->fmp_idle_fmbs))
-        {
-                fmb = list_entry (pool->fmp_idle_fmbs.next, ksock_fmb_t, fmb_list);
-                list_del (&fmb->fmb_list);
-                return (fmb);
-        }
-
-        /* deschedule until fmb free */
-
-        conn->ksnc_rx_state = SOCKNAL_RX_FMB_SLEEP;
-
-        list_add_tail (&conn->ksnc_rx_list,
-                       &pool->fmp_blocked_conns);
-        return (NULL);
-}
-
-
-int
-ktoenal_init_fmb (ksock_conn_t *conn, ksock_fmb_t *fmb)
-{
-        int payload_nob = conn->ksnc_rx_nob_left;
-        int packet_nob = sizeof (ptl_hdr_t) + payload_nob;
-        int niov;                               /* at least the header */
-        int nob;
-        
-        LASSERT (conn->ksnc_rx_scheduled);
-        LASSERT (conn->ksnc_rx_state == SOCKNAL_RX_GET_FMB);
-        LASSERT (conn->ksnc_rx_nob_wanted == conn->ksnc_rx_nob_left);
-        LASSERT (payload_nob >= 0);
-        LASSERT (packet_nob <= fmb->fmb_npages * PAGE_SIZE);
-        LASSERT (sizeof (ptl_hdr_t) < PAGE_SIZE);
-        
-        /* Got a forwarding buffer; copy the header we just read into the
-         * forwarding buffer.  If there's payload start reading reading it
-         * into the buffer, otherwise the forwarding buffer can be kicked
-         * off immediately.
-         *
-         * NB fmb->fmb_iov spans the WHOLE packet.
-         *    conn->ksnc_rx_iov spans just the payload.
-         */
-
-        fmb->fmb_iov[0].iov_base = page_address (fmb->fmb_pages[0]);
-                
-        memcpy (fmb->fmb_iov[0].iov_base, &conn->ksnc_hdr, sizeof (ptl_hdr_t)); /* copy header */
-
-        if (payload_nob == 0)                   /* got complete packet already */
-        {
-                atomic_inc (&ktoenal_packets_received);
-
-                CDEBUG (D_NET, "%p "LPX64"->"LPX64" %d fwd_start (immediate)\n", conn,
-                        conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, packet_nob);
-
-                fmb->fmb_iov[0].iov_len = sizeof (ptl_hdr_t);
-
-                kpr_fwd_init (&fmb->fmb_fwd, conn->ksnc_hdr.dest_nid, 
-                              packet_nob, 1, fmb->fmb_iov, 
-                              ktoenal_fmb_callback, fmb);
-
-                kpr_fwd_start (&ktoenal_data.ksnd_router, &fmb->fmb_fwd); /* forward it now */
-
-                ktoenal_new_packet (conn, 0);  /* on to next packet */
-                return (1);
-        }
-
-        niov = 1;
-        if (packet_nob <= PAGE_SIZE)            /* whole packet fits in first page */
-                fmb->fmb_iov[0].iov_len = packet_nob;
-        else
-        {
-                fmb->fmb_iov[0].iov_len = PAGE_SIZE;
-                nob = packet_nob - PAGE_SIZE;
-                
-                do
-                {
-                        LASSERT (niov < fmb->fmb_npages);
-                        fmb->fmb_iov[niov].iov_base = page_address (fmb->fmb_pages[niov]);
-                        fmb->fmb_iov[niov].iov_len = MIN (PAGE_SIZE, nob);
-                        nob -= PAGE_SIZE;
-                        niov++;
-                } while (nob > 0);
-        }
-
-        kpr_fwd_init (&fmb->fmb_fwd, conn->ksnc_hdr.dest_nid, 
-                      packet_nob, niov, fmb->fmb_iov, 
-                      ktoenal_fmb_callback, fmb);
-
-        /* stash router's descriptor ready for call to kpr_fwd_start */        
-        conn->ksnc_cookie = &fmb->fmb_fwd;
-
-        conn->ksnc_rx_state = SOCKNAL_RX_BODY_FWD; /* read in the payload */
-
-        /* payload is desc's iov-ed buffer, but skipping the hdr */
-        LASSERT (niov <= sizeof (conn->ksnc_rx_iov) / sizeof (conn->ksnc_rx_iov[0]));
-
-        conn->ksnc_rx_iov[0].iov_base = (void *)(((unsigned long)fmb->fmb_iov[0].iov_base) + sizeof (ptl_hdr_t));
-        conn->ksnc_rx_iov[0].iov_len = fmb->fmb_iov[0].iov_len - sizeof (ptl_hdr_t);
-
-        if (niov > 1)
-                memcpy (&conn->ksnc_rx_iov[1], &fmb->fmb_iov[1], (niov - 1) * sizeof (struct iovec));
-
-        conn->ksnc_rx_niov = niov;
-
-        CDEBUG (D_NET, "%p "LPX64"->"LPX64" %d reading body\n", conn,
-                conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, payload_nob);
-        return (0);
-}
-
-void
-ktoenal_fwd_parse (ksock_conn_t *conn)
-{
-        ksock_conn_t *conn2;
-        int           body_len;
-
-        CDEBUG (D_NET, "%p "LPX64"->"LPX64" %d parsing header\n", conn,
-                conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, conn->ksnc_rx_nob_left);
-
-        LASSERT (conn->ksnc_rx_state == SOCKNAL_RX_HEADER);
-        LASSERT (conn->ksnc_rx_scheduled);
-
-        body_len = conn->ksnc_hdr.payload_length;
-
-        if (body_len < 0)                               /* length corrupt */
-        {
-                CERROR ("dropping packet from "LPX64" for "LPX64": packet size %d illegal\n",
-                        conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, body_len);
-                ktoenal_new_packet (conn, 0);          /* on to new packet */
-                return;
-        }
-
-        if (body_len > PTL_MTU)         /* too big to forward */
-        {
-                CERROR ("dropping packet from "LPX64" for "LPX64": packet size %d too big\n",
-                        conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, body_len);
-                ktoenal_new_packet (conn, body_len);    /* on to new packet (skip this one's body) */
-                return;
-        }
-
-        conn2 = ktoenal_get_conn (conn->ksnc_hdr.dest_nid); /* should have gone direct */
-        if (conn2 != NULL)
-        {
-                CERROR ("dropping packet from "LPX64" for "LPX64": target is a peer\n",
-                        conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid);
-                ktoenal_put_conn (conn2);          /* drop ref from get above */
-
-                ktoenal_new_packet (conn, body_len);  /* on to next packet (skip this one's body) */
-                return;
-        }
-
-        conn->ksnc_rx_state = SOCKNAL_RX_GET_FMB;       /* Getting FMB now */
-        conn->ksnc_rx_nob_left = body_len;              /* stash packet size */
-        conn->ksnc_rx_nob_wanted = body_len;            /* (no slop) */
-}
-
-int
-ktoenal_new_packet (ksock_conn_t *conn, int nob_to_skip)
-{
-        static char ktoenal_slop_buffer[4096];
-
-        int   nob;
-        int   niov;
-        int   skipped;
-
-        if (nob_to_skip == 0)                   /* right at next packet boundary now */
-        {
-                conn->ksnc_rx_state = SOCKNAL_RX_HEADER;
-                conn->ksnc_rx_nob_wanted = sizeof (ptl_hdr_t);
-                conn->ksnc_rx_nob_left = sizeof (ptl_hdr_t);
-
-                conn->ksnc_rx_iov[0].iov_base = (char *)&conn->ksnc_hdr;
-                conn->ksnc_rx_iov[0].iov_len  = sizeof (ptl_hdr_t);
-                conn->ksnc_rx_niov = 1;
-                return (1);
-        }
-
-        /* set up to skip as much a possible now */
-        /* if there's more left (ran out of iov entries) we'll get called again */
-
-        conn->ksnc_rx_state = SOCKNAL_RX_SLOP;
-        conn->ksnc_rx_nob_left = nob_to_skip;
-        skipped = 0;
-        niov = 0;
-
-        do
-        {
-                nob = MIN (nob_to_skip, sizeof (ktoenal_slop_buffer));
-
-                conn->ksnc_rx_iov[niov].iov_base = ktoenal_slop_buffer;
-                conn->ksnc_rx_iov[niov].iov_len  = nob;
-                niov++;
-                skipped += nob;
-                nob_to_skip -=nob;
-
-        } while (nob_to_skip != 0 &&            /* mustn't overflow conn's rx iov */
-                 niov < sizeof (conn->ksnc_rx_iov)/sizeof (conn->ksnc_rx_iov[0]));
-
-        conn->ksnc_rx_niov = niov;
-        conn->ksnc_rx_nob_wanted = skipped;
-        return (0);
-}
-
-void
-ktoenal_process_receive (ksock_conn_t *conn, unsigned long *irq_flags)
-{
-        ksock_fmb_t *fmb;
-        int          len;
-        LASSERT (atomic_read (&conn->ksnc_refcount) > 0);
-        LASSERT (conn->ksnc_rx_scheduled);
-        LASSERT (conn->ksnc_rx_ready);
-
-        /* NB: sched lock held */
-        CDEBUG(D_NET, "conn %p\n", conn);
-
-        if (conn->ksnc_rx_state != SOCKNAL_RX_GET_FMB)     /* doesn't need a forwarding buffer */
-        {
-                spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-                goto try_read;
-        }
-
- get_fmb:
-        /* NB: sched lock held */
-        fmb = ktoenal_get_idle_fmb (conn);
-        if (fmb == NULL)                        /* conn descheduled waiting for idle fmb */
-                return;
-
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-        
-        if (ktoenal_init_fmb (conn, fmb)) /* packet forwarded ? */
-                goto out;               /* come back later for next packet */
-
- try_read:
-        /* NB: sched lock NOT held */
-        LASSERT (conn->ksnc_rx_state == SOCKNAL_RX_HEADER ||
-                 conn->ksnc_rx_state == SOCKNAL_RX_BODY ||
-                 conn->ksnc_rx_state == SOCKNAL_RX_BODY_FWD ||
-                 conn->ksnc_rx_state == SOCKNAL_RX_SLOP);
-
-        LASSERT (conn->ksnc_rx_niov > 0);
-        LASSERT (conn->ksnc_rx_nob_wanted > 0);
-
-        conn->ksnc_rx_ready = 0;                /* data ready may race with me and set ready */
-        mb();                                   /* => clear BEFORE trying to read */
-
-        /* NB ktoenal_recvmsg "consumes" the iov passed to it */
-        len = ktoenal_recvmsg(conn->ksnc_file,
-                               conn->ksnc_rx_iov, conn->ksnc_rx_niov,
-                               conn->ksnc_rx_nob_wanted);
-        CDEBUG (D_NET, "%p read(%d) %d\n", conn, conn->ksnc_rx_nob_wanted, len);
-
-        if (len <= 0)                           /* nothing ready (EAGAIN) or EOF or error */
-        {
-                if (len != -EAGAIN &&           /* ! nothing to read now */
-                    len != 0)                   /* ! nothing to read ever */
-                {
-                        // warning FIXME: handle socket errors properly
-                        CERROR ("Error socknal read(%d) %p: %d\n",
-                                conn->ksnc_rx_nob_wanted, conn, len);
-                }
-                goto out;                       /* come back when there's data ready */
-        }
-
-        LASSERT (len <= conn->ksnc_rx_nob_wanted);
-        conn->ksnc_rx_nob_wanted -= len;
-        conn->ksnc_rx_nob_left -= len;
-
-        if (conn->ksnc_rx_nob_wanted != 0)      /* short read */
-                goto out;                       /* try again later */
-
-        conn->ksnc_rx_ready = 1;                /* assume there's more to be had */
-
-        switch (conn->ksnc_rx_state)
-        {
-        case SOCKNAL_RX_HEADER:
-                if (conn->ksnc_hdr.dest_nid != ktoenal_lib.ni.nid) /* It's not for me */
-                {
-                        ktoenal_fwd_parse (conn);
-                        switch (conn->ksnc_rx_state)
-                        {
-                        case SOCKNAL_RX_HEADER: /* skipped this packet (zero payload) */
-                                goto out;       /* => come back later */
-                        case SOCKNAL_RX_SLOP:   /* skipping this packet's body */
-                                goto try_read;  /* => go read it */
-                        case SOCKNAL_RX_GET_FMB: /* forwarding */
-                                spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-                                goto get_fmb;   /* => go get a fwd msg buffer */
-                        default:
-                                break;
-                        }
-                        /* Not Reached */
-                        LBUG ();
-                }
-
-                PROF_START(lib_parse);
-                lib_parse(&ktoenal_lib, &conn->ksnc_hdr, conn); /* sets wanted_len, iovs etc */
-                PROF_FINISH(lib_parse);
-
-                if (conn->ksnc_rx_nob_wanted != 0) /* need to get some payload? */
-                {
-                        conn->ksnc_rx_state = SOCKNAL_RX_BODY;
-                        goto try_read;          /* go read the payload */
-                }
-                /* Fall through (completed packet for me) */
-
-        case SOCKNAL_RX_BODY:
-                atomic_inc (&ktoenal_packets_received);
-                lib_finalize(&ktoenal_lib, NULL, conn->ksnc_cookie); /* packet is done now */
-                /* Fall through */
-
-        case SOCKNAL_RX_SLOP:
-                if (ktoenal_new_packet (conn, conn->ksnc_rx_nob_left)) /* starting new packet? */
-                        goto out;               /* come back later */
-                goto try_read;                  /* try to finish reading slop now */
-
-        case SOCKNAL_RX_BODY_FWD:
-                CDEBUG (D_NET, "%p "LPX64"->"LPX64" %d fwd_start (got body)\n", conn,
-                        conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, conn->ksnc_rx_nob_left);
-
-                atomic_inc (&ktoenal_packets_received);
-
-                /* ktoenal_init_fmb() stashed router descriptor in conn->ksnc_cookie */
-                kpr_fwd_start (&ktoenal_data.ksnd_router, (kpr_fwd_desc_t *)conn->ksnc_cookie);
-
-                LASSERT (conn->ksnc_rx_nob_left == 0); /* no slop in forwarded packets */
-
-                ktoenal_new_packet (conn, 0);  /* on to next packet */
-                goto out;                       /* (later) */
-
-        default:
-                break;
-        }
-
-        /* Not Reached */
-        LBUG ();
-
- out:
-        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, *irq_flags);
-
-        if (!conn->ksnc_rx_ready)               /* no data there to read? */
-        {
-                conn->ksnc_rx_scheduled = 0;    /* let socket callback schedule again */
-                ktoenal_put_conn (conn);       /* release scheduler's ref */
-        }
-        else                                    /* let scheduler call me again */
-                list_add_tail (&conn->ksnc_rx_list, &ktoenal_data.ksnd_rx_conns);
-}
-
-int
-ktoenal_recv(nal_cb_t *nal, void *private, lib_msg_t *msg,
-             unsigned int niov, struct iovec *iov, size_t mlen, size_t rlen)
-{
-        ksock_conn_t *conn = (ksock_conn_t *)private;
-        int           i;
-
-        conn->ksnc_cookie = msg;
-
-        LASSERT (niov <= PTL_MD_MAX_IOV);
-        for (i = 0; i < niov; i++)
-        {
-                conn->ksnc_rx_iov[i].iov_len = iov[i].iov_len;
-                conn->ksnc_rx_iov[i].iov_base = iov[i].iov_base;
-        }
-
-        conn->ksnc_rx_niov       = niov;
-        conn->ksnc_rx_nob_wanted = mlen;
-        conn->ksnc_rx_nob_left   = rlen;
-
-        return (rlen);
-}
-
-int
-ktoenal_scheduler (void *arg)
-{
-        unsigned long      flags;
-        ksock_conn_t      *conn;
-        int                rc;
-        int                nloops = 0;
-
-        kportal_daemonize ("ktoenal_sched");
-        kportal_blockallsigs ();
-        
-        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-
-        while (!ktoenal_data.ksnd_shuttingdown)
-        {
-                int did_something = 0;
-
-                /* Ensure I progress everything semi-fairly */
-
-                if (!list_empty (&ktoenal_data.ksnd_rx_conns))
-                {
-                        did_something = 1;
-                        conn = list_entry (ktoenal_data.ksnd_rx_conns.next,
-                                           ksock_conn_t, ksnc_rx_list);
-                        list_del (&conn->ksnc_rx_list);
-
-                        ktoenal_process_receive (conn, &flags); /* drops & regains ksnd_sched_lock */
-                }
-
-                if (!list_empty (&ktoenal_data.ksnd_tx_conns))
-                {
-                        did_something = 1;
-                        conn = list_entry (ktoenal_data.ksnd_tx_conns.next,
-                                           ksock_conn_t, ksnc_tx_list);
-
-                        list_del (&conn->ksnc_tx_list);
-                        ktoenal_process_transmit (conn, &flags); /* drops and regains ksnd_sched_lock */
-                }
-
-                if (!did_something ||           /* nothing to do */
-                    ++nloops == SOCKNAL_RESCHED) /* hogging CPU? */
-                {
-                        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-
-                        nloops = 0;
-
-                        if (!did_something) {   /* wait for something to do */
-                                rc = wait_event_interruptible (ktoenal_data.ksnd_sched_waitq,
-                                                               ktoenal_data.ksnd_shuttingdown ||
-                                                               !list_empty (&ktoenal_data.ksnd_rx_conns) ||
-                                                               !list_empty (&ktoenal_data.ksnd_tx_conns));
-                                LASSERT (rc == 0);
-                        } else 
-                                our_cond_resched();
-
-                        spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-                }
-        }
-
-        spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-        ktoenal_thread_fini ();
-        return (0);
-}
-
-
-int
-ktoenal_reaper (void *arg)
-{
-        unsigned long      flags;
-        ksock_conn_t      *conn;
-        int                rc;
-        
-        kportal_daemonize ("ktoenal_reaper");
-        kportal_blockallsigs ();
-
-        while (!ktoenal_data.ksnd_shuttingdown)
-        {
-                spin_lock_irqsave (&ktoenal_data.ksnd_reaper_lock, flags);
-
-                if (list_empty (&ktoenal_data.ksnd_reaper_list))
-                        conn = NULL;
-                else
-                {
-                        conn = list_entry (ktoenal_data.ksnd_reaper_list.next,
-                                           ksock_conn_t, ksnc_list);
-                        list_del (&conn->ksnc_list);
-                }
-
-                spin_unlock_irqrestore (&ktoenal_data.ksnd_reaper_lock, flags);
-
-                if (conn != NULL)
-                        ktoenal_close_conn (conn);
-                else {
-                        rc = wait_event_interruptible (ktoenal_data.ksnd_reaper_waitq,
-                                                       ktoenal_data.ksnd_shuttingdown ||
-                                                       !list_empty(&ktoenal_data.ksnd_reaper_list));
-                        LASSERT (rc == 0);
-                }
-        }
-
-        ktoenal_thread_fini ();
-        return (0);
-}
-
-#define POLLREAD        (POLLIN | POLLRDNORM | POLLRDBAND | POLLPRI)
-#define POLLWRITE       (POLLOUT | POLLWRNORM | POLLWRBAND)
-
-int
-ktoenal_pollthread(void *arg)
-{
-        unsigned int mask;
-        struct list_head *tmp;
-        ksock_conn_t *conn;
-        
-        /* Save the task struct for waking it up */
-        ktoenal_data.ksnd_pollthread_tsk = current; 
-        
-        kportal_daemonize ("ktoenal_pollthread");
-        kportal_blockallsigs ();
-        
-        poll_initwait(&ktoenal_data.ksnd_pwait);
-        
-        while(!ktoenal_data.ksnd_shuttingdown) {
-                
-                set_current_state(TASK_INTERRUPTIBLE);
-                
-                read_lock (&ktoenal_data.ksnd_socklist_lock);
-                list_for_each(tmp, &ktoenal_data.ksnd_socklist) {
-                        
-                        conn = list_entry(tmp, ksock_conn_t, ksnc_list);
-                        atomic_inc(&conn->ksnc_refcount);
-                        read_unlock (&ktoenal_data.ksnd_socklist_lock);
-                        
-                        mask = conn->ksnc_file->f_op->poll(conn->ksnc_file,
-                                  ktoenal_data.ksnd_slistchange ? 
-                                  &ktoenal_data.ksnd_pwait : NULL);
-                         
-                        if(mask & POLLREAD) {
-                                ktoenal_data_ready(conn);
-                                                        
-                        } 
-                        if (mask & POLLWRITE) {
-                                ktoenal_write_space(conn);  
-                              
-                        }
-                        if (mask & (POLLERR | POLLHUP)) {
-                                         /* Do error processing */          
-                        }      
-                        
-                        read_lock (&ktoenal_data.ksnd_socklist_lock);
-                        if(atomic_dec_and_test(&conn->ksnc_refcount))
-                                _ktoenal_put_conn(conn);
-                }
-                ktoenal_data.ksnd_slistchange = 0;
-                read_unlock (&ktoenal_data.ksnd_socklist_lock);
-                
-                schedule_timeout(MAX_SCHEDULE_TIMEOUT);
-                if(ktoenal_data.ksnd_slistchange) {
-                        poll_freewait(&ktoenal_data.ksnd_pwait); 
-                        poll_initwait(&ktoenal_data.ksnd_pwait);
-                }
-         }
-        poll_freewait(&ktoenal_data.ksnd_pwait);
-        ktoenal_thread_fini();
-        return (0);
-}
-
-void
-ktoenal_data_ready (ksock_conn_t *conn)
-{
-        unsigned long  flags;
-        ENTRY;
-
-        if (!test_and_set_bit (0, &conn->ksnc_rx_ready)) { 
-                spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-
-                if (!conn->ksnc_rx_scheduled) {  /* not being progressed */
-                        list_add_tail (&conn->ksnc_rx_list, 
-                                        &ktoenal_data.ksnd_rx_conns);
-                        conn->ksnc_rx_scheduled = 1;
-                        /* extra ref for scheduler */
-                        atomic_inc (&conn->ksnc_refcount);
-
-                        /* This is done to avoid the effects of a sequence
-                         * of events in which the rx_ready is lost
-                         */
-                        conn->ksnc_rx_ready=1;
-                          
-                        if (waitqueue_active (&ktoenal_data.ksnd_sched_waitq))
-                                wake_up (&ktoenal_data.ksnd_sched_waitq);
-                }
-
-                spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-        }
-
-        EXIT;
-}
-
-void
-ktoenal_write_space (ksock_conn_t *conn)
-{
-        unsigned long  flags;
-
-        CDEBUG (D_NET, "conn %p%s%s%s\n",
-                         conn,
-                        (conn == NULL) ? "" : (test_bit (0, &conn->ksnc_tx_ready) ? " ready" : " blocked"),
-                        (conn == NULL) ? "" : (conn->ksnc_tx_scheduled ? " scheduled" : " idle"),
-                        (conn == NULL) ? "" : (list_empty (&conn->ksnc_tx_queue) ? " empty" : " queued"));
-
-
-        if (!test_and_set_bit (0, &conn->ksnc_tx_ready)) {
-                spin_lock_irqsave (&ktoenal_data.ksnd_sched_lock, flags);
-
-                if (!list_empty (&conn->ksnc_tx_queue) && /* packets to send */
-                                !conn->ksnc_tx_scheduled) { /* not being progressed */
-
-                        list_add_tail (&conn->ksnc_tx_list, 
-                                        &ktoenal_data.ksnd_tx_conns);
-                        conn->ksnc_tx_scheduled = 1;
-                        /* extra ref for scheduler */
-                        atomic_inc (&conn->ksnc_refcount);
-
-                        if (waitqueue_active (&ktoenal_data.ksnd_sched_waitq))
-                                wake_up (&ktoenal_data.ksnd_sched_waitq);
-                }
-                spin_unlock_irqrestore (&ktoenal_data.ksnd_sched_lock, flags);
-        }
-}
-
-nal_cb_t ktoenal_lib = {
-        nal_data:       &ktoenal_data,                /* NAL private data */
-        cb_send:         ktoenal_send,
-        cb_recv:         ktoenal_recv,
-        cb_read:         ktoenal_read,
-        cb_write:        ktoenal_write,
-        cb_callback:     ktoenal_callback,
-        cb_malloc:       ktoenal_malloc,
-        cb_free:         ktoenal_free,
-        cb_printf:       ktoenal_printf,
-        cb_cli:          ktoenal_cli,
-        cb_sti:          ktoenal_sti,
-        cb_dist:         ktoenal_dist
-};
index 8449511..1af687c 100644 (file)
@@ -931,7 +931,6 @@ char *portals_nid2str(int nal, ptl_nid_t nid, char *str)
         case QSWNAL:
         case GMNAL:
         case IBNAL:
         case QSWNAL:
         case GMNAL:
         case IBNAL:
-        case TOENAL:
         case SCIMACNAL:
                 sprintf(str, "%u:%u", (__u32)(nid >> 32), (__u32)nid);
                 break;
         case SCIMACNAL:
                 sprintf(str, "%u:%u", (__u32)(nid >> 32), (__u32)nid);
                 break;
index 55e1935..2768c8d 100644 (file)
@@ -414,8 +414,6 @@ kportal_get_ni (int nal)
                 return (PORTAL_SYMBOL_GET(kqswnal_ni));
         case SOCKNAL:
                 return (PORTAL_SYMBOL_GET(ksocknal_ni));
                 return (PORTAL_SYMBOL_GET(kqswnal_ni));
         case SOCKNAL:
                 return (PORTAL_SYMBOL_GET(ksocknal_ni));
-        case TOENAL:
-                return  (PORTAL_SYMBOL_GET(ktoenal_ni));
         case GMNAL:
                 return  (PORTAL_SYMBOL_GET(kgmnal_ni));
         case IBNAL:
         case GMNAL:
                 return  (PORTAL_SYMBOL_GET(kgmnal_ni));
         case IBNAL:
@@ -444,9 +442,6 @@ kportal_put_ni (int nal)
         case SOCKNAL:
                 PORTAL_SYMBOL_PUT(ksocknal_ni);
                 break;
         case SOCKNAL:
                 PORTAL_SYMBOL_PUT(ksocknal_ni);
                 break;
-        case TOENAL:
-                PORTAL_SYMBOL_PUT(ktoenal_ni);
-                break;
         case GMNAL:
                 PORTAL_SYMBOL_PUT(kgmnal_ni);
                 break;
         case GMNAL:
                 PORTAL_SYMBOL_PUT(kgmnal_ni);
                 break;
index 2a96f55..1e40ed8 100644 (file)
@@ -298,7 +298,7 @@ static void /*__exit*/ pingsrv_cleanup(void)
 
 MODULE_PARM(nal, "i");
 MODULE_PARM_DESC(nal, "Use the specified NAL "
 
 MODULE_PARM(nal, "i");
 MODULE_PARM_DESC(nal, "Use the specified NAL "
-                "(6-kscimacnal, 4-toenal, 2-ksocknal, 1-kqswnal)");
+                "(6-kscimacnal, 2-ksocknal, 1-kqswnal)");
  
 MODULE_AUTHOR("Brian Behlendorf (LLNL)");
 MODULE_DESCRIPTION("A kernel space ping server for portals testing");
  
 MODULE_AUTHOR("Brian Behlendorf (LLNL)");
 MODULE_DESCRIPTION("A kernel space ping server for portals testing");
index 0d52e1f..b8bda29 100644 (file)
@@ -285,7 +285,7 @@ static void /*__exit*/ pingsrv_cleanup(void)
 
 MODULE_PARM(nal, "i");
 MODULE_PARM_DESC(nal, "Use the specified NAL "
 
 MODULE_PARM(nal, "i");
 MODULE_PARM_DESC(nal, "Use the specified NAL "
-                "(6-kscimacnal, 4-toenal, 2-ksocknal, 1-kqswnal)");
+                "(6-kscimacnal, 2-ksocknal, 1-kqswnal)");
  
 MODULE_AUTHOR("Brian Behlendorf (LLNL)");
 MODULE_DESCRIPTION("A kernel space ping server for portals testing");
  
 MODULE_AUTHOR("Brian Behlendorf (LLNL)");
 MODULE_DESCRIPTION("A kernel space ping server for portals testing");
index de01bc7..be60509 100755 (executable)
@@ -9,13 +9,6 @@ else
 fi
 
 case "$1" in
 fi
 
 case "$1" in
-       toe)
-               /sbin/insmod  ../oslib/portals.o
-               /sbin/insmod ../toenal/ktoenal.o
-               /sbin/insmod ./$PING
-               echo ktoenal > /tmp/nal
-       ;;
-       
        tcp)
                /sbin/insmod  ../oslib/portals.o
                /sbin/insmod ../socknal/ksocknal.o
        tcp)
                /sbin/insmod  ../oslib/portals.o
                /sbin/insmod ../socknal/ksocknal.o
@@ -38,7 +31,7 @@ case "$1" in
        ;;
        
        *)
        ;;
        
        *)
-               echo "Usage : ${0} < tcp | toe | elan | gm>"
+               echo "Usage : ${0} < tcp | elan | gm>"
                exit 1;
 esac
 exit 0;
                exit 1;
 esac
 exit 0;
index 4f66eeb..9b5ccf6 100755 (executable)
@@ -9,13 +9,6 @@ else
 fi
 
 case "$1" in
 fi
 
 case "$1" in
-       toe)
-               /sbin/insmod  ../oslib/portals.o
-               /sbin/insmod ../toenal/ktoenal.o
-               /sbin/insmod ./$PING nal=4
-               echo ktoenal > /tmp/nal
-       ;;
-       
        tcp)
                /sbin/insmod  ../oslib/portals.o
                /sbin/insmod ../socknal/ksocknal.o
        tcp)
                /sbin/insmod  ../oslib/portals.o
                /sbin/insmod ../socknal/ksocknal.o
@@ -38,7 +31,7 @@ case "$1" in
        ;;
        
        *)
        ;;
        
        *)
-               echo "Usage : ${0} < tcp | toe | elan | gm>"
+               echo "Usage : ${0} < tcp | elan | gm>"
                exit 1;
 esac
 ../utils/acceptor 9999&
                exit 1;
 esac
 ../utils/acceptor 9999&
index b46ee16..3c7ec20 100644 (file)
@@ -63,7 +63,6 @@ typedef struct
 static name2num_t nalnames[] = {
         {"any",         0},
         {"tcp",                SOCKNAL},
 static name2num_t nalnames[] = {
         {"any",         0},
         {"tcp",                SOCKNAL},
-        {"toe",                TOENAL},
         {"elan",       QSWNAL},
         {"gm",         GMNAL},
         {"ib",         IBNAL},
         {"elan",       QSWNAL},
         {"gm",         GMNAL},
         {"ib",         IBNAL},
@@ -651,7 +650,7 @@ int jt_ptl_connect(int argc, char **argv)
                 return 0;
         }
 
                 return 0;
         }
 
-        if (!g_nal_is_compatible (argv[0], SOCKNAL, TOENAL, 0))
+        if (!g_nal_is_compatible (argv[0], SOCKNAL, 0))
                 return -1;
         
         rc = ptl_parse_ipaddr (&ipaddr, argv[1]);
                 return -1;
         
         rc = ptl_parse_ipaddr (&ipaddr, argv[1]);
@@ -797,7 +796,7 @@ int jt_ptl_disconnect(int argc, char **argv)
                 return 0;
         }
 
                 return 0;
         }
 
-        if (!g_nal_is_compatible (NULL, SOCKNAL, TOENAL, 0))
+        if (!g_nal_is_compatible (NULL, SOCKNAL, 0))
                 return 0;
 
         if (argc >= 2 &&
                 return 0;
 
         if (argc >= 2 &&
@@ -838,7 +837,7 @@ int jt_ptl_push_connection (int argc, char **argv)
                 return 0;
         }
 
                 return 0;
         }
 
-        if (!g_nal_is_compatible (argv[0], SOCKNAL, TOENAL, 0))
+        if (!g_nal_is_compatible (argv[0], SOCKNAL, 0))
                 return -1;
         
         if (argc > 1 &&
                 return -1;
         
         if (argc > 1 &&
index 01cbce0..e91d7a3 100644 (file)
@@ -519,7 +519,6 @@ int ptlrpc_init_portals(void)
                 {SOCKNAL, "socknal"},
                 {GMNAL,   "gmnal"},
                 {IBNAL,   "ibnal"},
                 {SOCKNAL, "socknal"},
                 {GMNAL,   "gmnal"},
                 {IBNAL,   "ibnal"},
-                {TOENAL,  "toenal"},
                 {TCPNAL,  "tcpnal"},
                 {SCIMACNAL, "scimacnal"}};
         int   rc;
                 {TCPNAL,  "tcpnal"},
                 {SCIMACNAL, "scimacnal"}};
         int   rc;
index a669339..2914d4c 100755 (executable)
@@ -9,7 +9,7 @@ export OUTPUTDIR=/home/op
 export KERNELDIR=/usr/src/linux
 export LUSTREDIR=/usr/src/lustre
 export PORTALSDIR=/usr/src/portals
 export KERNELDIR=/usr/src/linux
 export LUSTREDIR=/usr/src/lustre
 export PORTALSDIR=/usr/src/portals
-NAL=toenal
+NAL=socknal
 
 # Params for OPROFILE
 #CTR0_EVENT=CPU_CLK_UNHALTED
 
 # Params for OPROFILE
 #CTR0_EVENT=CPU_CLK_UNHALTED
index 9f57bb0..55720f4 100755 (executable)
@@ -256,8 +256,6 @@ class AcceptorHandler(DaemonHandler):
         self.send_mem = send_mem
         self.recv_mem = recv_mem
 
         self.send_mem = send_mem
         self.recv_mem = recv_mem
 
-        if net_type == 'toe':
-            self.flags = self.flags + ' -N 4'
         if irq_aff:
             self.flags = self.flags + ' -i'
 
         if irq_aff:
             self.flags = self.flags + ' -i'
 
@@ -417,7 +415,7 @@ class LCTLInterface:
 
     def add_autoconn(self, net_type, send_mem, recv_mem, nid, hostaddr,
                      port, flags):
 
     def add_autoconn(self, net_type, send_mem, recv_mem, nid, hostaddr,
                      port, flags):
-        if net_type  in ('tcp', 'toe') and not config.lctl_dump:
+        if net_type  in ('tcp',) and not config.lctl_dump:
             cmds =  """
   network %s
   send_mem %d
             cmds =  """
   network %s
   send_mem %d
@@ -431,7 +429,7 @@ class LCTLInterface:
     
     def connect(self, srv):
         self.add_uuid(srv.net_type, srv.nid_uuid, srv.nid)
     
     def connect(self, srv):
         self.add_uuid(srv.net_type, srv.nid_uuid, srv.nid)
-        if srv.net_type  in ('tcp', 'toe') and not config.lctl_dump:
+        if srv.net_type  in ('tcp',) and not config.lctl_dump:
             flags = 's'
             if srv.irq_affinity:
                 flags = flags + 'i'
             flags = 's'
             if srv.irq_affinity:
                 flags = flags + 'i'
@@ -492,7 +490,7 @@ class LCTLInterface:
 
 
     def del_autoconn(self, net_type, nid, hostaddr):
 
 
     def del_autoconn(self, net_type, nid, hostaddr):
-        if net_type  in ('tcp', 'toe') and not config.lctl_dump:
+        if net_type  in ('tcp',) and not config.lctl_dump:
                 cmds =  """
   ignore_errors
   network %s
                 cmds =  """
   ignore_errors
   network %s
@@ -504,7 +502,7 @@ class LCTLInterface:
     # disconnect one connection
     def disconnect(self, srv):
         self.del_uuid(srv.nid_uuid)
     # disconnect one connection
     def disconnect(self, srv):
         self.del_uuid(srv.nid_uuid)
-        if srv.net_type  in ('tcp', 'toe') and not config.lctl_dump:
+        if srv.net_type  in ('tcp',) and not config.lctl_dump:
             self.del_autoconn(srv.net_type, srv.nid, srv.hostaddr)
 
     def del_uuid(self, uuid):
             self.del_autoconn(srv.net_type, srv.nid, srv.hostaddr)
 
     def del_uuid(self, uuid):
@@ -856,7 +854,7 @@ def sys_get_local_nid(net_type, wildcard, cluster_id):
 def sys_get_local_address(net_type, wildcard, cluster_id):
     """Return the local address for the network type."""
     local = ""
 def sys_get_local_address(net_type, wildcard, cluster_id):
     """Return the local address for the network type."""
     local = ""
-    if net_type in ('tcp', 'toe'):
+    if net_type in ('tcp',):
         if  ':' in wildcard:
             iface, star = string.split(wildcard, ':')
             local = if2addr(iface)
         if  ':' in wildcard:
             iface, star = string.split(wildcard, ':')
             local = if2addr(iface)
@@ -1085,8 +1083,6 @@ class Network(Module):
             self.add_portals_module("router", 'kptlrouter')
         if self.net_type == 'tcp':
             self.add_portals_module("knals/socknal", 'ksocknal')
             self.add_portals_module("router", 'kptlrouter')
         if self.net_type == 'tcp':
             self.add_portals_module("knals/socknal", 'ksocknal')
-        if self.net_type == 'toe':
-            self.add_portals_module("knals/toenal", 'ktoenal')
         if self.net_type == 'elan':
             self.add_portals_module("knals/qswnal", 'kqswnal')
         if self.net_type == 'gm':
         if self.net_type == 'elan':
             self.add_portals_module("knals/qswnal", 'kqswnal')
         if self.net_type == 'gm':
@@ -1156,7 +1152,7 @@ class RouteTable(Module):
                          lo, hi):
         # only setup connections for tcp NALs
         srvdb = None
                          lo, hi):
         # only setup connections for tcp NALs
         srvdb = None
-        if not net_type in ('tcp', 'toe'):
+        if not net_type in ('tcp',):
             return None
 
         # connect to target if route is to single node and this node is the gw
             return None
 
         # connect to target if route is to single node and this node is the gw
index 47076a3..62afbbc 100755 (executable)
@@ -60,7 +60,7 @@ Object creation command summary:
   --node node_name
   --nid nid
   --cluster_id 
   --node node_name
   --nid nid
   --cluster_id 
-  --nettype tcp|elan|toe|gm|scimac
+  --nettype tcp|elan|gm|scimac
   --hostaddr addr
   --port port
   --tcpbuf size
   --hostaddr addr
   --port port
   --tcpbuf size
@@ -596,7 +596,7 @@ def add_net(gen, lustre, options):
     hostaddr = get_option(options, 'hostaddr')
     net_type = get_option(options, 'nettype')
 
     hostaddr = get_option(options, 'hostaddr')
     net_type = get_option(options, 'nettype')
 
-    if net_type in ('tcp', 'toe'):
+    if net_type in ('tcp',):
         port = get_option_int(options, 'port')
         tcpbuf = get_option_int(options, 'tcpbuf')
         irq_aff = get_option_int(options, 'irq_affinity')
         port = get_option_int(options, 'port')
         tcpbuf = get_option_int(options, 'tcpbuf')
         irq_aff = get_option_int(options, 'irq_affinity')