]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
RDS: make rds_conn_drop() take reason argument
authorSantosh Shilimkar <santosh.shilimkar@oracle.com>
Fri, 5 Aug 2016 21:22:53 +0000 (14:22 -0700)
committerSantosh Shilimkar <santosh.shilimkar@oracle.com>
Wed, 12 Oct 2016 17:20:24 +0000 (10:20 -0700)
This removes the need of modifying the conn all over the place
and moves it inside rds_conn_drop(). Actually there is almost
no need to carry the 'c_drop_source' information as part of
rds_connection but since shutdown thread wants to log this
info for debug,  the field is left as is for now.

Orabug: 22347191

Tested-by: Michael Nowak <michael.nowak@oracle.com>
Tested-by: Rafael Alejandro Peralez <rafael.peralez@oracle.com>
Tested-by: Liwen Huang <liwen.huang@oracle.com>
Tested-by: Hong Liu <hong.x.liu@oracle.com>
Reviewed-by: Mukesh Kacker <mukesh.kacker@oracle.com>
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
13 files changed:
net/rds/af_rds.c
net/rds/connection.c
net/rds/ib.c
net/rds/ib.h
net/rds/ib_cm.c
net/rds/ib_recv.c
net/rds/ib_send.c
net/rds/rdma_transport.c
net/rds/rds.h
net/rds/tcp.c
net/rds/tcp_connect.c
net/rds/tcp_send.c
net/rds/threads.c

index 2cf03b2c16fc58d2ecffd7965353a3c36cb87f49..7843f0a0a4bd2c8a1cd3aba1d3b44f0c6528ed05 100644 (file)
@@ -348,7 +348,7 @@ static int rds_user_reset(struct rds_sock *rs, char __user *optval, int optlen)
                list_for_each_entry(conn, &s_addr_conns, c_laddr_node)
                        if (conn) {
                                conn->c_drop_source = 1;
-                               rds_conn_drop(conn);
+                               rds_conn_drop(conn, DR_USER_RESET);
                        }
                goto done;
        }
@@ -362,8 +362,7 @@ static int rds_user_reset(struct rds_sock *rs, char __user *optval, int optlen)
                                "<%u.%u.%u.%u,%u.%u.%u.%u,%d>\n",
                                NIPQUAD(reset.src.s_addr),
                                NIPQUAD(reset.dst.s_addr), conn->c_tos);
-               conn->c_drop_source = DR_USER_RESET;
-               rds_conn_drop(conn);
+               rds_conn_drop(conn, DR_USER_RESET);
        }
 done:
        return 0;
index f2b02bacba0af789d79a844f163f4749fb0d76b3..7053cbfe07bdb6205690a95592712fa835538861 100644 (file)
@@ -340,9 +340,9 @@ void rds_conn_shutdown(struct rds_connection *conn, int restart)
                mutex_lock(&conn->c_cm_lock);
                if (!rds_conn_transition(conn, RDS_CONN_UP, RDS_CONN_DISCONNECTING)
                 && !rds_conn_transition(conn, RDS_CONN_ERROR, RDS_CONN_DISCONNECTING)) {
-                       conn->c_drop_source = DR_INV_CONN_STATE;
-                       rds_conn_error(conn, "shutdown called in state %d\n",
-                                       atomic_read(&conn->c_state));
+                       pr_warn("RDS: shutdown called in state %d\n",
+                               atomic_read(&conn->c_state));
+                       rds_conn_drop(conn, DR_INV_CONN_STATE);
                        mutex_unlock(&conn->c_cm_lock);
                        return;
                }
@@ -362,12 +362,9 @@ void rds_conn_shutdown(struct rds_connection *conn, int restart)
                         * Quite reproduceable with loopback connections.
                         * Mostly harmless.
                         */
-                       conn->c_drop_source = DR_DOWN_TRANSITION_FAIL;
-                       rds_conn_error(conn,
-                               "%s: failed to transition to state DOWN, "
-                               "current state is %d\n",
-                               __func__,
-                               atomic_read(&conn->c_state));
+                       pr_warn("RDS: %s: failed to transition to state DOWN, current state is %d\n",
+                               __func__, atomic_read(&conn->c_state));
+                       rds_conn_drop(conn, DR_DOWN_TRANSITION_FAIL);
                        return;
                }
        }
