Merge remote-tracking branches 'regmap/fix/header' and 'regmap/fix/macro' into regmap...
[cascardo/linux.git] / net / rds / connection.c
index 19a4fee..f505855 100644 (file)
@@ -155,7 +155,7 @@ static struct rds_connection *__rds_conn_create(struct net *net,
        struct hlist_head *head = rds_conn_bucket(laddr, faddr);
        struct rds_transport *loop_trans;
        unsigned long flags;
-       int ret;
+       int ret, i;
 
        rcu_read_lock();
        conn = rds_conn_lookup(net, head, laddr, faddr, trans);
@@ -211,6 +211,12 @@ static struct rds_connection *__rds_conn_create(struct net *net,
 
        conn->c_trans = trans;
 
+       init_waitqueue_head(&conn->c_hs_waitq);
+       for (i = 0; i < RDS_MPATH_WORKERS; i++) {
+               __rds_conn_path_init(conn, &conn->c_path[i],
+                                    is_outgoing);
+               conn->c_path[i].cp_index = i;
+       }
        ret = trans->conn_alloc(conn, gfp);
        if (ret) {
                kmem_cache_free(rds_conn_slab, conn);
@@ -263,14 +269,6 @@ static struct rds_connection *__rds_conn_create(struct net *net,
                        kmem_cache_free(rds_conn_slab, conn);
                        conn = found;
                } else {
-                       int i;
-
-                       for (i = 0; i < RDS_MPATH_WORKERS; i++) {
-                               __rds_conn_path_init(conn, &conn->c_path[i],
-                                                    is_outgoing);
-                               conn->c_path[i].cp_index = i;
-                       }
-
                        hlist_add_head_rcu(&conn->c_hash_node, head);
                        rds_cong_add_conn(conn);
                        rds_conn_count++;
@@ -668,6 +666,7 @@ EXPORT_SYMBOL_GPL(rds_conn_path_drop);
 
 void rds_conn_drop(struct rds_connection *conn)
 {
+       WARN_ON(conn->c_trans->t_mp_capable);
        rds_conn_path_drop(&conn->c_path[0]);
 }
 EXPORT_SYMBOL_GPL(rds_conn_drop);