Whamcloud - gitweb
LU-14159 build: fix gcc8 warnings on kthread_run calls
[fs/lustre-release.git] / lnet / klnds / socklnd / socklnd_cb.c
index 8439652..3cad0fd 100644 (file)
@@ -24,6 +24,7 @@
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#include <libcfs/linux/linux-mem.h>
 #include "socklnd.h"
 
 struct ksock_tx *
@@ -53,7 +54,7 @@ ksocknal_alloc_tx(int type, int size)
         if (tx == NULL)
                 return NULL;
 
-       atomic_set(&tx->tx_refcount, 1);
+       refcount_set(&tx->tx_refcount, 1);
        tx->tx_zc_aborted = 0;
        tx->tx_zc_capable = 0;
        tx->tx_zc_checked = 0;
@@ -70,26 +71,25 @@ ksocknal_alloc_tx_noop(__u64 cookie, int nonblk)
 {
        struct ksock_tx *tx;
 
-        tx = ksocknal_alloc_tx(KSOCK_MSG_NOOP, KSOCK_NOOP_TX_SIZE);
-        if (tx == NULL) {
-                CERROR("Can't allocate noop tx desc\n");
-                return NULL;
-        }
+       tx = ksocknal_alloc_tx(KSOCK_MSG_NOOP, KSOCK_NOOP_TX_SIZE);
+       if (tx == NULL) {
+               CERROR("Can't allocate noop tx desc\n");
+               return NULL;
+       }
 
-        tx->tx_conn     = NULL;
-        tx->tx_lnetmsg  = NULL;
-        tx->tx_kiov     = NULL;
-        tx->tx_nkiov    = 0;
-        tx->tx_iov      = tx->tx_frags.virt.iov;
-        tx->tx_niov     = 1;
-        tx->tx_nonblk   = nonblk;
+       tx->tx_conn     = NULL;
+       tx->tx_lnetmsg  = NULL;
+       tx->tx_kiov     = NULL;
+       tx->tx_nkiov    = 0;
+       tx->tx_niov     = 1;
+       tx->tx_nonblk   = nonblk;
 
        tx->tx_msg.ksm_csum = 0;
        tx->tx_msg.ksm_type = KSOCK_MSG_NOOP;
        tx->tx_msg.ksm_zc_cookies[0] = 0;
-        tx->tx_msg.ksm_zc_cookies[1] = cookie;
+       tx->tx_msg.ksm_zc_cookies[1] = cookie;
 
-        return tx;
+       return tx;
 }
 
 
@@ -111,17 +111,17 @@ ksocknal_free_tx(struct ksock_tx *tx)
 }
 
 static int