@@ -421,8 +418,7 @@ void rds_conn_destroy(struct rds_connection *conn, int shutdown)
        synchronize_rcu();
 
        /* shut the connection down */
-       conn->c_drop_source = DR_CONN_DESTROY;
-       rds_conn_drop(conn);
+       rds_conn_drop(conn, DR_CONN_DESTROY);
        flush_work(&conn->c_down_w);
 
        /* now that conn down worker is flushed; there cannot be any
@@ -725,13 +721,12 @@ static void rds_conn_probe_lanes(struct rds_connection *conn)
                        else if (rds_conn_connecting(tmp) && (tmp->c_route_resolved == 0)) {
                                printk(KERN_INFO "RDS/IB: connection "
                                       "<%u.%u.%u.%u,%u.%u.%u.%u,%d> "
-                                      "connecting, force reset ",
+                                      "connecting, force reset\n",
                                       NIPQUAD(tmp->c_laddr),
                                       NIPQUAD(tmp->c_faddr),
                                       tmp->c_tos);
 
-                               conn->c_drop_source = DR_ZERO_LANE_DOWN;
-                               rds_conn_drop(tmp);
+                               rds_conn_drop(tmp, DR_ZERO_LANE_DOWN);
                        }
                }
        }
@@ -741,10 +736,11 @@ static void rds_conn_probe_lanes(struct rds_connection *conn)
 /*
  * Force a disconnect
  */
-void rds_conn_drop(struct rds_connection *conn)
+void rds_conn_drop(struct rds_connection *conn, int reason)
 {
        unsigned long now = get_seconds();
 
+       conn->c_drop_source = reason;
        if (rds_conn_state(conn) == RDS_CONN_UP) {
                conn->c_reconnect_start = now;
                conn->c_reconnect_warn = 1;
@@ -756,7 +752,7 @@ void rds_conn_drop(struct rds_connection *conn)
                        NIPQUAD(conn->c_laddr),
                        NIPQUAD(conn->c_faddr),
                        conn->c_tos,
-                       conn_drop_reason_str(conn->c_drop_source));
+                       conn_drop_reason_str(reason));
 
                if (conn->c_tos == 0)
                        rds_conn_probe_lanes(conn);
@@ -812,18 +808,3 @@ void rds_conn_connect_if_down(struct rds_connection *conn)
        }
 }
 EXPORT_SYMBOL_GPL(rds_conn_connect_if_down);
-
-/*
- * An error occurred on the connection
- */
-void
-__rds_conn_error(struct rds_connection *conn, const char *fmt, ...)
-{
-       va_list ap;
-
-       va_start(ap, fmt);
-       vprintk(fmt, ap);
-       va_end(ap);
-
-       rds_conn_drop(conn);
-}
index bf3adf93138e07c13e1fffe213638d50e66e3e1e..a5890fbf1c97fcb5554bd3b1f883c33a68fca3e1 100644 (file)
@@ -169,8 +169,7 @@ void rds_ib_dev_shutdown(struct rds_ib_device *rds_ibdev)
 
        spin_lock_irqsave(&rds_ibdev->spinlock, flags);
        list_for_each_entry(ic, &rds_ibdev->conn_list, ib_node) {
-               ic->conn->c_drop_source = DR_IB_UMMOD;
-               rds_conn_drop(ic->conn);
+               rds_conn_drop(ic->conn, DR_IB_UMMOD);
        }
        spin_unlock_irqrestore(&rds_ibdev->spinlock, flags);
 }
index fc71b8acda07819d64748cb61885645406cbb174..e5d84fba0c3ac9e04ddf112de0601eaa872ca968 100644 (file)
@@ -561,7 +561,6 @@ void rds_ib_conn_shutdown(struct rds_connection *conn);
 void rds_ib_state_change(struct sock *sk);
 int rds_ib_listen_init(void);
 void rds_ib_listen_stop(void);
-void __rds_ib_conn_error(struct rds_connection *conn, const char *, ...);
 int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id,
                             struct rdma_cm_event *event);
 int rds_ib_cm_initiate_connect(struct rdma_cm_id *cm_id);
