wait_event(cp->cp_waitq,
                           !test_bit(RDS_RECV_REFILL, &cp->cp_flags));
 
-               if (!conn->c_trans->t_mp_capable)
-                       conn->c_trans->conn_shutdown(conn);
-               else
-                       conn->c_trans->conn_path_shutdown(cp);
+               conn->c_trans->conn_path_shutdown(cp);
                rds_conn_path_reset(cp);
 
                if (!rds_conn_path_transition(cp, RDS_CONN_DISCONNECTING,
 
 
 struct rds_transport rds_ib_transport = {
        .laddr_check            = rds_ib_laddr_check,
-       .xmit_complete          = rds_ib_xmit_complete,
+       .xmit_path_complete     = rds_ib_xmit_path_complete,
        .xmit                   = rds_ib_xmit,
        .xmit_rdma              = rds_ib_xmit_rdma,
        .xmit_atomic            = rds_ib_xmit_atomic,
        .conn_alloc             = rds_ib_conn_alloc,
        .conn_free              = rds_ib_conn_free,
        .conn_connect           = rds_ib_conn_connect,
-       .conn_shutdown          = rds_ib_conn_shutdown,
+       .conn_path_shutdown     = rds_ib_conn_path_shutdown,
        .inc_copy_to_user       = rds_ib_inc_copy_to_user,
        .inc_free               = rds_ib_inc_free,
        .cm_initiate_connect    = rds_ib_cm_initiate_connect,
 
 int rds_ib_conn_alloc(struct rds_connection *conn, gfp_t gfp);
 void rds_ib_conn_free(void *arg);
 int rds_ib_conn_connect(struct rds_connection *conn);
-void rds_ib_conn_shutdown(struct rds_connection *conn);
+void rds_ib_conn_path_shutdown(struct rds_conn_path *cp);
 void rds_ib_state_change(struct sock *sk);
 int rds_ib_listen_init(void);
 void rds_ib_listen_stop(void);
 extern wait_queue_head_t rds_ib_ring_empty_wait;
 
 /* ib_send.c */
-void rds_ib_xmit_complete(struct rds_connection *conn);
+void rds_ib_xmit_path_complete(struct rds_conn_path *cp);
 int rds_ib_xmit(struct rds_connection *conn, struct rds_message *rm,
                unsigned int hdr_off, unsigned int sg, unsigned int off);
 void rds_ib_send_cqe_handler(struct rds_ib_connection *ic, struct ib_wc *wc);
 
  * so that it can be called at any point during startup.  In fact it
  * can be called multiple times for a given connection.
  */
-void rds_ib_conn_shutdown(struct rds_connection *conn)
+void rds_ib_conn_path_shutdown(struct rds_conn_path *cp)
 {
+       struct rds_connection *conn = cp->cp_conn;
        struct rds_ib_connection *ic = conn->c_transport_data;
        int err = 0;
 
 
        return ret;
 }
 
-void rds_ib_xmit_complete(struct rds_connection *conn)
+void rds_ib_xmit_path_complete(struct rds_conn_path *cp)
 {
+       struct rds_connection *conn = cp->cp_conn;
        struct rds_ib_connection *ic = conn->c_transport_data;
 
        /* We may have a pending ACK or window update we were unable
 
        return 0;
 }
 
-static void rds_loop_conn_shutdown(struct rds_connection *conn)
+static void rds_loop_conn_path_shutdown(struct rds_conn_path *cp)
 {
 }
 
        .conn_alloc             = rds_loop_conn_alloc,
        .conn_free              = rds_loop_conn_free,
        .conn_connect           = rds_loop_conn_connect,
-       .conn_shutdown          = rds_loop_conn_shutdown,
+       .conn_path_shutdown     = rds_loop_conn_path_shutdown,
        .inc_copy_to_user       = rds_message_inc_copy_to_user,
        .inc_free               = rds_loop_inc_free,
        .t_name                 = "loopback",
 
        int (*conn_alloc)(struct rds_connection *conn, gfp_t gfp);
        void (*conn_free)(void *data);
        int (*conn_connect)(struct rds_connection *conn);
-       void (*conn_shutdown)(struct rds_connection *conn);
        void (*conn_path_shutdown)(struct rds_conn_path *conn);
-       void (*xmit_prepare)(struct rds_connection *conn);
        void (*xmit_path_prepare)(struct rds_conn_path *cp);
-       void (*xmit_complete)(struct rds_connection *conn);
        void (*xmit_path_complete)(struct rds_conn_path *cp);
        int (*xmit)(struct rds_connection *conn, struct rds_message *rm,
                    unsigned int hdr_off, unsigned int sg, unsigned int off);
 
                goto out;
        }
 
-       if (conn->c_trans->t_mp_capable) {
-               if (conn->c_trans->xmit_path_prepare)
-                       conn->c_trans->xmit_path_prepare(cp);
-       } else if (conn->c_trans->xmit_prepare) {
-               conn->c_trans->xmit_prepare(conn);
-       }
+       if (conn->c_trans->xmit_path_prepare)
+               conn->c_trans->xmit_path_prepare(cp);
 
        /*
         * spin trying to push headers and data down the connection until
        }
 
 over_batch:
-       if (conn->c_trans->t_mp_capable) {
-               if (conn->c_trans->xmit_path_complete)
-                       conn->c_trans->xmit_path_complete(cp);
-       } else if (conn->c_trans->xmit_complete) {
-               conn->c_trans->xmit_complete(conn);
-       }
+       if (conn->c_trans->xmit_path_complete)
+               conn->c_trans->xmit_path_complete(cp);
        release_in_xmit(cp);
 
        /* Nuke any messages we decided not to retransmit. */
 
 
 struct rds_transport rds_tcp_transport = {
        .laddr_check            = rds_tcp_laddr_check,
-       .xmit_prepare           = rds_tcp_xmit_prepare,
-       .xmit_complete          = rds_tcp_xmit_complete,
+       .xmit_path_prepare      = rds_tcp_xmit_path_prepare,
+       .xmit_path_complete     = rds_tcp_xmit_path_complete,
        .xmit                   = rds_tcp_xmit,
        .recv                   = rds_tcp_recv,
        .conn_alloc             = rds_tcp_conn_alloc,
        .conn_free              = rds_tcp_conn_free,
        .conn_connect           = rds_tcp_conn_connect,
-       .conn_shutdown          = rds_tcp_conn_shutdown,
+       .conn_path_shutdown     = rds_tcp_conn_path_shutdown,
        .inc_copy_to_user       = rds_tcp_inc_copy_to_user,
        .inc_free               = rds_tcp_inc_free,
        .stats_info_copy        = rds_tcp_stats_info_copy,
 
 
 /* tcp_connect.c */
 int rds_tcp_conn_connect(struct rds_connection *conn);
-void rds_tcp_conn_shutdown(struct rds_connection *conn);
+void rds_tcp_conn_path_shutdown(struct rds_conn_path *conn);
 void rds_tcp_state_change(struct sock *sk);
 
 /* tcp_listen.c */
 int rds_tcp_inc_copy_to_user(struct rds_incoming *inc, struct iov_iter *to);
 
 /* tcp_send.c */
-void rds_tcp_xmit_prepare(struct rds_connection *conn);
-void rds_tcp_xmit_complete(struct rds_connection *conn);
+void rds_tcp_xmit_path_prepare(struct rds_conn_path *cp);
+void rds_tcp_xmit_path_complete(struct rds_conn_path *cp);
 int rds_tcp_xmit(struct rds_connection *conn, struct rds_message *rm,
                 unsigned int hdr_off, unsigned int sg, unsigned int off);
 void rds_tcp_write_space(struct sock *sk);
 
  * callbacks to those set by TCP.  Our callbacks won't execute again once we
  * hold the sock lock.
  */
-void rds_tcp_conn_shutdown(struct rds_connection *conn)
+void rds_tcp_conn_path_shutdown(struct rds_conn_path *cp)
 {
-       struct rds_tcp_connection *tc = conn->c_transport_data;
+       struct rds_tcp_connection *tc = cp->cp_transport_data;
        struct socket *sock = tc->t_sock;
 
-       rdsdebug("shutting down conn %p tc %p sock %p\n", conn, tc, sock);
+       rdsdebug("shutting down conn %p tc %p sock %p\n",
+                cp->cp_conn, tc, sock);
 
        if (sock) {
                sock->ops->shutdown(sock, RCV_SHUTDOWN | SEND_SHUTDOWN);
 
        set_fs(oldfs);
 }
 
-void rds_tcp_xmit_prepare(struct rds_connection *conn)
+void rds_tcp_xmit_path_prepare(struct rds_conn_path *cp)
 {
-       struct rds_tcp_connection *tc = conn->c_transport_data;
+       struct rds_tcp_connection *tc = cp->cp_transport_data;
 
        rds_tcp_cork(tc->t_sock, 1);
 }
 
-void rds_tcp_xmit_complete(struct rds_connection *conn)
+void rds_tcp_xmit_path_complete(struct rds_conn_path *cp)
 {
-       struct rds_tcp_connection *tc = conn->c_transport_data;
+       struct rds_tcp_connection *tc = cp->cp_transport_data;
 
        rds_tcp_cork(tc->t_sock, 0);
 }