]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
RDS: Change number based conn-drop reasons to enum
authorAvinash Repaka <avinash.repaka@oracle.com>
Tue, 17 May 2016 21:42:19 +0000 (14:42 -0700)
committerChuck Anderson <chuck.anderson@oracle.com>
Wed, 25 May 2016 03:52:54 +0000 (20:52 -0700)
This patch converts the number based connection-drop reasons to enums,
making it easy to grep the reasons and to develop new patches based on
these reasons.

Orabug: 23294707

Signed-off-by: Avinash Repaka <avinash.repaka@oracle.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
14 files changed:
net/rds/af_rds.c
net/rds/connection.c
net/rds/ib.c
net/rds/ib_cm.c
net/rds/ib_recv.c
net/rds/ib_send.c
net/rds/iw_cm.c
net/rds/iw_recv.c
net/rds/iw_send.c
net/rds/rdma_transport.c
net/rds/rds.h
net/rds/tcp_connect.c
net/rds/tcp_send.c
net/rds/threads.c

index 0adf3af3d01d0633f00b19dd90aee0da652524fd..f3948435c1b91208fd1e5123613646876b4b241f 100644 (file)
@@ -344,7 +344,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 = 1;
+               conn->c_drop_source = DR_USER_RESET;
                rds_conn_drop(conn);
        }
 
index e9eecf497ee636d60b7ac93bd321e332d4016123..0b7d1e2ee587617b7fa960fc6e9c78509db2e6a3 100644 (file)
@@ -322,7 +322,7 @@ 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 = 2;
+                       conn->c_drop_source = DR_INV_CONN_STATE;
                        rds_conn_error(conn, "shutdown called in state %d\n",
                                        atomic_read(&conn->c_state));
                        mutex_unlock(&conn->c_cm_lock);
@@ -344,7 +344,7 @@ void rds_conn_shutdown(struct rds_connection *conn, int restart)
                         * Quite reproduceable with loopback connections.
                         * Mostly harmless.
                         */
-                       conn->c_drop_source = 3;
+                       conn->c_drop_source = DR_DOWN_TRANSITION_FAIL;
                        rds_conn_error(conn,
                                "%s: failed to transition to state DOWN, "
                                "current state is %d\n",
@@ -400,7 +400,7 @@ void rds_conn_destroy(struct rds_connection *conn)
        synchronize_rcu();
 
        /* shut the connection down */
-       conn->c_drop_source = 4;
+       conn->c_drop_source = DR_CONN_DESTROY;
        rds_conn_drop(conn);
        flush_work(&conn->c_down_w);
 
@@ -613,92 +613,70 @@ void rds_conn_exit(void)
                                 rds_conn_message_info_retrans);
 }
 