@@ -570,9 +569,6 @@ void rds_ib_cm_connect_complete(struct rds_connection *conn,
 void rds_ib_init_frag(unsigned int version);
 void rds_ib_conn_destroy_init(struct rds_connection *conn);
 
-#define rds_ib_conn_error(conn, fmt...) \
-       __rds_ib_conn_error(conn, KERN_WARNING "RDS/IB: " fmt)
-
 /* ib_rdma.c */
 int rds_ib_update_ipaddr(struct rds_ib_device *rds_ibdev, __be32 ipaddr);
 void rds_ib_add_conn(struct rds_ib_device *rds_ibdev, struct rds_connection *conn);
index caa69911d7f2d43f647f0176fbdbf16634525e66..58d9e49eb4997b287ab9816d1a9b5907291e4980 100644 (file)
@@ -294,8 +294,7 @@ void rds_ib_cm_connect_complete(struct rds_connection *conn, struct rdma_cm_even
                rds_rtd(RDS_RTD_CM,
                        "ic->i_cm_id is NULL, ic: %p, calling rds_conn_drop\n",
                        ic);
-               conn->c_drop_source = DR_IB_CONN_DROP_RACE;
-               rds_conn_drop(conn);
+               rds_conn_drop(conn, DR_IB_CONN_DROP_RACE);
                return;
        }
 
@@ -305,8 +304,7 @@ void rds_ib_cm_connect_complete(struct rds_connection *conn, struct rdma_cm_even
                rds_rtd(RDS_RTD_CM,
                        "conn is in connecting state, conn: %p, calling rds_conn_drop\n",
                        conn);
-               conn->c_drop_source = DR_IB_NOT_CONNECTING_STATE;
-               rds_conn_drop(conn);
+               rds_conn_drop(conn, DR_IB_NOT_CONNECTING_STATE);
                return;
        }
 
@@ -579,8 +577,7 @@ static void rds_ib_qp_event_handler(struct ib_event *event, void *data)
                        "Fatal QP Event %u (%s) - connection %pI4->%pI4 tos %d, reconnecting\n",
                        event->event, rds_ib_event_str(event->event),
                        &conn->c_laddr, &conn->c_faddr, conn->c_tos);
-               conn->c_drop_source = DR_IB_QP_EVENT;
-               rds_conn_drop(conn);
+               rds_conn_drop(conn, DR_IB_QP_EVENT);
                break;
        }
 }
@@ -893,8 +890,7 @@ int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id,
                                NIPQUAD(conn->c_laddr),
                                NIPQUAD(conn->c_faddr),
                                conn->c_tos);
-               conn->c_drop_source = DR_IB_BASE_CONN_DOWN;
-               rds_conn_drop(conn);
+               rds_conn_drop(conn, DR_IB_BASE_CONN_DOWN);
        }
 
        /*
@@ -916,8 +912,7 @@ int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id,
                if (rds_conn_state(conn) == RDS_CONN_UP) {
                        rds_rtd(RDS_RTD_CM_EXT_P,
                                "incoming connect while connecting\n");
-                       conn->c_drop_source = DR_IB_REQ_WHILE_CONN_UP;
-                       rds_conn_drop(conn);
+                       rds_conn_drop(conn, DR_IB_REQ_WHILE_CONN_UP);
                        rds_ib_stats_inc(s_ib_listen_closed_stale);
                } else if (rds_conn_state(conn) == RDS_CONN_CONNECTING) {
                        unsigned long now = get_seconds();
@@ -938,8 +933,7 @@ int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id,
                                        NIPQUAD(conn->c_laddr),
                                        NIPQUAD(conn->c_faddr),
                                        conn->c_tos);
-                               conn->c_drop_source = DR_IB_REQ_WHILE_CONNECTING;
-                               rds_conn_drop(conn);
+                               rds_conn_drop(conn, DR_IB_REQ_WHILE_CONNECTING);
                                rds_ib_stats_inc(s_ib_listen_closed_stale);
                        } else {
                                /* Wait and see - our connect may still be succeeding */
