Whamcloud - gitweb
LU-7734 gnilnd: update GNI lnd driver to handle multirail api changes
[fs/lustre-release.git] / lnet / klnds / gnilnd / gnilnd.c
index 7ccfbf2..74d0fa2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 2012 Cray, Inc.
  *
- * Copyright (c) 2013, 2014, Intel Corporation.
+ * Copyright (c) 2013, 2015, Intel Corporation.
  *
  *   Author: Nic Henke <nic@cray.com>
  *   Author: James Shimek <jshimek@cray.com>
@@ -319,7 +319,8 @@ kgnilnd_create_conn(kgn_conn_t **connp, kgn_device_t *dev)
 
 failed:
        atomic_dec(&kgnilnd_data.kgn_nconns);
-       LIBCFS_FREE(conn->gnc_tx_ref_table, GNILND_MAX_MSG_ID * sizeof(void *));
+       kgnilnd_vfree(conn->gnc_tx_ref_table,
+                     GNILND_MAX_MSG_ID * sizeof(void *));
        LIBCFS_FREE(conn, sizeof(*conn));
        return rc;
 }
@@ -493,8 +494,8 @@ kgnilnd_destroy_conn(kgn_conn_t *conn)
                kgnilnd_peer_decref(conn->gnc_peer);
 
        if (conn->gnc_tx_ref_table != NULL) {
-               LIBCFS_FREE(conn->gnc_tx_ref_table,
-                           GNILND_MAX_MSG_ID * sizeof(void *));
+               kgnilnd_vfree(conn->gnc_tx_ref_table,
+                             GNILND_MAX_MSG_ID * sizeof(void *));
        }
 
        LIBCFS_FREE(conn, sizeof(*conn));
@@ -635,7 +636,7 @@ kgnilnd_close_conn_locked(kgn_conn_t *conn, int error)
 
        /* if we NETERROR, make sure it is rate limited */
        if (!kgnilnd_conn_clean_errno(error) &&
-           peer->gnp_down == GNILND_RCA_NODE_UP) {
+           peer->gnp_state != GNILND_PEER_DOWN) {
                CNETERR("closing conn to %s: error %d\n",
                       libcfs_nid2str(peer->gnp_nid), error);
        } else {
@@ -808,19 +809,13 @@ kgnilnd_complete_closed_conn(kgn_conn_t *conn)
        logmsg = (nlive + nrdma + nq_rdma);
 
        if (logmsg) {
-               if (conn->gnc_peer->gnp_down == GNILND_RCA_NODE_UP) {
-                       CNETERR("Closed conn 0x%p->%s (errno %d, peer errno %d): "
-                               "canceled %d TX, %d/%d RDMA\n",
-                               conn, libcfs_nid2str(conn->gnc_peer->gnp_nid),
-                               conn->gnc_error, conn->gnc_peer_error,
-                               nlive, nq_rdma, nrdma);
-               } else {
-                       CDEBUG(D_NET, "Closed conn 0x%p->%s (errno %d,"
-                               " peer errno %d): canceled %d TX, %d/%d RDMA\n",
-                               conn, libcfs_nid2str(conn->gnc_peer->gnp_nid),
-                               conn->gnc_error, conn->gnc_peer_error,
-                               nlive, nq_rdma, nrdma);
-               }
+               int level = conn->gnc_peer->gnp_state == GNILND_PEER_UP ?
+                               D_NETERROR : D_NET;
+               CDEBUG(level, "Closed conn 0x%p->%s (errno %d,"
+                       " peer errno %d): canceled %d TX, %d/%d RDMA\n",
+                       conn, libcfs_nid2str(conn->gnc_peer->gnp_nid),
+                       conn->gnc_error, conn->gnc_peer_error,
+                       nlive, nq_rdma, nrdma);
        }
 
        kgnilnd_destroy_conn_ep(conn);
@@ -1004,7 +999,7 @@ kgnilnd_create_peer_safe(kgn_peer_t **peerp,
                return -ENOMEM;
        }
        peer->gnp_nid = nid;
-       peer->gnp_down = node_state;
+       peer->gnp_state = node_state;
 
        /* translate from nid to nic addr & store */
        rc = kgnilnd_nid_to_nicaddrs(LNET_NIDADDR(nid), 1, &peer->gnp_host_id);
@@ -1724,9 +1719,8 @@ kgnilnd_report_node_state(lnet_nid_t nid, int down)
                write_unlock(&kgnilnd_data.kgn_peer_conn_lock);
 
                /* Don't add a peer for node up events */
-               if (down == GNILND_RCA_NODE_UP) {
+               if (down == GNILND_PEER_UP)
                        return 0;
-               }
 
                /* find any valid net - we don't care which one... */
                down_read(&kgnilnd_data.kgn_net_rw_sem);
@@ -1770,9 +1764,9 @@ kgnilnd_report_node_state(lnet_nid_t nid, int down)
                }
        }
 