-char *conn_drop_reason_str(u8 reason)
+static char *conn_drop_reasons[] = {
+       [DR_DEFAULT]                    = "unknown reason (default_state)",
+       [DR_USER_RESET]                 = "user reset",
+       [DR_INV_CONN_STATE]             = "invalid connection state",
+       [DR_DOWN_TRANSITION_FAIL]       = "failure to move to DOWN state",
+       [DR_CONN_DESTROY]               = "connection destroy",
+       [DR_ZERO_LANE_DOWN]             = "zero lane went down",
+       [DR_CONN_CONNECT_FAIL]          = "conn_connect failure",
+       [DR_HB_TIMEOUT]                 = "hb timeout",
+       [DR_RECONNECT_TIMEOUT]          = "reconnect timeout",
+       [DR_IB_CONN_DROP_RACE]          = "race between ESTABLISHED event and drop",
+       [DR_IB_NOT_CONNECTING_STATE]    = "conn is not in CONNECTING state",
+       [DR_IB_QP_EVENT]                = "qp event",
+       [DR_IB_BASE_CONN_DOWN]          = "base conn down",
+       [DR_IB_REQ_WHILE_CONN_UP]       = "incoming REQ in CONN_UP state",
+       [DR_IB_REQ_WHILE_CONNECTING]    = "incoming REQ in CONNECTING state",
+       [DR_IB_PAS_SETUP_QP_FAIL]       = "passive setup_qp failure",
+       [DR_IB_RDMA_ACCEPT_FAIL]        = "rdma_accept failure",
+       [DR_IB_ACT_SETUP_QP_FAIL]       = "active setup_qp failure",
+       [DR_IB_RDMA_CONNECT_FAIL]       = "rdma_connect failure",
+       [DR_IB_SET_IB_PATH_FAIL]        = "rdma_set_ib_paths failure",
+       [DR_IB_RESOLVE_ROUTE_FAIL]      = "resolve_route failure",
+       [DR_IB_RDMA_CM_ID_MISMATCH]     = "detected rdma_cm_id mismatch",
+       [DR_IB_ROUTE_ERR]               = "ROUTE_ERROR event",
+       [DR_IB_ADDR_ERR]                = "ADDR_ERROR event",
+       [DR_IB_CONNECT_ERR]             = "CONNECT_ERROR or UNREACHABLE or DEVICE_REMOVE event",
+       [DR_IB_CONSUMER_DEFINED_REJ]    = "CONSUMER_DEFINED reject",
+       [DR_IB_REJECTED_EVENT]          = "REJECTED event",
+       [DR_IB_ADDR_CHANGE]             = "ADDR_CHANGE event",
+       [DR_IB_DISCONNECTED_EVENT]      = "DISCONNECTED event",
+       [DR_IB_TIMEWAIT_EXIT]           = "TIMEWAIT_EXIT event",
+       [DR_IB_POST_RECV_FAIL]          = "post_recv failure",
+       [DR_IB_SEND_ACK_FAIL]           = "send_ack failure",
+       [DR_IB_HEADER_MISSING]          = "no header in incoming msg",
+       [DR_IB_HEADER_CORRUPTED]        = "corrupted header in incoming msg",
+       [DR_IB_FRAG_HEADER_MISMATCH]    = "fragment header mismatch",
+       [DR_IB_RECV_COMP_ERR]           = "recv completion error",
+       [DR_IB_SEND_COMP_ERR]           = "send completion error",
+       [DR_IB_POST_SEND_FAIL]          = "post_send failure",
+       [DR_IB_UMMOD]                   = "rds_rdma module unload",
+       [DR_IB_ACTIVE_BOND_FAILOVER]    = "active bonding failover",
+       [DR_IB_LOOPBACK_CONN_DROP]      = "corresponding loopback conn drop",
+       [DR_IB_ACTIVE_BOND_FAILBACK]    = "active bonding failback",
+       [DR_IW_QP_EVENT]                = "qp_event",
+       [DR_IW_REQ_WHILE_CONNECTING]    = "incoming REQ in connecting state",
+       [DR_IW_PAS_SETUP_QP_FAIL]       = "passive setup_qp failure",
+       [DR_IW_RDMA_ACCEPT_FAIL]        = "rdma_accept failure",
+       [DR_IW_ACT_SETUP_QP_FAIL]       = "active setup_qp failure",
+       [DR_IW_RDMA_CONNECT_FAIL]       = "rdma_connect failure",
+       [DR_IW_POST_RECV_FAIL]          = "post_recv failure",
+       [DR_IW_SEND_ACK_FAIL]           = "send_ack failure",
+       [DR_IW_HEADER_MISSING]          = "no header in incoming msg",
+       [DR_IW_HEADER_CORRUPTED]        = "corrupted header in incoming msg",
+       [DR_IW_FRAG_HEADER_MISMATCH]    = "fragment header mismatch",
+       [DR_IW_RECV_COMP_ERR]           = "recv completion error",
+       [DR_IW_SEND_COMP_ERR]           = "send completion error",
+       [DR_TCP_STATE_CLOSE]            = "sk_state to TCP_CLOSE",
+       [DR_TCP_SEND_FAIL]              = "tcp_send failure",
+};
+
+char *conn_drop_reason_str(enum rds_conn_drop_src reason)
 {
-       /* Here is distribution of drop reason:
-        *
-        * 0-19: rds-core
-        *
-        * 20-119: IB
-        * 20-39: ib_cm
-        * 40-59: event handling
-        * 60-79: data path
-        * 80-119: special features like active bonding
-        *
-        * 120-139: iWARP
-        *
-        * 140-159: TCP
-        *
-        * 160-255: any other future additions
-        *
-        */
-       switch (reason) {
-       case 1: return "user reset";
-       case 2: return "invalid connection state";
-       case 3: return "failure to move to DOWN state";
-       case 4: return "connection destroy";
-       case 5: return "zero lane went down";
-       case 6: return "conn_connect failure";
-       case 7: return "hb timeout";
-       case 8: return "reconnect timeout";
-
-       case 20: return "race between ESTABLISHED event and drop";
-       case 21: return "conn is not in CONNECTING state";
-       case 22: return "qp event";
-       case 23: return "base conn down";
-       case 24: return "incoming REQ in CONN_UP state";
-       case 25: return "incoming REQ in CONNECTING state";
-       case 26: return "setup_qp failure";
-       case 27: return "rdma_accept failure";
-       case 28: return "setup_qp failure";
-       case 29: return "rdma_connect failure";
-
-       case 40: return "rdma_set_ib_paths failure";
-       case 41: return "resolve_route failure";
-       case 42: return "detected rdma_cm_id mismatch";
-       case 43: return "ROUTE_ERROR event";
-       case 44: return "ADDR_ERROR event";
-       case 45: return "CONNECT_ERROR or UNREACHABLE or DEVICE_REMOVE event";
-       case 46: return "CONSUMER_DEFINED reject";
-       case 47: return "REJECTED event";
-       case 48: return "ADDR_CHANGE event";
-       case 49: return "DISCONNECTED event";
-       case 50: return "TIMEWAIT_EXIT event";
-
-       case 60: return "post_recv failure";
-       case 61: return "send_ack failure";
-       case 62: return "no header in incoming msg";
-       case 63: return "corrupted header in incoming msg";
-       case 64: return "fragment header mismatch";
-       case 65: return "recv completion error";
-       case 66: return "send completion error";
-       case 67: return "post_send failure";
-
-       case 80: return "rds_rdma module unload";
-       case 81: return "active bonding failover";
-       case 82: return "corresponding loopback conn drop";
-       case 83: return "active bonding failback";
-
-       case 120: return "qp_event";
-       case 121: return "incoming REQ in connecting state";
-       case 122: return "setup_qp failure";
-       case 123: return "rdma_accept failure";
-       case 124: return "setup_qp failure";
-       case 125: return "rdma_connect failure";
-
-       case 130: return "post_recv failure";
-       case 131: return "send_ack failure";
-       case 132: return "no header in incoming msg";
-       case 133: return "corrupted header in incoming msg";
-       case 134: return "fragment header mismatch";
-       case 135: return "recv completion error";
-       case 136: return "send completion error";
-
-       case 140: return "sk_state to TCP_CLOSE";
-       case 141: return "tcp_send failure";
-
-       default: return "unknown reason";
-       }
+       return rds_str_array(conn_drop_reasons,
+                            ARRAY_SIZE(conn_drop_reasons), reason);
 }
 
 static void rds_conn_probe_lanes(struct rds_connection *conn)