@@ -982,8 +976,8 @@ int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id,
 
        err = rds_ib_setup_qp(conn);
        if (err) {
-               conn->c_drop_source = DR_IB_PAS_SETUP_QP_FAIL;
-               rds_ib_conn_error(conn, "rds_ib_setup_qp failed (%d)\n", err);
+               pr_warn("RDS/IB: rds_ib_setup_qp failed (%d)\n", err);
+               rds_conn_drop(conn, DR_IB_PAS_SETUP_QP_FAIL);
                goto out;
        }
 
@@ -995,8 +989,8 @@ int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id,
        /* rdma_accept() calls rdma_reject() internally if it fails */
        err = rdma_accept(cm_id, &conn_param);
        if (err) {
-               conn->c_drop_source = DR_IB_RDMA_ACCEPT_FAIL;
-               rds_ib_conn_error(conn, "rdma_accept failed (%d)\n", err);
+               pr_warn("RDS/IB: rdma_accept failed (%d)\n", err);
+               rds_conn_drop(conn, DR_IB_RDMA_ACCEPT_FAIL);
        }
 
 out:
@@ -1068,8 +1062,8 @@ int rds_ib_cm_initiate_connect(struct rdma_cm_id *cm_id)
 
        ret = rds_ib_setup_qp(conn);
        if (ret) {
-               conn->c_drop_source = DR_IB_ACT_SETUP_QP_FAIL;
-               rds_ib_conn_error(conn, "rds_ib_setup_qp failed (%d)\n", ret);
+               pr_warn("RDS/IB: rds_ib_setup_qp failed (%d)\n", ret);
+               rds_conn_drop(conn, DR_IB_ACT_SETUP_QP_FAIL);
                goto out;
        }
 
@@ -1078,8 +1072,8 @@ int rds_ib_cm_initiate_connect(struct rdma_cm_id *cm_id)
                                ib_init_frag_size);
        ret = rdma_connect(cm_id, &conn_param);
        if (ret) {
-               conn->c_drop_source = DR_IB_RDMA_CONNECT_FAIL;
-               rds_ib_conn_error(conn, "rdma_connect failed (%d)\n", ret);
+               pr_warn("RDS/IB: rdma_connect failed (%d)\n", ret);
+               rds_conn_drop(conn, DR_IB_RDMA_CONNECT_FAIL);
        }
 
 out:
@@ -1370,19 +1364,3 @@ void rds_ib_conn_free(void *arg)
 
        kfree(ic);
 }
-
-
-/*
- * An error occurred on the connection
- */
-void
-__rds_ib_conn_error(struct rds_connection *conn, const char *fmt, ...)
-{
-       va_list ap;
-
-       rds_conn_drop(conn);
-
-       va_start(ap, fmt);
-       vprintk(fmt, ap);
-       va_end(ap);
-}
index 5b2525a09a21d5800d25aa2ffbc561b5f5f33974..15063fadcbfa803952f999eae024e18fd0754383 100644 (file)
@@ -641,11 +641,9 @@ void rds_ib_recv_refill(struct rds_connection *conn, int prefill, gfp_t gfp)
                         recv->r_ibinc, sg_page(&recv->r_frag->f_sg),
                         (long) sg_dma_address(&recv->r_frag->f_sg), ret);
                if (ret) {
-                       conn->c_drop_source = DR_IB_POST_RECV_FAIL;
-                       rds_ib_conn_error(conn, "recv post on "
-                              "%pI4 returned %d, disconnecting and "
-                              "reconnecting\n", &conn->c_faddr,
-                              ret);
+                       rds_conn_drop(conn, DR_IB_POST_RECV_FAIL);
+                       pr_warn("RDS/IB: recv post on %pI4 returned %d, disconnecting and reconnecting\n",
+                               &conn->c_faddr, ret);
                        break;
                }
 
@@ -930,9 +928,7 @@ static void rds_ib_send_ack(struct rds_ib_connection *ic, unsigned int adv_credi
                set_bit(IB_ACK_REQUESTED, &ic->i_ack_flags);
 
                rds_ib_stats_inc(s_ib_ack_send_failure);
-
-               ic->conn->c_drop_source = DR_IB_SEND_ACK_FAIL;
-               rds_ib_conn_error(ic->conn, "sending ack failed\n");
+               rds_conn_drop(ic->conn, DR_IB_SEND_ACK_FAIL);
        } else
                rds_ib_stats_inc(s_ib_ack_sent);
 }
