Lines Matching full:conn

89 	struct rds_connection *conn, *ret = NULL;  in rds_conn_lookup()  local
91 hlist_for_each_entry_rcu(conn, head, c_hash_node) { in rds_conn_lookup()
92 if (ipv6_addr_equal(&conn->c_faddr, faddr) && in rds_conn_lookup()
93 ipv6_addr_equal(&conn->c_laddr, laddr) && in rds_conn_lookup()
94 conn->c_trans == trans && in rds_conn_lookup()
95 conn->c_tos == tos && in rds_conn_lookup()
96 net == rds_conn_net(conn) && in rds_conn_lookup()
97 conn->c_dev_if == dev_if) { in rds_conn_lookup()
98 ret = conn; in rds_conn_lookup()
102 rdsdebug("returning conn %p for %pI6c -> %pI6c\n", ret, in rds_conn_lookup()
115 struct rds_connection *conn = cp->cp_conn; in rds_conn_path_reset() local
118 &conn->c_laddr, &conn->c_faddr); in rds_conn_path_reset()
130 static void __rds_conn_path_init(struct rds_connection *conn, in __rds_conn_path_init() argument
139 cp->cp_conn = conn; in __rds_conn_path_init()
153 * There is only every one 'conn' for a given pair of addresses in the
168 struct rds_connection *conn, *parent = NULL; in __rds_conn_create() local
176 conn = rds_conn_lookup(net, head, laddr, faddr, trans, tos, dev_if); in __rds_conn_create()
177 if (conn && in __rds_conn_create()
178 conn->c_loopback && in __rds_conn_create()
179 conn->c_trans != &rds_loop_transport && in __rds_conn_create()
186 parent = conn; in __rds_conn_create()
187 conn = parent->c_passive; in __rds_conn_create()
190 if (conn) in __rds_conn_create()
193 conn = kmem_cache_zalloc(rds_conn_slab, gfp); in __rds_conn_create()
194 if (!conn) { in __rds_conn_create()
195 conn = ERR_PTR(-ENOMEM); in __rds_conn_create()
198 conn->c_path = kcalloc(npaths, sizeof(struct rds_conn_path), gfp); in __rds_conn_create()
199 if (!conn->c_path) { in __rds_conn_create()
200 kmem_cache_free(rds_conn_slab, conn); in __rds_conn_create()
201 conn = ERR_PTR(-ENOMEM); in __rds_conn_create()
205 INIT_HLIST_NODE(&conn->c_hash_node); in __rds_conn_create()
206 conn->c_laddr = *laddr; in __rds_conn_create()
207 conn->c_isv6 = !ipv6_addr_v4mapped(laddr); in __rds_conn_create()
208 conn->c_faddr = *faddr; in __rds_conn_create()
209 conn->c_dev_if = dev_if; in __rds_conn_create()
210 conn->c_tos = tos; in __rds_conn_create()
219 conn->c_bound_if = dev_if; in __rds_conn_create()
222 conn->c_bound_if = 0; in __rds_conn_create()
224 rds_conn_net_set(conn, net); in __rds_conn_create()
226 ret = rds_cong_get_maps(conn); in __rds_conn_create()
228 kfree(conn->c_path); in __rds_conn_create()
229 kmem_cache_free(rds_conn_slab, conn); in __rds_conn_create()
230 conn = ERR_PTR(ret); in __rds_conn_create()
239 loop_trans = rds_trans_get_preferred(net, faddr, conn->c_dev_if); in __rds_conn_create()
242 conn->c_loopback = 1; in __rds_conn_create()
256 kfree(conn->c_path); in __rds_conn_create()
257 kmem_cache_free(rds_conn_slab, conn); in __rds_conn_create()
258 conn = ERR_PTR(-EOPNOTSUPP); in __rds_conn_create()
264 conn->c_trans = trans; in __rds_conn_create()
266 init_waitqueue_head(&conn->c_hs_waitq); in __rds_conn_create()
268 __rds_conn_path_init(conn, &conn->c_path[i], in __rds_conn_create()
270 conn->c_path[i].cp_index = i; in __rds_conn_create()
273 if (rds_destroy_pending(conn)) in __rds_conn_create()
276 ret = trans->conn_alloc(conn, GFP_ATOMIC); in __rds_conn_create()
279 kfree(conn->c_path); in __rds_conn_create()
280 kmem_cache_free(rds_conn_slab, conn); in __rds_conn_create()
281 conn = ERR_PTR(ret); in __rds_conn_create()
285 rdsdebug("allocated conn %p for %pI6c -> %pI6c over %s %s\n", in __rds_conn_create()
286 conn, laddr, faddr, in __rds_conn_create()
291 * Since we ran without holding the conn lock, someone could in __rds_conn_create()
292 * have created the same conn (either normal or passive) in the in __rds_conn_create()
294 * init and return our conn. If we lost, we rollback and return the in __rds_conn_create()
299 /* Creating passive conn */ in __rds_conn_create()
301 trans->conn_free(conn->c_path[0].cp_transport_data); in __rds_conn_create()
302 kfree(conn->c_path); in __rds_conn_create()
303 kmem_cache_free(rds_conn_slab, conn); in __rds_conn_create()
304 conn = parent->c_passive; in __rds_conn_create()
306 parent->c_passive = conn; in __rds_conn_create()
307 rds_cong_add_conn(conn); in __rds_conn_create()
311 /* Creating normal conn */ in __rds_conn_create()
321 cp = &conn->c_path[i]; in __rds_conn_create()
329 kfree(conn->c_path); in __rds_conn_create()
330 kmem_cache_free(rds_conn_slab, conn); in __rds_conn_create()
331 conn = found; in __rds_conn_create()
333 conn->c_my_gen_num = rds_gen_num; in __rds_conn_create()
334 conn->c_peer_gen_num = 0; in __rds_conn_create()
335 hlist_add_head_rcu(&conn->c_hash_node, head); in __rds_conn_create()
336 rds_cong_add_conn(conn); in __rds_conn_create()
344 return conn; in __rds_conn_create()
369 struct rds_connection *conn = cp->cp_conn; in rds_conn_shutdown() local
398 conn->c_trans->conn_path_shutdown(cp); in rds_conn_shutdown()
426 * to the conn hash, so we never trigger a reconnect on this in rds_conn_shutdown()
427 * conn - the reconnect is always triggered by the active peer. */ in rds_conn_shutdown()
430 if (!hlist_unhashed(&conn->c_hash_node)) { in rds_conn_shutdown()
448 /* make sure lingering queued work won't try to ref the conn */ in rds_conn_path_destroy()
478 * the conn has been shutdown that no one else is referencing the connection.
481 void rds_conn_destroy(struct rds_connection *conn) in rds_conn_destroy() argument
486 int npaths = (conn->c_trans->t_mp_capable ? RDS_MPATH_WORKERS : 1); in rds_conn_destroy()
488 rdsdebug("freeing conn %p for %pI4 -> " in rds_conn_destroy()
489 "%pI4\n", conn, &conn->c_laddr, in rds_conn_destroy()
490 &conn->c_faddr); in rds_conn_destroy()
492 /* Ensure conn will not be scheduled for reconnect */ in rds_conn_destroy()
494 hlist_del_init_rcu(&conn->c_hash_node); in rds_conn_destroy()
500 cp = &conn->c_path[i]; in rds_conn_destroy()
510 rds_cong_remove_conn(conn); in rds_conn_destroy()
512 kfree(conn->c_path); in rds_conn_destroy()
513 kmem_cache_free(rds_conn_slab, conn); in rds_conn_destroy()
541 struct rds_connection *conn; in rds_conn_message_info_cmn() local
557 hlist_for_each_entry_rcu(conn, head, c_hash_node) { in rds_conn_message_info_cmn()
561 if (!isv6 && conn->c_isv6) in rds_conn_message_info_cmn()
564 npaths = (conn->c_trans->t_mp_capable ? in rds_conn_message_info_cmn()
568 cp = &conn->c_path[j]; in rds_conn_message_info_cmn()
582 &conn->c_laddr, in rds_conn_message_info_cmn()
583 &conn->c_faddr, in rds_conn_message_info_cmn()
660 struct rds_connection *conn; in rds_for_each_conn_info() local
670 hlist_for_each_entry_rcu(conn, head, c_hash_node) { in rds_for_each_conn_info()
673 if (!visitor(conn, buffer)) in rds_for_each_conn_info()
698 struct rds_connection *conn; in rds_walk_conn_path_info() local
708 hlist_for_each_entry_rcu(conn, head, c_hash_node) { in rds_walk_conn_path_info()
719 cp = conn->c_path; in rds_walk_conn_path_info()
742 struct rds_connection *conn = cp->cp_conn; in rds_conn_info_visitor() local
744 if (conn->c_isv6) in rds_conn_info_visitor()
749 cinfo->laddr = conn->c_laddr.s6_addr32[3]; in rds_conn_info_visitor()
750 cinfo->faddr = conn->c_faddr.s6_addr32[3]; in rds_conn_info_visitor()
751 cinfo->tos = conn->c_tos; in rds_conn_info_visitor()
752 strncpy(cinfo->transport, conn->c_trans->t_name, in rds_conn_info_visitor()
772 struct rds_connection *conn = cp->cp_conn; in rds6_conn_info_visitor() local
776 cinfo6->laddr = conn->c_laddr; in rds6_conn_info_visitor()
777 cinfo6->faddr = conn->c_faddr; in rds6_conn_info_visitor()
778 strncpy(cinfo6->transport, conn->c_trans->t_name, in rds6_conn_info_visitor()
895 void rds_conn_drop(struct rds_connection *conn) in rds_conn_drop() argument
897 WARN_ON(conn->c_trans->t_mp_capable); in rds_conn_drop()
898 rds_conn_path_drop(&conn->c_path[0], false); in rds_conn_drop()
922 void rds_check_all_paths(struct rds_connection *conn) in rds_check_all_paths() argument
927 rds_conn_path_connect_if_down(&conn->c_path[i]); in rds_check_all_paths()
928 } while (++i < conn->c_npaths); in rds_check_all_paths()
931 void rds_conn_connect_if_down(struct rds_connection *conn) in rds_conn_connect_if_down() argument
933 WARN_ON(conn->c_trans->t_mp_capable); in rds_conn_connect_if_down()
934 rds_conn_path_connect_if_down(&conn->c_path[0]); in rds_conn_connect_if_down()