@@ -723,7 +701,7 @@ static void rds_conn_probe_lanes(struct rds_connection *conn)
                                       NIPQUAD(tmp->c_faddr),
                                       tmp->c_tos);
 
-                               conn->c_drop_source = 5;
+                               conn->c_drop_source = DR_ZERO_LANE_DOWN;
                                rds_conn_drop(tmp);
                        }
                }
index e1f7a749d15e854d6df39110b34d0b7dcb5a761f..26d5302b0c63841ee575f97e9fe49f24ea6ffc95 100644 (file)
@@ -198,7 +198,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 = 80;
+               ic->conn->c_drop_source = DR_IB_UMMOD;
                rds_conn_drop(ic->conn);
        }
        spin_unlock_irqrestore(&rds_ibdev->spinlock, flags);
@@ -632,7 +632,7 @@ static void rds_ib_conn_drop(struct work_struct *_work)
        rds_rtd(RDS_RTD_CM_EXT,
                "conn: %p, calling rds_conn_drop\n", conn);
 
-       conn->c_drop_source = 81;
+       conn->c_drop_source = DR_IB_ACTIVE_BOND_FAILOVER;
        rds_conn_drop(conn);
 
        kfree(work);
@@ -864,7 +864,7 @@ static int rds_ib_move_ip(char                      *from_dev,
                                                                "conn:%p, tos %d, calling rds_conn_drop\n",
                                                                ic2->conn,
                                                                ic2->conn->c_tos);
-                                                       ic2->conn->c_drop_source = 82;
+                                                       ic2->conn->c_drop_source = DR_IB_LOOPBACK_CONN_DROP;
                                                        rds_conn_drop(ic2->conn);
                                                }
                                        }