@@ -1109,12 +1105,9 @@ static void rds_ib_process_recv(struct rds_connection *conn,
                 data_len);
 
        if (data_len < sizeof(struct rds_header)) {
-               conn->c_drop_source = DR_IB_HEADER_MISSING;
-               rds_ib_conn_error(conn, "incoming message "
-                      "from %pI4 didn't inclue a "
-                      "header, disconnecting and "
-                      "reconnecting\n",
-                      &conn->c_faddr);
+               rds_conn_drop(conn, DR_IB_HEADER_MISSING);
+               pr_warn("RDS/IB: incoming message from %pI4 didn't inclue a header, disconnecting and reconnecting\n",
+                       &conn->c_faddr);
                return;
        }
        data_len -= sizeof(struct rds_header);
@@ -1123,11 +1116,9 @@ static void rds_ib_process_recv(struct rds_connection *conn,
 
        /* Validate the checksum. */
        if (!rds_message_verify_checksum(ihdr)) {
-               conn->c_drop_source = DR_IB_HEADER_CORRUPTED;
-               rds_ib_conn_error(conn, "incoming message "
-                      "from %pI4 has corrupted header - "
-                      "forcing a reconnect\n",
-                      &conn->c_faddr);
+               rds_conn_drop(conn, DR_IB_HEADER_CORRUPTED);
+               pr_warn("RDS/IB: incoming message from %pI4 has corrupted header - forcing a reconnect\n",
+                       &conn->c_faddr);
                rds_stats_inc(s_recv_drop_bad_checksum);
                return;
        }
@@ -1191,9 +1182,7 @@ static void rds_ib_process_recv(struct rds_connection *conn,
                 || hdr->h_len != ihdr->h_len
                 || hdr->h_sport != ihdr->h_sport
                 || hdr->h_dport != ihdr->h_dport) {
-                       conn->c_drop_source = DR_IB_FRAG_HEADER_MISMATCH;
-                       rds_ib_conn_error(conn,
-                               "fragment header mismatch; forcing reconnect\n");
+                       rds_conn_drop(conn, DR_IB_FRAG_HEADER_MISMATCH);
                        return;
                }
        }
@@ -1352,15 +1341,10 @@ void rds_ib_recv_cqe_handler(struct rds_ib_connection *ic,
        } else {
                /* We expect errors as the qp is drained during shutdown */
                if (rds_conn_up(conn) || rds_conn_connecting(conn)) {
-                       conn->c_drop_source = DR_IB_RECV_COMP_ERR;
-                       rds_ib_conn_error(conn, "recv completion "
-                                       "<%pI4,%pI4,%d> had status %u "
-                                       "vendor_err 0x%x, disconnecting and "
-                                       "reconnecting\n",
-                                       &conn->c_laddr,
-                                       &conn->c_faddr,
-                                       conn->c_tos,
-                                       wc->status, wc->vendor_err);
+                       pr_warn("RDS/IB: recv completion <%pI4,%pI4,%d> had status %u vendor_err 0x%x, disconnecting and reconnecting\n",
+                               &conn->c_laddr, &conn->c_faddr, conn->c_tos,
+                               wc->status, wc->vendor_err);
+                       rds_conn_drop(conn, DR_IB_RECV_COMP_ERR);
                        rds_rtd(RDS_RTD_ERR, "status %u => %s\n", wc->status,
                                rds_ib_wc_status_str(wc->status));
                }
index c4298c50323781060ff238a92ea095e5ec02503f..df8b0f7a4365bdea0821d03aa17bf51d17a4ccc1 100644 (file)
@@ -341,13 +341,10 @@ void rds_ib_send_cqe_handler(struct rds_ib_connection *ic, struct ib_wc *wc)
 
        /* We expect errors as the qp is drained during shutdown */
        if (wc->status != IB_WC_SUCCESS && rds_conn_up(conn)) {
-               conn->c_drop_source = DR_IB_SEND_COMP_ERR;
-               rds_ib_conn_error(conn,
-                       "send completion <%u.%u.%u.%u,%u.%u.%u.%u,%d> status "
-                       "%u vendor_err 0x%x, disconnecting and reconnecting\n",
-                       NIPQUAD(conn->c_laddr),
-                       NIPQUAD(conn->c_faddr),
-                       conn->c_tos, wc->status, wc->vendor_err);
+               pr_warn("RDS/IB: send completion <%pI4,%pI4,%d> status %u vendor_err 0x%x, disconnecting and reconnecting\n",
+                       &conn->c_laddr, &conn->c_faddr, conn->c_tos,
+                       wc->status, wc->vendor_err);
+               rds_conn_drop(conn, DR_IB_SEND_COMP_ERR);
                rds_rtd(RDS_RTD_ERR, "status %u => %s\n", wc->status,
                        rds_ib_wc_status_str(wc->status));
        }
@@ -811,8 +808,7 @@ int rds_ib_xmit(struct rds_connection *conn, struct rds_message *rm,
                        prev->s_op = NULL;
                }
 
-               ic->conn->c_drop_source = DR_IB_POST_SEND_FAIL;
-               rds_ib_conn_error(ic->conn, "ib_post_send failed\n");
+               rds_conn_drop(ic->conn, DR_IB_POST_SEND_FAIL);
                goto out;
        }
 