-ksocknal_send_iov(struct ksock_conn *conn, struct ksock_tx *tx,
+ksocknal_send_hdr(struct ksock_conn *conn, struct ksock_tx *tx,
                  struct kvec *scratch_iov)
 {
-       struct kvec *iov = tx->tx_iov;
+       struct kvec *iov = &tx->tx_hdr;
        int    nob;
        int    rc;
 
        LASSERT(tx->tx_niov > 0);
 
-       /* Never touch tx->tx_iov inside ksocknal_lib_send_iov() */
-       rc = ksocknal_lib_send_iov(conn, tx, scratch_iov);
+       /* Never touch tx->tx_hdr inside ksocknal_lib_send_hdr() */
+       rc = ksocknal_lib_send_hdr(conn, tx, scratch_iov);
 
        if (rc <= 0)                            /* sent nothing? */
                return rc;
@@ -131,19 +131,16 @@ ksocknal_send_iov(struct ksock_conn *conn, struct ksock_tx *tx,
        tx->tx_resid -= nob;
 
        /* "consume" iov */
-       do {
-               LASSERT(tx->tx_niov > 0);
+       LASSERT(tx->tx_niov == 1);
 
-               if (nob < (int) iov->iov_len) {
-                       iov->iov_base += nob;
-                       iov->iov_len -= nob;
-                       return rc;
-               }
+       if (nob < (int) iov->iov_len) {
+               iov->iov_base += nob;
+               iov->iov_len -= nob;
+               return rc;
+       }
 
-               nob -= iov->iov_len;
-               tx->tx_iov = ++iov;
-               tx->tx_niov--;
-       } while (nob != 0);
+       LASSERT(nob == iov->iov_len);
+       tx->tx_niov--;
 
        return rc;
 }
@@ -212,7 +209,7 @@ ksocknal_transmit(struct ksock_conn *conn, struct ksock_tx *tx,
                        ksocknal_data.ksnd_enomem_tx--;
                        rc = -EAGAIN;
                } else if (tx->tx_niov != 0) {
-                       rc = ksocknal_send_iov(conn, tx, scratch_iov);
+                       rc = ksocknal_send_hdr(conn, tx, scratch_iov);
                } else {
                        rc = ksocknal_send_kiov(conn, tx, scratch_iov);
                }
@@ -225,7 +222,7 @@ ksocknal_transmit(struct ksock_conn *conn, struct ksock_tx *tx,
                        /* allocated send buffer bytes < computed; infer
                         * something got ACKed */
                        conn->ksnc_tx_deadline = ktime_get_seconds() +
-                                                lnet_get_lnd_timeout();
+                                                ksocknal_timeout();
                        conn->ksnc_peer->ksnp_last_alive = ktime_get_seconds();
                        conn->ksnc_tx_bufnob = bufnob;
                        smp_mb();
@@ -274,7 +271,7 @@ ksocknal_recv_iov(struct ksock_conn *conn, struct kvec *scratchiov)
 
        conn->ksnc_peer->ksnp_last_alive = ktime_get_seconds();
        conn->ksnc_rx_deadline = ktime_get_seconds() +
-                                lnet_get_lnd_timeout();
+                                ksocknal_timeout();
        smp_mb();                       /* order with setting rx_started */
        conn->ksnc_rx_started = 1;
 
@@ -319,7 +316,7 @@ ksocknal_recv_kiov(struct ksock_conn *conn, struct page **rx_scratch_pgs,
 
        conn->ksnc_peer->ksnp_last_alive = ktime_get_seconds();
        conn->ksnc_rx_deadline = ktime_get_seconds() +
-                                lnet_get_lnd_timeout();
+                                ksocknal_timeout();
        smp_mb();                       /* order with setting rx_started */
        conn->ksnc_rx_started = 1;
 
@@ -458,7 +455,7 @@ ksocknal_txlist_done(struct lnet_ni *ni, struct list_head *txlist, int error)
                                tx->tx_hstatus = LNET_MSG_STATUS_LOCAL_ERROR;
                }
 
-               LASSERT(atomic_read(&tx->tx_refcount) == 1);
+               LASSERT(refcount_read(&tx->tx_refcount) == 1);
                ksocknal_tx_done(ni, tx, error);
        }
 }
@@ -493,7 +490,7 @@ ksocknal_check_zc_req(struct ksock_tx *tx)
 
         /* ZC_REQ is going to be pinned to the peer_ni */
        tx->tx_deadline = ktime_get_seconds() +
-                         lnet_get_lnd_timeout();
+                         ksocknal_timeout();
 
         LASSERT (tx->tx_msg.ksm_zc_cookies[0] == 0);
 
@@ -568,8 +565,8 @@ ksocknal_process_transmit(struct ksock_conn *conn, struct ksock_tx *tx,
 
                counter++;   /* exponential backoff warnings */
                if ((counter & (-counter)) == counter)
-                       CWARN("%u ENOMEM tx %p (%u allocated)\n",
-                             counter, conn, atomic_read(&libcfs_kmemory));
+                       CWARN("%u ENOMEM tx %p (%lld allocated)\n",
+                             counter, conn, libcfs_kmem_read());
 
                /* Queue on ksnd_enomem_conns for retry after a timeout */
                spin_lock_bh(&ksocknal_data.ksnd_reaper_lock);
@@ -763,17 +760,18 @@ ksocknal_queue_tx_locked(struct ksock_tx *tx, struct ksock_conn *conn)
 
         ksocknal_tx_prep(conn, tx);
 
-        /* Ensure the frags we've been given EXACTLY match the number of
-         * bytes we want to send.  Many TCP/IP stacks disregard any total
+       /* Ensure the frags we've been given EXACTLY match the number of
+        * bytes we want to send.  Many TCP/IP stacks disregard any total
         * size parameters passed to them and just look at the frags.
-         *
-         * We always expect at least 1 mapped fragment containing the
-         * complete ksocknal message header. */
-        LASSERT (lnet_iov_nob (tx->tx_niov, tx->tx_iov) +
-                 lnet_kiov_nob(tx->tx_nkiov, tx->tx_kiov) ==
-                 (unsigned int)tx->tx_nob);
-        LASSERT (tx->tx_niov >= 1);
-        LASSERT (tx->tx_resid == tx->tx_nob);
+        *
+        * We always expect at least 1 mapped fragment containing the
+        * complete ksocknal message header.
+        */
+       LASSERT(lnet_iov_nob(tx->tx_niov, &tx->tx_hdr) +
+               lnet_kiov_nob(tx->tx_nkiov, tx->tx_kiov) ==
+               (unsigned int)tx->tx_nob);
+       LASSERT(tx->tx_niov >= 1);
+       LASSERT(tx->tx_resid == tx->tx_nob);
 
         CDEBUG (D_NET, "Packet %p type %d, nob %d niov %d nkiov %d\n",
                 tx, (tx->tx_lnetmsg != NULL) ? tx->tx_lnetmsg->msg_hdr.type:
@@ -786,7 +784,7 @@ ksocknal_queue_tx_locked(struct ksock_tx *tx, struct ksock_conn *conn)
        if (list_empty(&conn->ksnc_tx_queue) && bufnob == 0) {
                /* First packet starts the timeout */
                conn->ksnc_tx_deadline = ktime_get_seconds() +
-                                        lnet_get_lnd_timeout();
+                                        ksocknal_timeout();
                if (conn->ksnc_tx_bufnob > 0) /* something got ACKed */
                        conn->ksnc_peer->ksnp_last_alive = ktime_get_seconds();
                conn->ksnc_tx_bufnob = 0;
@@ -963,7 +961,7 @@ ksocknal_launch_packet(struct lnet_ni *ni, struct ksock_tx *tx,
             ksocknal_find_connecting_route_locked (peer_ni) != NULL) {
                 /* the message is going to be pinned to the peer_ni */
                tx->tx_deadline = ktime_get_seconds() +
-                                 lnet_get_lnd_timeout();
+                                 ksocknal_timeout();
 
                 /* Queue the message until a connection is established */
                list_add_tail(&tx->tx_list, &peer_ni->ksnp_tx_queue);
@@ -982,17 +980,17 @@ ksocknal_launch_packet(struct lnet_ni *ni, struct ksock_tx *tx,
 int
 ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg)
 {
-       int mpflag = 1;
+       /* '1' for consistency with code that checks !mpflag to restore */
+       unsigned int mpflag = 1;
        int type = lntmsg->msg_type;
        struct lnet_process_id target = lntmsg->msg_target;
-       unsigned int     payload_niov = lntmsg->msg_niov;
-       struct kvec *payload_iov = lntmsg->msg_iov;
-       struct bio_vec  *payload_kiov = lntmsg->msg_kiov;
-       unsigned int     payload_offset = lntmsg->msg_offset;
-       unsigned int     payload_nob = lntmsg->msg_len;
-       struct ksock_tx *tx;
-       int              desc_size;
-       int              rc;
+       unsigned int payload_niov = lntmsg->msg_niov;
+       struct bio_vec *payload_kiov = lntmsg->msg_kiov;
+       unsigned int payload_offset = lntmsg->msg_offset;
+       unsigned int payload_nob = lntmsg->msg_len;
+       struct ksock_tx *tx;
+       int desc_size;
+       int rc;
 
         /* NB 'private' is different depending on what we're sending.
          * Just ignore it... */
@@ -1002,60 +1000,48 @@ ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg)
 
        LASSERT (payload_nob == 0 || payload_niov > 0);
        LASSERT (payload_niov <= LNET_MAX_IOV);
-       /* payload is either all vaddrs or all pages */
-       LASSERT (!(payload_kiov != NULL && payload_iov != NULL));
        LASSERT (!in_interrupt ());
 
-       if (payload_iov != NULL)
-               desc_size = offsetof(struct ksock_tx,
-                                    tx_frags.virt.iov[1 + payload_niov]);
-       else
-               desc_size = offsetof(struct ksock_tx,
-                                    tx_frags.paged.kiov[payload_niov]);
+       desc_size = offsetof(struct ksock_tx,
+                            tx_payload[payload_niov]);
 
         if (lntmsg->msg_vmflush)
-                mpflag = cfs_memory_pressure_get_and_set();
-        tx = ksocknal_alloc_tx(KSOCK_MSG_LNET, desc_size);
-        if (tx == NULL) {
-                CERROR("Can't allocate tx desc type %d size %d\n",
-                       type, desc_size);
-                if (lntmsg->msg_vmflush)
-                        cfs_memory_pressure_restore(mpflag);
-                return (-ENOMEM);
-        }
+               mpflag = memalloc_noreclaim_save();
 
-        tx->tx_conn = NULL;                     /* set when assigned a conn */
-        tx->tx_lnetmsg = lntmsg;
-
-        if (payload_iov != NULL) {
-                tx->tx_kiov = NULL;
-                tx->tx_nkiov = 0;
-                tx->tx_iov = tx->tx_frags.virt.iov;
-                tx->tx_niov = 1 +
-                              lnet_extract_iov(payload_niov, &tx->tx_iov[1],
-                                               payload_niov, payload_iov,
-                                               payload_offset, payload_nob);
-        } else {
-                tx->tx_niov = 1;
-                tx->tx_iov = &tx->tx_frags.paged.iov;
-                tx->tx_kiov = tx->tx_frags.paged.kiov;
-                tx->tx_nkiov = lnet_extract_kiov(payload_niov, tx->tx_kiov,
-                                                 payload_niov, payload_kiov,
-                                                 payload_offset, payload_nob);
-
-                if (payload_nob >= *ksocknal_tunables.ksnd_zc_min_payload)
-                        tx->tx_zc_capable = 1;
-        }
+       tx = ksocknal_alloc_tx(KSOCK_MSG_LNET, desc_size);
+       if (tx == NULL) {
+               CERROR("Can't allocate tx desc type %d size %d\n",
+                      type, desc_size);
+               if (lntmsg->msg_vmflush)
+                       memalloc_noreclaim_restore(mpflag);
+               return -ENOMEM;
+       }
+
+       tx->tx_conn = NULL;                     /* set when assigned a conn */
+       tx->tx_lnetmsg = lntmsg;
+
+       tx->tx_niov = 1;
+       tx->tx_kiov = tx->tx_payload;
+       tx->tx_nkiov = lnet_extract_kiov(payload_niov, tx->tx_kiov,
+                                        payload_niov, payload_kiov,
+                                        payload_offset, payload_nob);
+
+       if (payload_nob >= *ksocknal_tunables.ksnd_zc_min_payload)
+               tx->tx_zc_capable = 1;
 
        tx->tx_msg.ksm_csum = 0;
        tx->tx_msg.ksm_type = KSOCK_MSG_LNET;
        tx->tx_msg.ksm_zc_cookies[0] = 0;
        tx->tx_msg.ksm_zc_cookies[1] = 0;
 
-        /* The first fragment will be set later in pro_pack */
-        rc = ksocknal_launch_packet(ni, tx, target);
-        if (!mpflag)
-                cfs_memory_pressure_restore(mpflag);
+       /* The first fragment will be set later in pro_pack */
+       rc = ksocknal_launch_packet(ni, tx, target);
+       /*
+        * We can't test lntsmg->msg_vmflush again as lntmsg may
+        * have been freed.
+        */
+       if (!mpflag)
+               memalloc_noreclaim_restore(mpflag);
 
         if (rc == 0)
                 return (0);
@@ -1068,24 +1054,20 @@ ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg)
 int
 ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name)
 {
-       struct task_struct *task = kthread_run(fn, arg, name);
+       struct task_struct *task = kthread_run(fn, arg, "%s", name);
 
        if (IS_ERR(task))
                return PTR_ERR(task);
 
-       write_lock_bh(&ksocknal_data.ksnd_global_lock);
-       ksocknal_data.ksnd_nthreads++;
-       write_unlock_bh(&ksocknal_data.ksnd_global_lock);
+       atomic_inc(&ksocknal_data.ksnd_nthreads);
        return 0;
 }
 
 void
 ksocknal_thread_fini (void)
 {
-       write_lock_bh(&ksocknal_data.ksnd_global_lock);
-       if (--ksocknal_data.ksnd_nthreads == 0)
+       if (atomic_dec_and_test(&ksocknal_data.ksnd_nthreads))
                wake_up_var(&ksocknal_data.ksnd_nthreads);
-       write_unlock_bh(&ksocknal_data.ksnd_global_lock);
 }
 
 int
@@ -1178,7 +1160,7 @@ ksocknal_process_receive(struct ksock_conn *conn,
        struct lnet_process_id *id;
        int rc;
 
-       LASSERT (atomic_read(&conn->ksnc_conn_refcount) > 0);
+       LASSERT(refcount_read(&conn->ksnc_conn_refcount) > 0);
 
        /* NB: sched lock NOT held */
        /* SOCKNAL_RX_LNET_HEADER is here for backward compatibility */
@@ -1384,7 +1366,7 @@ ksocknal_process_receive(struct ksock_conn *conn,
 
 int
 ksocknal_recv(struct lnet_ni *ni, void *private, struct lnet_msg *msg,
-             int delayed, unsigned int niov, struct kvec *iov,
+             int delayed, unsigned int niov,
              struct bio_vec *kiov, unsigned int offset, unsigned int mlen,
              unsigned int rlen)
 {
@@ -1398,21 +1380,19 @@ ksocknal_recv(struct lnet_ni *ni, void *private, struct lnet_msg *msg,
        conn->ksnc_rx_nob_wanted = mlen;
        conn->ksnc_rx_nob_left   = rlen;
 
-        if (mlen == 0 || iov != NULL) {
-                conn->ksnc_rx_nkiov = 0;
-                conn->ksnc_rx_kiov = NULL;
-                conn->ksnc_rx_iov = conn->ksnc_rx_iov_space.iov;
-                conn->ksnc_rx_niov =
-                        lnet_extract_iov(LNET_MAX_IOV, conn->ksnc_rx_iov,
-                                         niov, iov, offset, mlen);
-        } else {
-                conn->ksnc_rx_niov = 0;
-                conn->ksnc_rx_iov  = NULL;
-                conn->ksnc_rx_kiov = conn->ksnc_rx_iov_space.kiov;
-                conn->ksnc_rx_nkiov =
-                        lnet_extract_kiov(LNET_MAX_IOV, conn->ksnc_rx_kiov,
-                                          niov, kiov, offset, mlen);
-        }
+       if (mlen == 0) {
+               conn->ksnc_rx_nkiov = 0;
+               conn->ksnc_rx_kiov = NULL;
+               conn->ksnc_rx_iov = conn->ksnc_rx_iov_space.iov;
+               conn->ksnc_rx_niov = 0;
+       } else {
+               conn->ksnc_rx_niov = 0;
+               conn->ksnc_rx_iov  = NULL;
+               conn->ksnc_rx_kiov = conn->ksnc_rx_iov_space.kiov;
+               conn->ksnc_rx_nkiov =
+                       lnet_extract_kiov(LNET_MAX_IOV, conn->ksnc_rx_kiov,
+                                         niov, kiov, offset, mlen);
+       }
 
         LASSERT (mlen ==
                  lnet_iov_nob (conn->ksnc_rx_niov, conn->ksnc_rx_iov) +
@@ -1462,7 +1442,6 @@ int ksocknal_scheduler(void *arg)
        struct ksock_conn *conn;
        struct ksock_tx *tx;
        int rc;
-       int nloops = 0;
        long id = (long)arg;
        struct page **rx_scratch_pgs;
        struct kvec *scratch_iov;
@@ -1608,12 +1587,10 @@ int ksocknal_scheduler(void *arg)
 
                        did_something = 1;
                }
-               if (!did_something ||           /* nothing to do */
-                   ++nloops == SOCKNAL_RESCHED) { /* hogging CPU? */
+               if (!did_something ||   /* nothing to do */
+                   need_resched()) {   /* hogging CPU? */
                        spin_unlock_bh(&sched->kss_lock);
 
-                       nloops = 0;
-
                        if (!did_something) {   /* wait for something to do */
                                rc = wait_event_interruptible_exclusive(
                                        sched->kss_waitq,
@@ -1798,7 +1775,7 @@ ksocknal_recv_hello(struct lnet_ni *ni, struct ksock_conn *conn,
        /* socket type set on active connections - not set on passive */
        LASSERT(!active == !(conn->ksnc_type != SOCKLND_CONN_NONE));
 
-       timeout = active ? lnet_get_lnd_timeout() :
+       timeout = active ? ksocknal_timeout() :
                            lnet_acceptor_timeout();
 
        rc = lnet_sock_read(sock, &hello->kshm_magic,
@@ -1933,7 +1910,7 @@ ksocknal_connect(struct ksock_route *route)
         int               retry_later = 0;
         int               rc = 0;
 
-       deadline = ktime_get_seconds() + lnet_get_lnd_timeout();
+       deadline = ktime_get_seconds() + ksocknal_timeout();
 
        write_lock_bh(&ksocknal_data.ksnd_global_lock);
 
@@ -1942,48 +1919,48 @@ ksocknal_connect(struct ksock_route *route)
 
         route->ksnr_connecting = 1;
 
-        for (;;) {
-                wanted = ksocknal_route_mask() & ~route->ksnr_connected;
+       for (;;) {
+               wanted = ksocknal_route_mask() & ~route->ksnr_connected;
 
-                /* stop connecting if peer_ni/route got closed under me, or
-                 * route got connected while queued */
-                if (peer_ni->ksnp_closing || route->ksnr_deleted ||
-                    wanted == 0) {
-                        retry_later = 0;
-                        break;
-                }
+               /* stop connecting if peer_ni/route got closed under me, or
+                * route got connected while queued */
+               if (peer_ni->ksnp_closing || route->ksnr_deleted ||
+                   wanted == 0) {
+                       retry_later = 0;
+                       break;
+               }
 
-                /* reschedule if peer_ni is connecting to me */
-                if (peer_ni->ksnp_accepting > 0) {
-                        CDEBUG(D_NET,
-                               "peer_ni %s(%d) already connecting to me, retry later.\n",
-                               libcfs_nid2str(peer_ni->ksnp_id.nid), peer_ni->ksnp_accepting);
-                        retry_later = 1;
-                }
+               /* reschedule if peer_ni is connecting to me */
+               if (peer_ni->ksnp_accepting > 0) {
+                       CDEBUG(D_NET,
+                              "peer_ni %s(%d) already connecting to me, retry later.\n",
+                              libcfs_nid2str(peer_ni->ksnp_id.nid), peer_ni->ksnp_accepting);
+                       retry_later = 1;
+               }
 
-                if (retry_later) /* needs reschedule */
-                        break;
+               if (retry_later) /* needs reschedule */
+                       break;
 
-                if ((wanted & (1 << SOCKLND_CONN_ANY)) != 0) {
-                        type = SOCKLND_CONN_ANY;
-                } else if ((wanted & (1 << SOCKLND_CONN_CONTROL)) != 0) {
-                        type = SOCKLND_CONN_CONTROL;
-                } else if ((wanted & (1 << SOCKLND_CONN_BULK_IN)) != 0) {
-                        type = SOCKLND_CONN_BULK_IN;
-                } else {
-                        LASSERT ((wanted & (1 << SOCKLND_CONN_BULK_OUT)) != 0);
-                        type = SOCKLND_CONN_BULK_OUT;
-                }
+               if ((wanted & BIT(SOCKLND_CONN_ANY)) != 0) {
+                       type = SOCKLND_CONN_ANY;
+               } else if ((wanted & BIT(SOCKLND_CONN_CONTROL)) != 0) {
+                       type = SOCKLND_CONN_CONTROL;
+               } else if ((wanted & BIT(SOCKLND_CONN_BULK_IN)) != 0) {
+                       type = SOCKLND_CONN_BULK_IN;
+               } else {
+                       LASSERT ((wanted & BIT(SOCKLND_CONN_BULK_OUT)) != 0);
+                       type = SOCKLND_CONN_BULK_OUT;
+               }
 
                write_unlock_bh(&ksocknal_data.ksnd_global_lock);
 
                if (ktime_get_seconds() >= deadline) {
-                        rc = -ETIMEDOUT;
-                        lnet_connect_console_error(rc, peer_ni->ksnp_id.nid,
-                                                   route->ksnr_ipaddr,
-                                                   route->ksnr_port);
-                        goto failed;
-                }
+                       rc = -ETIMEDOUT;
+                       lnet_connect_console_error(rc, peer_ni->ksnp_id.nid,
+                                                  route->ksnr_ipaddr,
+                                                  route->ksnr_port);
+                       goto failed;
+               }
 
                sock = lnet_connect(peer_ni->ksnp_id.nid,
                                    route->ksnr_myiface,
@@ -1994,23 +1971,23 @@ ksocknal_connect(struct ksock_route *route)
                        goto failed;
                }
 
-                rc = ksocknal_create_conn(peer_ni->ksnp_ni, route, sock, type);
-                if (rc < 0) {
-                        lnet_connect_console_error(rc, peer_ni->ksnp_id.nid,
-                                                   route->ksnr_ipaddr,
-                                                   route->ksnr_port);
-                        goto failed;
-                }
+               rc = ksocknal_create_conn(peer_ni->ksnp_ni, route, sock, type);
+               if (rc < 0) {
+                       lnet_connect_console_error(rc, peer_ni->ksnp_id.nid,
+                                                  route->ksnr_ipaddr,
+                                                  route->ksnr_port);
+                       goto failed;
+               }
 
-                /* A +ve RC means I have to retry because I lost the connection
-                 * race or I have to renegotiate protocol version */
-                retry_later = (rc != 0);
-                if (retry_later)
-                        CDEBUG(D_NET, "peer_ni %s: conn race, retry later.\n",
-                               libcfs_nid2str(peer_ni->ksnp_id.nid));
+               /* A +ve RC means I have to retry because I lost the connection
+                * race or I have to renegotiate protocol version */
+               retry_later = (rc != 0);
+               if (retry_later)
+                       CDEBUG(D_NET, "peer_ni %s: conn race, retry later.\n",
+                              libcfs_nid2str(peer_ni->ksnp_id.nid));
 
                write_lock_bh(&ksocknal_data.ksnd_global_lock);
-        }
+       }
 
         route->ksnr_scheduled = 0;
         route->ksnr_connecting = 0;
@@ -2212,7 +2189,6 @@ ksocknal_connd(void *arg)
        spinlock_t *connd_lock = &ksocknal_data.ksnd_connd_lock;
        struct ksock_connreq *cr;
        wait_queue_entry_t wait;
-       int nloops = 0;
        int cons_retry = 0;
 
        init_waitqueue_entry(&wait, current);
@@ -2289,10 +2265,9 @@ ksocknal_connd(void *arg)
                }
 
                if (dropped_lock) {
-                       if (++nloops < SOCKNAL_RESCHED)
+                       if (!need_resched())
                                continue;
                        spin_unlock_bh(connd_lock);
-                       nloops = 0;
                        cond_resched();
                        spin_lock_bh(connd_lock);
                        continue;
@@ -2303,7 +2278,6 @@ ksocknal_connd(void *arg)
                add_wait_queue_exclusive(&ksocknal_data.ksnd_connd_waitq, &wait);
                spin_unlock_bh(connd_lock);
 
-               nloops = 0;
                schedule_timeout(timeout);
 
                remove_wait_queue(&ksocknal_data.ksnd_connd_waitq, &wait);
@@ -2678,7 +2652,7 @@ int ksocknal_reaper(void *arg)
                         * times the timeout interval.
                         */
 
-                       lnd_timeout = lnet_get_lnd_timeout();
+                       lnd_timeout = ksocknal_timeout();
                        if (lnd_timeout > n * p)
                                chunk = (chunk * n * p) / lnd_timeout;
                        if (chunk == 0)