@@ -893,7 +893,7 @@ static int rds_ib_move_ip(char                      *from_dev,
                                        rds_rtd(RDS_RTD_CM_EXT,
                                                "conn: %p, tos %d, calling rds_conn_drop\n",
                                                ic->conn, ic->conn->c_tos);
-                                       ic->conn->c_drop_source = 83;
+                                       ic->conn->c_drop_source = DR_IB_ACTIVE_BOND_FAILBACK;
                                        rds_conn_drop(ic->conn);
                                }
                        }
index f06a241a7810344387d78072c0f5b0f9b1d3b194..42f4fbd1c2bc967ba97baf09d938fc6a333ffd62 100644 (file)
@@ -245,7 +245,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 = 20;
+               conn->c_drop_source = DR_IB_CONN_DROP_RACE;
                rds_conn_drop(conn);
                return;
        }
@@ -256,7 +256,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 = 21;
+               conn->c_drop_source = DR_IB_NOT_CONNECTING_STATE;
                rds_conn_drop(conn);
                return;
        }
@@ -601,7 +601,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 = 22;
+               conn->c_drop_source = DR_IB_QP_EVENT;
                rds_conn_drop(conn);
                break;
        }
@@ -908,7 +908,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 = 23;
+               conn->c_drop_source = DR_IB_BASE_CONN_DOWN;
                rds_conn_drop(conn);
        }
 
@@ -931,7 +931,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 = 24;
+                       conn->c_drop_source = DR_IB_REQ_WHILE_CONN_UP;
                        rds_conn_drop(conn);
                        rds_ib_stats_inc(s_ib_listen_closed_stale);
                } else if (rds_conn_state(conn) == RDS_CONN_CONNECTING) {
@@ -953,7 +953,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 = 25;
+                               conn->c_drop_source = DR_IB_REQ_WHILE_CONNECTING;
                                rds_conn_drop(conn);
                                rds_ib_stats_inc(s_ib_listen_closed_stale);
                        } else {
@@ -997,7 +997,7 @@ int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id,
 
        err = rds_ib_setup_qp(conn);
        if (err) {
-               conn->c_drop_source = 26;
+               conn->c_drop_source = DR_IB_PAS_SETUP_QP_FAIL;
                rds_ib_conn_error(conn, "rds_ib_setup_qp failed (%d)\n", err);
                goto out;
        }
@@ -1014,7 +1014,7 @@ 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 = 27;
+               conn->c_drop_source = DR_IB_RDMA_ACCEPT_FAIL;
                rds_ib_conn_error(conn, "rdma_accept failed (%d)\n", err);
        }
 #if RDMA_RDS_APM_SUPPORTED
@@ -1065,7 +1065,7 @@ int rds_ib_cm_initiate_connect(struct rdma_cm_id *cm_id)
 
        ret = rds_ib_setup_qp(conn);
        if (ret) {
-               conn->c_drop_source = 28;
+               conn->c_drop_source = DR_IB_ACT_SETUP_QP_FAIL;
                rds_ib_conn_error(conn, "rds_ib_setup_qp failed (%d)\n", ret);
                goto out;
        }
@@ -1075,7 +1075,7 @@ 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 = 29;
+               conn->c_drop_source = DR_IB_RDMA_CONNECT_FAIL;
                rds_ib_conn_error(conn, "rdma_connect failed (%d)\n", ret);
        }
 
index ad5bd62ca00003bae6ee57c1f4385bef58a9b4e0..819b27c7ee568b8cd2d74094a09eac7e6c99736f 100644 (file)
@@ -633,7 +633,7 @@ 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 = 60;
+                       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,
@@ -923,7 +923,7 @@ static void rds_ib_send_ack(struct rds_ib_connection *ic, unsigned int adv_credi
 
                rds_ib_stats_inc(s_ib_ack_send_failure);
 
-               ic->conn->c_drop_source = 61;
+               ic->conn->c_drop_source = DR_IB_SEND_ACK_FAIL;
                rds_ib_conn_error(ic->conn, "sending ack failed\n");
        } else
                rds_ib_stats_inc(s_ib_ack_sent);