index eeac3981c58ea6a69d3101075f7fb266588c45c9..13a5dcfc250bbc2e08cc2cb0ee74f7cdf92d26a2 100644 (file)
@@ -151,8 +151,7 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
                                        "ADDR_RESOLVED: ret %d, calling rds_conn_drop <%u.%u.%u.%u,%u.%u.%u.%u,%d>\n",
                                        ret, NIPQUAD(conn->c_laddr),
                                        NIPQUAD(conn->c_faddr), conn->c_tos);
-                               conn->c_drop_source = DR_IB_SET_IB_PATH_FAIL;
-                               rds_conn_drop(conn);
+                               rds_conn_drop(conn, DR_IB_SET_IB_PATH_FAIL);
                                ret = 0;
                        }
 
@@ -176,8 +175,7 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
                                ibic = conn->c_transport_data;
                                if (ibic && ibic->i_cm_id == cm_id)
                                        ibic->i_cm_id = NULL;
-                               conn->c_drop_source = DR_IB_RESOLVE_ROUTE_FAIL;
-                               rds_conn_drop(conn);
+                               rds_conn_drop(conn, DR_IB_RESOLVE_ROUTE_FAIL);
                        }
                } else if (conn->c_to_index < (RDS_RDMA_RESOLVE_TO_MAX_INDEX-1))
                                conn->c_to_index++;
@@ -200,8 +198,7 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
                                        "ROUTE_RESOLVED: calling rds_conn_drop, conn %p <%u.%u.%u.%u,%u.%u.%u.%u,%d>\n",
                                        conn, NIPQUAD(conn->c_laddr),
                                        NIPQUAD(conn->c_faddr), conn->c_tos);
-                               conn->c_drop_source = DR_IB_RDMA_CM_ID_MISMATCH;
-                               rds_conn_drop(conn);
+                               rds_conn_drop(conn, DR_IB_RDMA_CM_ID_MISMATCH);
                        }
                }
                break;
@@ -228,8 +225,7 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
                                "ROUTE_ERROR: conn %p, calling rds_conn_drop <%u.%u.%u.%u,%u.%u.%u.%u,%d>\n",
                                conn, NIPQUAD(conn->c_laddr),
                                NIPQUAD(conn->c_faddr), conn->c_tos);
-                       conn->c_drop_source = DR_IB_ROUTE_ERR;
-                       rds_conn_drop(conn);
+                       rds_conn_drop(conn, DR_IB_ROUTE_ERR);
                }
                break;
 
@@ -243,8 +239,7 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
                                "ADDR_ERROR: conn %p, calling rds_conn_drop <%u.%u.%u.%u,%u.%u.%u.%u,%d>\n",
                                conn, NIPQUAD(conn->c_laddr),
                                NIPQUAD(conn->c_faddr), conn->c_tos);
-                       conn->c_drop_source = DR_IB_ADDR_ERR;
-                       rds_conn_drop(conn);
+                       rds_conn_drop(conn, DR_IB_ADDR_ERR);
                }
                break;
 