-       peer->gnp_down = down;
+       peer->gnp_state = down;
 
-       if (down == GNILND_RCA_NODE_DOWN) {
+       if (down == GNILND_PEER_DOWN) {
                kgn_conn_t *conn;
 
                peer->gnp_down_event_time = jiffies;
@@ -1788,7 +1782,7 @@ kgnilnd_report_node_state(lnet_nid_t nid, int down)
 
        write_unlock(&kgnilnd_data.kgn_peer_conn_lock);
 
-       if (down == GNILND_RCA_NODE_DOWN) {
+       if (down == GNILND_PEER_DOWN) {
                /* using ENETRESET so we don't get messages from
                 * kgnilnd_tx_done
                 */
@@ -2690,9 +2684,9 @@ kgnilnd_startup(lnet_ni_t *ni)
        kgn_net_t        *net;
        ENTRY;
 
-       LASSERTF(ni->ni_lnd == &the_kgnilnd,
+       LASSERTF(ni->ni_net->net_lnd == &the_kgnilnd,
                "bad LND 0x%p != the_kgnilnd @ 0x%p\n",
-               ni->ni_lnd, &the_kgnilnd);
+               ni->ni_net->net_lnd, &the_kgnilnd);
 
        if (kgnilnd_data.kgn_init == GNILND_INIT_NOTHING) {
                rc = kgnilnd_base_startup();
@@ -2712,8 +2706,12 @@ kgnilnd_startup(lnet_ni_t *ni)
        INIT_LIST_HEAD(&net->gnn_list);
        ni->ni_data = net;
        net->gnn_ni = ni;
-       ni->ni_maxtxcredits = *kgnilnd_tunables.kgn_credits;
-       ni->ni_peertxcredits = *kgnilnd_tunables.kgn_peer_credits;
+       if (!ni->ni_net->net_tunables_set) {
+               ni->ni_net->net_tunables.lct_max_tx_credits =
+                       *kgnilnd_tunables.kgn_credits;
+               ni->ni_net->net_tunables.lct_peer_tx_credits =
+                       *kgnilnd_tunables.kgn_peer_credits;
+       }
 
        if (*kgnilnd_tunables.kgn_peer_health) {
                int     fudge;
@@ -2723,9 +2721,10 @@ kgnilnd_startup(lnet_ni_t *ni)
                fudge = (GNILND_TO2KA(*kgnilnd_tunables.kgn_timeout) / GNILND_REAPER_NCHECKS);
                timeout = *kgnilnd_tunables.kgn_timeout + fudge;
 
-               if (*kgnilnd_tunables.kgn_peer_timeout >= timeout)
-                       ni->ni_peertimeout = *kgnilnd_tunables.kgn_peer_timeout;
-               else if (*kgnilnd_tunables.kgn_peer_timeout > -1) {
+               if (*kgnilnd_tunables.kgn_peer_timeout >= timeout) {
+                       ni->ni_net->net_tunables.lct_peer_timeout =
+                                *kgnilnd_tunables.kgn_peer_timeout;
+               } else if (*kgnilnd_tunables.kgn_peer_timeout > -1) {
                        LCONSOLE_ERROR("Peer_timeout is set to %d but needs to be >= %d\n",
                                        *kgnilnd_tunables.kgn_peer_timeout,
                                        timeout);
@@ -2733,10 +2732,10 @@ kgnilnd_startup(lnet_ni_t *ni)
                        LIBCFS_FREE(net, sizeof(*net));
                        GOTO(failed, rc = -EINVAL);
                } else
-                       ni->ni_peertimeout = timeout;
+                       ni->ni_net->net_tunables.lct_peer_timeout = timeout;
 
                LCONSOLE_INFO("Enabling LNet peer health for gnilnd, timeout %ds\n",
-                             ni->ni_peertimeout);
+                             ni->ni_net->net_tunables.lct_peer_timeout);
        }
 
        atomic_set(&net->gnn_refcount, 1);