@@ -1101,7 +1101,7 @@ static void rds_ib_process_recv(struct rds_connection *conn,
                 data_len);
 
        if (data_len < sizeof(struct rds_header)) {
-               conn->c_drop_source = 62;
+               conn->c_drop_source = DR_IB_HEADER_MISSING;
                rds_ib_conn_error(conn, "incoming message "
                       "from %pI4 didn't inclue a "
                       "header, disconnecting and "
@@ -1115,7 +1115,7 @@ static void rds_ib_process_recv(struct rds_connection *conn,
 
        /* Validate the checksum. */
        if (!rds_message_verify_checksum(ihdr)) {
-               conn->c_drop_source = 63;
+               conn->c_drop_source = DR_IB_HEADER_CORRUPTED;
                rds_ib_conn_error(conn, "incoming message "
                       "from %pI4 has corrupted header - "
                       "forcing a reconnect\n",
@@ -1183,7 +1183,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 = 64;
+                       conn->c_drop_source = DR_IB_FRAG_HEADER_MISMATCH;
                        rds_ib_conn_error(conn,
                                "fragment header mismatch; forcing reconnect\n");
                        return;
@@ -1344,7 +1344,7 @@ 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 = 65;
+                       conn->c_drop_source = DR_IB_RECV_COMP_ERR;
                        rds_ib_conn_error(conn, "recv completion "
                                        "<%pI4,%pI4,%d> had status %u "
                                        "vendor_err %u, disconnecting and "
index 621860fb091730c2e767e62fadb7d479447bb3fa..8f19eb4a93f2d08aa234c897b1a7cc38bcf03798 100644 (file)
@@ -341,7 +341,7 @@ 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 = 66;
+               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 %u, disconnecting and reconnecting\n",
@@ -812,7 +812,7 @@ int rds_ib_xmit(struct rds_connection *conn, struct rds_message *rm,
                        prev->s_op = NULL;
                }
 
-               ic->conn->c_drop_source = 67;
+               ic->conn->c_drop_source = DR_IB_POST_SEND_FAIL;
                rds_ib_conn_error(ic->conn, "ib_post_send failed\n");
                goto out;
        }
index ed0f8078b0bd2d7224d53de134dc47939ffcde86..168c31e8c1b232ae8a2ba7d8188c23a04354b391 100644 (file)
@@ -160,7 +160,7 @@ static void rds_iw_qp_event_handler(struct ib_event *event, void *data)
                        "- connection %pI4->%pI4, reconnecting\n",
                        event->event, &conn->c_laddr,
                        &conn->c_faddr);
-               conn->c_drop_source = 120;
+               conn->c_drop_source = DR_IW_QP_EVENT;
                rds_conn_drop(conn);
                break;
        }
@@ -416,7 +416,7 @@ int rds_iw_cm_handle_connect(struct rdma_cm_id *cm_id,
        if (!rds_conn_transition(conn, RDS_CONN_DOWN, RDS_CONN_CONNECTING)) {
                if (rds_conn_state(conn) == RDS_CONN_UP) {
                        rdsdebug("incoming connect while connecting\n");
-                       conn->c_drop_source = 121;
+                       conn->c_drop_source = DR_IW_REQ_WHILE_CONNECTING;
                        rds_conn_drop(conn);
                        rds_iw_stats_inc(s_iw_listen_closed_stale);
                } else
@@ -453,7 +453,7 @@ int rds_iw_cm_handle_connect(struct rdma_cm_id *cm_id,
 
        err = rds_iw_setup_qp(conn);
        if (err) {
-               conn->c_drop_source = 122;
+               conn->c_drop_source = DR_IW_PAS_SETUP_QP_FAIL;
                rds_iw_conn_error(conn, "rds_iw_setup_qp failed (%d)\n", err);
                goto out;
        }
@@ -464,7 +464,7 @@ int rds_iw_cm_handle_connect(struct rdma_cm_id *cm_id,
        err = rdma_accept(cm_id, &conn_param);
        mutex_unlock(&conn->c_cm_lock);
        if (err) {
-               conn->c_drop_source = 123;
+               conn->c_drop_source = DR_IW_RDMA_ACCEPT_FAIL;
                rds_iw_conn_error(conn, "rdma_accept failed (%d)\n", err);
                goto out;
        }
@@ -492,7 +492,7 @@ int rds_iw_cm_initiate_connect(struct rdma_cm_id *cm_id)
 
        ret = rds_iw_setup_qp(conn);
        if (ret) {
-               conn->c_drop_source = 124;
+               conn->c_drop_source = DR_IW_ACT_SETUP_QP_FAIL;
                rds_iw_conn_error(conn, "rds_iw_setup_qp failed (%d)\n", ret);
                goto out;
        }
@@ -501,7 +501,7 @@ int rds_iw_cm_initiate_connect(struct rdma_cm_id *cm_id)
 
        ret = rdma_connect(cm_id, &conn_param);
        if (ret) {
-               conn->c_drop_source = 125;
+               conn->c_drop_source = DR_IW_RDMA_CONNECT_FAIL;
                rds_iw_conn_error(conn, "rdma_connect failed (%d)\n", ret);
        }
 out:
index 7da890685c5571e6df552e689b198be58b5965e9..cb2d87a96551eb4e253f85c3439bd016d35ae38c 100644 (file)
@@ -252,7 +252,7 @@ int rds_iw_recv_refill(struct rds_connection *conn, gfp_t kptr_gfp,
                         recv->r_iwinc, recv->r_frag->f_page,
                         (long) recv->r_frag->f_mapped, ret);
                if (ret) {
-                       conn->c_drop_source = 130;
+                       conn->c_drop_source = DR_IW_POST_RECV_FAIL;
                        rds_iw_conn_error(conn, "recv post on "
                               "%pI4 returned %d, disconnecting and "
                               "reconnecting\n", &conn->c_faddr,
@@ -455,7 +455,7 @@ static void rds_iw_send_ack(struct rds_iw_connection *ic, unsigned int adv_credi
 
                rds_iw_stats_inc(s_iw_ack_send_failure);
 
-               ic->conn->c_drop_source = 131;
+               ic->conn->c_drop_source = DR_IW_SEND_ACK_FAIL;
                rds_iw_conn_error(ic->conn, "sending ack failed\n");
        } else
                rds_iw_stats_inc(s_iw_ack_sent);
@@ -646,7 +646,7 @@ static void rds_iw_process_recv(struct rds_connection *conn,
                 byte_len);
 
        if (byte_len < sizeof(struct rds_header)) {
-               conn->c_drop_source = 132;
+               conn->c_drop_source = DR_IW_HEADER_MISSING;
                rds_iw_conn_error(conn, "incoming message "
                       "from %pI4 didn't inclue a "
                       "header, disconnecting and "
@@ -660,7 +660,7 @@ static void rds_iw_process_recv(struct rds_connection *conn,
 
        /* Validate the checksum. */
        if (!rds_message_verify_checksum(ihdr)) {
-               conn->c_drop_source = 133;
+               conn->c_drop_source = DR_IW_HEADER_CORRUPTED;
                rds_iw_conn_error(conn, "incoming message "
                       "from %pI4 has corrupted header - "
                       "forcing a reconnect\n",
@@ -723,7 +723,7 @@ static void rds_iw_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 = 134;
+                       conn->c_drop_source = DR_IW_FRAG_HEADER_MISMATCH;
                        rds_iw_conn_error(conn,
                                "fragment header mismatch; forcing reconnect\n");
                        return;
@@ -808,7 +808,7 @@ static inline void rds_poll_cq(struct rds_iw_connection *ic,
                        if (wc.status == IB_WC_SUCCESS) {
                                rds_iw_process_recv(conn, recv, wc.byte_len, state);
                        } else {
-                               conn->c_drop_source = 135;
+                               conn->c_drop_source = DR_IW_RECV_COMP_ERR;
                                rds_iw_conn_error(conn, "recv completion on "
                                       "%pI4 had status %u, disconnecting and "
                                       "reconnecting\n", &conn->c_faddr,
index 0820c4abc2ebd236b43fc6ffe037af5c32e4b833..7541ddbfc0ba962509f4ae2c27423c55162b6ffb 100644 (file)
@@ -293,7 +293,7 @@ void rds_iw_send_cq_comp_handler(struct ib_cq *cq, void *context)
 
                /* We expect errors as the qp is drained during shutdown */
                if (wc.status != IB_WC_SUCCESS && rds_conn_up(conn)) {
-                       conn->c_drop_source = 136;
+                       conn->c_drop_source = DR_IW_SEND_COMP_ERR;
                        rds_iw_conn_error(conn,
                                "send completion on %pI4 "
                                "had status %u, disconnecting and reconnecting\n",
index c5d5011b15ad6cac2b3ffc4ce0666972688a9c48..483905d58eca911f4be0e9ff0e22740c99934671 100644 (file)
@@ -166,7 +166,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 = 40;
+                               conn->c_drop_source = DR_IB_SET_IB_PATH_FAIL;
                                rds_conn_drop(conn);
                                ret = 0;
                        }
@@ -191,7 +191,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 = 41;
+                               conn->c_drop_source = DR_IB_RESOLVE_ROUTE_FAIL;
                                rds_conn_drop(conn);
                        }
                } else if (conn->c_to_index < (RDS_RDMA_RESOLVE_TO_MAX_INDEX-1))
@@ -215,7 +215,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 = 42;
+                               conn->c_drop_source = DR_IB_RDMA_CM_ID_MISMATCH;
                                rds_conn_drop(conn);
                        }
                }
@@ -259,7 +259,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 = 43;
+                       conn->c_drop_source = DR_IB_ROUTE_ERR;
                        rds_conn_drop(conn);
                }
                break;
@@ -274,7 +274,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 = 44;
+                       conn->c_drop_source = DR_IB_ADDR_ERR;
                        rds_conn_drop(conn);
                }
                break;
@@ -287,7 +287,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 = 45;
+                       conn->c_drop_source = DR_IB_CONNECT_ERR;
                        rds_conn_drop(conn);
                }
                break;
@@ -309,7 +309,7 @@ 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 = 46;
+                                       conn->c_drop_source = DR_IB_CONSUMER_DEFINED_REJ;
                                        rds_conn_drop(conn);
                                } else  {
                                        if (conn->c_loopback)
@@ -328,7 +328,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 = 47;
+                               conn->c_drop_source = DR_IB_REJECTED_EVENT;
                                rds_conn_drop(conn);
                        }
                }
@@ -345,7 +345,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 = 48;
+                       conn->c_drop_source = DR_IB_ADDR_CHANGE;
                        rds_conn_drop(conn);
                }
 #else
@@ -354,7 +354,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 = 48;
+                       conn->c_drop_source = DR_IB_ADDR_CHANGE;
                        rds_conn_drop(conn);
                }
 #endif
@@ -364,7 +364,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 = 49;
+               conn->c_drop_source = DR_IB_DISCONNECTED_EVENT;
                rds_conn_drop(conn);
                break;
 
@@ -374,7 +374,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 = 50;
+                       conn->c_drop_source = DR_IB_TIMEWAIT_EXIT;
                        rds_conn_drop(conn);
                } else
                        printk(KERN_INFO "TIMEWAIT_EXIT event - conn=NULL\n");
index b18ce4848cb86076b334e078d2bff97f24c5dbda..f856c55b8acab731989d50859f97bdbb756266dd 100644 (file)
@@ -134,6 +134,80 @@ enum {
 #define RDS_RDMA_RESOLVE_TO_MAX_INDEX   5
 #define RDS_ADDR_RES_TM_INDEX_MAX 5
 
+enum rds_conn_drop_src {
+       /* rds-core */
+       DR_DEFAULT,
+       DR_USER_RESET,
+       DR_INV_CONN_STATE,
+       DR_DOWN_TRANSITION_FAIL,
+       DR_CONN_DESTROY,
+       DR_ZERO_LANE_DOWN,
+       DR_CONN_CONNECT_FAIL,
+       DR_HB_TIMEOUT,
+       DR_RECONNECT_TIMEOUT,
+
+       /* ib_cm  */
+       DR_IB_CONN_DROP_RACE,
+       DR_IB_NOT_CONNECTING_STATE,
+       DR_IB_QP_EVENT,
+       DR_IB_BASE_CONN_DOWN,
+       DR_IB_REQ_WHILE_CONN_UP,
+       DR_IB_REQ_WHILE_CONNECTING,
+       DR_IB_PAS_SETUP_QP_FAIL,
+       DR_IB_RDMA_ACCEPT_FAIL,
+       DR_IB_ACT_SETUP_QP_FAIL,
+       DR_IB_RDMA_CONNECT_FAIL,
+
+       /* event handling */
+       DR_IB_SET_IB_PATH_FAIL,
+       DR_IB_RESOLVE_ROUTE_FAIL,
+       DR_IB_RDMA_CM_ID_MISMATCH,
+       DR_IB_ROUTE_ERR,
+       DR_IB_ADDR_ERR,
+       DR_IB_CONNECT_ERR,
+       DR_IB_CONSUMER_DEFINED_REJ,
+       DR_IB_REJECTED_EVENT,
+       DR_IB_ADDR_CHANGE,
+       DR_IB_DISCONNECTED_EVENT,
+       DR_IB_TIMEWAIT_EXIT,
+
+       /* data path */
+       DR_IB_POST_RECV_FAIL,
+       DR_IB_SEND_ACK_FAIL,
+       DR_IB_HEADER_MISSING,
+       DR_IB_HEADER_CORRUPTED,
+       DR_IB_FRAG_HEADER_MISMATCH,
+       DR_IB_RECV_COMP_ERR,
+       DR_IB_SEND_COMP_ERR,
+       DR_IB_POST_SEND_FAIL,
+
+       /* special features like active bonding */
+       DR_IB_UMMOD,
+       DR_IB_ACTIVE_BOND_FAILOVER,
+       DR_IB_LOOPBACK_CONN_DROP,
+       DR_IB_ACTIVE_BOND_FAILBACK,
+
+       /* iWARP */
+       DR_IW_QP_EVENT,
+       DR_IW_REQ_WHILE_CONNECTING,
+       DR_IW_PAS_SETUP_QP_FAIL,
+       DR_IW_RDMA_ACCEPT_FAIL,
+       DR_IW_ACT_SETUP_QP_FAIL,
+       DR_IW_RDMA_CONNECT_FAIL,
+
+       DR_IW_POST_RECV_FAIL,
+       DR_IW_SEND_ACK_FAIL,
+       DR_IW_HEADER_MISSING,
+       DR_IW_HEADER_CORRUPTED,
+       DR_IW_FRAG_HEADER_MISMATCH,
+       DR_IW_RECV_COMP_ERR,
+       DR_IW_SEND_COMP_ERR,
+
+       /* TCP */
+       DR_TCP_STATE_CLOSE,
+       DR_TCP_SEND_FAIL,
+};
+
 struct rds_connection {
        struct hlist_node       c_hash_node;
        __be32                  c_laddr;
@@ -214,7 +288,8 @@ struct rds_connection {
 
        unsigned int            c_reconnect_racing;
        unsigned int            c_route_resolved;
-       u8                      c_drop_source;
+
+       enum rds_conn_drop_src  c_drop_source;
 };
 
 static inline
@@ -772,7 +847,7 @@ void rds_for_each_conn_info(struct socket *sock, unsigned int len,
                          struct rds_info_lengths *lens,
                          int (*visitor)(struct rds_connection *, void *),
                          size_t item_len);
-char *conn_drop_reason_str(u8 reason);
+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...) \
index b57a5fb1669252d2679be57ef60cd2faf6226b08..ecf289cf6fd77d689e17a601af245b5c29966bb3 100644 (file)
@@ -64,7 +64,7 @@ void rds_tcp_state_change(struct sock *sk)
                        break;
                case TCP_CLOSE_WAIT:
                case TCP_CLOSE:
-                       conn->c_drop_source = 140;
+                       conn->c_drop_source = DR_TCP_STATE_CLOSE;
                        rds_conn_drop(conn);
                default:
                        break;
index 6e8e5a7b42afd8fe5594e1be011bbd2b458d6529..7406211a627b8e6da75eac857b9bbbac964de201 100644 (file)
@@ -152,7 +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 = 141;
+                       conn->c_drop_source = DR_TCP_SEND_FAIL;
                        rds_conn_drop(conn);
                }
        }
index 55a1b48240c95cb65a246c67803a1005105d02ae..d1c364b2864beb28c39c52aa18d82942e2f27a23 100644 (file)
@@ -182,7 +182,7 @@ void rds_connect_worker(struct work_struct *work)
                 * drop the connection if it doesn't work out after a while
                 */
                conn->c_connection_start = get_seconds();
-               conn->c_drop_source = 0;
+               conn->c_drop_source = DR_DEFAULT;
 
                ret = conn->c_trans->conn_connect(conn);
                rds_rtd(RDS_RTD_CM_EXT,
@@ -195,7 +195,7 @@ void rds_connect_worker(struct work_struct *work)
                                        "reconnecting..., conn %p\n", conn);
                                rds_queue_reconnect(conn);
                        } else {
-                               conn->c_drop_source = 6;
+                               conn->c_drop_source = DR_CONN_CONNECT_FAIL;
                                rds_conn_error(conn, "RDS: connect failed\n");
                        }
                }
@@ -286,7 +286,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 = 7;
+                       conn->c_drop_source = DR_HB_TIMEOUT;
                        rds_conn_drop(conn);
                        return;
                }
@@ -307,7 +307,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 = 8;
+               conn->c_drop_source = DR_RECONNECT_TIMEOUT;
                rds_conn_drop(conn);
                conn->c_reconnect_racing = 0;
        }