@@ -256,8 +251,7 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
                                "CONN/UNREACHABLE/RMVAL ERR: conn %p, calling rds_conn_drop <%u.%u.%u.%u,%u.%u.%u.%u,%d>\n",
                                conn, NIPQUAD(conn->c_laddr),
                                NIPQUAD(conn->c_faddr), conn->c_tos);
-                       conn->c_drop_source = DR_IB_CONNECT_ERR;
-                       rds_conn_drop(conn);
+                       rds_conn_drop(conn, DR_IB_CONNECT_ERR);
                }
                break;
 
@@ -278,8 +272,8 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
                                if (!conn->c_tos) {
                                        conn->c_proposed_version =
                                                RDS_PROTOCOL_COMPAT_VERSION;
-                                       conn->c_drop_source = DR_IB_CONSUMER_DEFINED_REJ;
-                                       rds_conn_drop(conn);
+                                       rds_conn_drop(conn,
+                                               DR_IB_CONSUMER_DEFINED_REJ);
                                } else  {
                                        if (conn->c_loopback)
                                                queue_delayed_work(rds_local_wq,
@@ -305,8 +299,7 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
                                        NIPQUAD(conn->c_laddr),
                                        NIPQUAD(conn->c_faddr),
                                        conn->c_tos);
-                               conn->c_drop_source = DR_IB_REJECTED_EVENT;
-                               rds_conn_drop(conn);
+                               rds_conn_drop(conn, DR_IB_REJECTED_EVENT);
                        }
                }
                break;
@@ -321,8 +314,7 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
                                "ADDR_CHANGE: calling rds_conn_drop <%u.%u.%u.%u,%u.%u.%u.%u,%d>\n",
                                NIPQUAD(conn->c_laddr), NIPQUAD(conn->c_faddr),
                                conn->c_tos);
-                       conn->c_drop_source = DR_IB_ADDR_CHANGE;
-                       rds_conn_drop(conn);
+                       rds_conn_drop(conn, DR_IB_ADDR_CHANGE);
                }
                break;
 
@@ -330,8 +322,7 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
                rds_rtd(RDS_RTD_CM,
                        "DISCONNECT event - dropping connection %pI4->%pI4 tos %d\n",
                        &conn->c_laddr, &conn->c_faddr, conn->c_tos);
-               conn->c_drop_source = DR_IB_DISCONNECTED_EVENT;
-               rds_conn_drop(conn);
+               rds_conn_drop(conn, DR_IB_DISCONNECTED_EVENT);
                break;
 
        case RDMA_CM_EVENT_TIMEWAIT_EXIT:
@@ -340,8 +331,7 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
                                "dropping connection "
                                "%pI4->%pI4\n", &conn->c_laddr,
                                 &conn->c_faddr);
-                       conn->c_drop_source = DR_IB_TIMEWAIT_EXIT;
-                       rds_conn_drop(conn);
+                       rds_conn_drop(conn, DR_IB_TIMEWAIT_EXIT);
                } else
                        printk(KERN_INFO "TIMEWAIT_EXIT event - conn=NULL\n");
                break;
index d3ea4292f4dd98b2ba3ae5131221a7cb3f8454f4..fda614f055496887037313a37044a9af17043cd2 100644 (file)
@@ -852,7 +852,7 @@ struct rds_connection *rds_conn_find(struct net *net, __be32 laddr,
 void rds_conn_shutdown(struct rds_connection *conn, int restart);
 void rds_conn_destroy(struct rds_connection *conn, int shutdown);
 void rds_conn_reset(struct rds_connection *conn);
-void rds_conn_drop(struct rds_connection *conn);
+void rds_conn_drop(struct rds_connection *conn, int reason);
 void rds_conn_laddr_list(__be32 laddr, struct list_head *laddr_conns);
 void rds_conn_connect_if_down(struct rds_connection *conn);
 void rds_for_each_conn_info(struct socket *sock, unsigned int len,
@@ -861,10 +861,6 @@ void rds_for_each_conn_info(struct socket *sock, unsigned int len,
                          int (*visitor)(struct rds_connection *, void *),
                          size_t item_len);
 char *conn_drop_reason_str(enum rds_conn_drop_src reason);
-void __rds_conn_error(struct rds_connection *conn, const char *, ...)
-                               __attribute__ ((format (printf, 2, 3)));
-#define rds_conn_error(conn, fmt...) \
-       __rds_conn_error(conn, KERN_WARNING "RDS: " fmt)
 
 static inline int
 rds_conn_transition(struct rds_connection *conn, int old, int new)
index dff1c177e5bf81628513188de37bf806d23ad338..abd6cb91db3f86d580686a321b0788c6b8571d54 100644 (file)
@@ -556,7 +556,8 @@ static void rds_tcp_sysctl_reset(struct net *net)
                if (net != c_net || !tc->t_sock)
                        continue;
 
-               rds_conn_drop(tc->conn); /* reconnect with new parameters */
+               /* reconnect with new parameters */
+               rds_conn_drop(tc->conn, DR_USER_RESET);
        }
        spin_unlock_irq(&rds_tcp_conn_lock);
 }
index 41a83d90f0e1c4168cac4d3306f1c5e4ffec552f..ebffa5b91affb89479223b9c10803f4224ef3e59 100644 (file)
@@ -64,8 +64,7 @@ void rds_tcp_state_change(struct sock *sk)
                        break;
                case TCP_CLOSE_WAIT:
                case TCP_CLOSE:
-                       conn->c_drop_source = DR_TCP_STATE_CLOSE;
-                       rds_conn_drop(conn);
+                       rds_conn_drop(conn, DR_TCP_STATE_CLOSE);
                default:
                        break;
        }
index 7406211a627b8e6da75eac857b9bbbac964de201..edecc4606af69cbf4dd0d8b84fd2fe3980fbb530 100644 (file)
@@ -152,8 +152,7 @@ out:
                        printk(KERN_WARNING "RDS/tcp: send to %u.%u.%u.%u "
                               "returned %d, disconnecting and reconnecting\n",
                               NIPQUAD(conn->c_faddr), ret);
-                       conn->c_drop_source = DR_TCP_SEND_FAIL;
-                       rds_conn_drop(conn);
+                       rds_conn_drop(conn, DR_TCP_SEND_FAIL);
                }
        }
        if (done == 0)
index e934ec8d19ec608b84aa9d701738f3d0f2a7735d..541c0b6e74520988e164fd512b7966b1fd7fba6c 100644 (file)
@@ -201,8 +201,7 @@ void rds_connect_worker(struct work_struct *work)
                                        "reconnecting..., conn %p\n", conn);
                                rds_queue_reconnect(conn);
                        } else {
-                               conn->c_drop_source = DR_CONN_CONNECT_FAIL;
-                               rds_conn_error(conn, "RDS: connect failed\n");
+                               rds_conn_drop(conn, DR_CONN_CONNECT_FAIL);
                        }
                }
        } else {
@@ -292,8 +291,7 @@ void rds_hb_worker(struct work_struct *work)
                                "RDS/IB: connection <%u.%u.%u.%u,%u.%u.%u.%u,%d> timed out (0x%lx,0x%lx)..discon and recon\n",
                                NIPQUAD(conn->c_laddr), NIPQUAD(conn->c_faddr),
                                conn->c_tos, conn->c_hb_start, now);
-                       conn->c_drop_source = DR_HB_TIMEOUT;
-                       rds_conn_drop(conn);
+                       rds_conn_drop(conn, DR_HB_TIMEOUT);
                        return;
                }
                queue_delayed_work(rds_wq, &conn->c_hb_w, HZ);
@@ -313,8 +311,7 @@ void rds_reconnect_timeout(struct work_struct *work)
                        "conn not up, calling rds_conn_drop <%u.%u.%u.%u,%u.%u.%u.%u,%d>\n",
                        NIPQUAD(conn->c_laddr), NIPQUAD(conn->c_faddr),
                        conn->c_tos);
-               conn->c_drop_source = DR_RECONNECT_TIMEOUT;
-               rds_conn_drop(conn);
+               rds_conn_drop(conn, DR_RECONNECT_TIMEOUT);
                conn->c_reconnect_racing = 0;
        }
 }