Lines Matching refs:conn

77 	struct rds_connection *conn, *ret = NULL;  in rds_conn_lookup()  local
79 hlist_for_each_entry_rcu(conn, head, c_hash_node) { in rds_conn_lookup()
80 if (conn->c_faddr == faddr && conn->c_laddr == laddr && in rds_conn_lookup()
81 conn->c_trans == trans) { in rds_conn_lookup()
82 ret = conn; in rds_conn_lookup()
97 static void rds_conn_reset(struct rds_connection *conn) in rds_conn_reset() argument
100 &conn->c_laddr, &conn->c_faddr); in rds_conn_reset()
103 rds_send_reset(conn); in rds_conn_reset()
104 conn->c_flags = 0; in rds_conn_reset()
124 struct rds_connection *conn, *parent = NULL; in __rds_conn_create() local
134 conn = rds_conn_lookup(head, laddr, faddr, trans); in __rds_conn_create()
135 if (conn && conn->c_loopback && conn->c_trans != &rds_loop_transport && in __rds_conn_create()
141 parent = conn; in __rds_conn_create()
142 conn = parent->c_passive; in __rds_conn_create()
145 if (conn) in __rds_conn_create()
149 conn = kmem_cache_zalloc(rds_conn_slab, gfp); in __rds_conn_create()
150 if (!conn) { in __rds_conn_create()
151 conn = ERR_PTR(-ENOMEM); in __rds_conn_create()
155 INIT_HLIST_NODE(&conn->c_hash_node); in __rds_conn_create()
156 conn->c_laddr = laddr; in __rds_conn_create()
157 conn->c_faddr = faddr; in __rds_conn_create()
158 spin_lock_init(&conn->c_lock); in __rds_conn_create()
159 conn->c_next_tx_seq = 1; in __rds_conn_create()
161 init_waitqueue_head(&conn->c_waitq); in __rds_conn_create()
162 INIT_LIST_HEAD(&conn->c_send_queue); in __rds_conn_create()
163 INIT_LIST_HEAD(&conn->c_retrans); in __rds_conn_create()
165 ret = rds_cong_get_maps(conn); in __rds_conn_create()
167 kmem_cache_free(rds_conn_slab, conn); in __rds_conn_create()
168 conn = ERR_PTR(ret); in __rds_conn_create()
180 conn->c_loopback = 1; in __rds_conn_create()
190 conn->c_trans = trans; in __rds_conn_create()
192 ret = trans->conn_alloc(conn, gfp); in __rds_conn_create()
194 kmem_cache_free(rds_conn_slab, conn); in __rds_conn_create()
195 conn = ERR_PTR(ret); in __rds_conn_create()
199 atomic_set(&conn->c_state, RDS_CONN_DOWN); in __rds_conn_create()
200 conn->c_send_gen = 0; in __rds_conn_create()
201 conn->c_reconnect_jiffies = 0; in __rds_conn_create()
202 INIT_DELAYED_WORK(&conn->c_send_w, rds_send_worker); in __rds_conn_create()
203 INIT_DELAYED_WORK(&conn->c_recv_w, rds_recv_worker); in __rds_conn_create()
204 INIT_DELAYED_WORK(&conn->c_conn_w, rds_connect_worker); in __rds_conn_create()
205 INIT_WORK(&conn->c_down_w, rds_shutdown_worker); in __rds_conn_create()
206 mutex_init(&conn->c_cm_lock); in __rds_conn_create()
207 conn->c_flags = 0; in __rds_conn_create()
210 conn, &laddr, &faddr, in __rds_conn_create()
225 trans->conn_free(conn->c_transport_data); in __rds_conn_create()
226 kmem_cache_free(rds_conn_slab, conn); in __rds_conn_create()
227 conn = parent->c_passive; in __rds_conn_create()
229 parent->c_passive = conn; in __rds_conn_create()
230 rds_cong_add_conn(conn); in __rds_conn_create()
242 trans->conn_free(conn->c_transport_data); in __rds_conn_create()
243 kmem_cache_free(rds_conn_slab, conn); in __rds_conn_create()
244 conn = found; in __rds_conn_create()
251 hlist_add_head_rcu(&conn->c_hash_node, head); in __rds_conn_create()
253 rds_cong_add_conn(conn); in __rds_conn_create()
260 return conn; in __rds_conn_create()
277 void rds_conn_shutdown(struct rds_connection *conn) in rds_conn_shutdown() argument
280 if (!rds_conn_transition(conn, RDS_CONN_DOWN, RDS_CONN_DOWN)) { in rds_conn_shutdown()
288 mutex_lock(&conn->c_cm_lock); in rds_conn_shutdown()
289 if (!rds_conn_transition(conn, RDS_CONN_UP, RDS_CONN_DISCONNECTING) in rds_conn_shutdown()
290 && !rds_conn_transition(conn, RDS_CONN_ERROR, RDS_CONN_DISCONNECTING)) { in rds_conn_shutdown()
291 rds_conn_error(conn, "shutdown called in state %d\n", in rds_conn_shutdown()
292 atomic_read(&conn->c_state)); in rds_conn_shutdown()
293 mutex_unlock(&conn->c_cm_lock); in rds_conn_shutdown()
296 mutex_unlock(&conn->c_cm_lock); in rds_conn_shutdown()
298 wait_event(conn->c_waitq, in rds_conn_shutdown()
299 !test_bit(RDS_IN_XMIT, &conn->c_flags)); in rds_conn_shutdown()
301 conn->c_trans->conn_shutdown(conn); in rds_conn_shutdown()
302 rds_conn_reset(conn); in rds_conn_shutdown()
304 if (!rds_conn_transition(conn, RDS_CONN_DISCONNECTING, RDS_CONN_DOWN)) { in rds_conn_shutdown()
310 rds_conn_error(conn, in rds_conn_shutdown()
314 atomic_read(&conn->c_state)); in rds_conn_shutdown()
323 cancel_delayed_work_sync(&conn->c_conn_w); in rds_conn_shutdown()
325 if (!hlist_unhashed(&conn->c_hash_node)) { in rds_conn_shutdown()
327 rds_queue_reconnect(conn); in rds_conn_shutdown()
340 void rds_conn_destroy(struct rds_connection *conn) in rds_conn_destroy() argument
346 "%pI4\n", conn, &conn->c_laddr, in rds_conn_destroy()
347 &conn->c_faddr); in rds_conn_destroy()
351 hlist_del_init_rcu(&conn->c_hash_node); in rds_conn_destroy()
356 rds_conn_drop(conn); in rds_conn_destroy()
357 flush_work(&conn->c_down_w); in rds_conn_destroy()
360 cancel_delayed_work_sync(&conn->c_send_w); in rds_conn_destroy()
361 cancel_delayed_work_sync(&conn->c_recv_w); in rds_conn_destroy()
365 &conn->c_send_queue, in rds_conn_destroy()
371 if (conn->c_xmit_rm) in rds_conn_destroy()
372 rds_message_put(conn->c_xmit_rm); in rds_conn_destroy()
374 conn->c_trans->conn_free(conn->c_transport_data); in rds_conn_destroy()
381 rds_cong_remove_conn(conn); in rds_conn_destroy()
383 BUG_ON(!list_empty(&conn->c_retrans)); in rds_conn_destroy()
384 kmem_cache_free(rds_conn_slab, conn); in rds_conn_destroy()
399 struct rds_connection *conn; in rds_conn_message_info() local
411 hlist_for_each_entry_rcu(conn, head, c_hash_node) { in rds_conn_message_info()
413 list = &conn->c_send_queue; in rds_conn_message_info()
415 list = &conn->c_retrans; in rds_conn_message_info()
417 spin_lock_irqsave(&conn->c_lock, flags); in rds_conn_message_info()
424 conn->c_laddr, in rds_conn_message_info()
425 conn->c_faddr, 0); in rds_conn_message_info()
428 spin_unlock_irqrestore(&conn->c_lock, flags); in rds_conn_message_info()
460 struct rds_connection *conn; in rds_for_each_conn_info() local
470 hlist_for_each_entry_rcu(conn, head, c_hash_node) { in rds_for_each_conn_info()
473 if (!visitor(conn, buffer)) in rds_for_each_conn_info()
490 static int rds_conn_info_visitor(struct rds_connection *conn, in rds_conn_info_visitor() argument
495 cinfo->next_tx_seq = conn->c_next_tx_seq; in rds_conn_info_visitor()
496 cinfo->next_rx_seq = conn->c_next_rx_seq; in rds_conn_info_visitor()
497 cinfo->laddr = conn->c_laddr; in rds_conn_info_visitor()
498 cinfo->faddr = conn->c_faddr; in rds_conn_info_visitor()
499 strncpy(cinfo->transport, conn->c_trans->t_name, in rds_conn_info_visitor()
503 rds_conn_info_set(cinfo->flags, test_bit(RDS_IN_XMIT, &conn->c_flags), in rds_conn_info_visitor()
507 atomic_read(&conn->c_state) == RDS_CONN_CONNECTING, in rds_conn_info_visitor()
510 atomic_read(&conn->c_state) == RDS_CONN_UP, in rds_conn_info_visitor()
559 void rds_conn_drop(struct rds_connection *conn) in rds_conn_drop() argument
561 atomic_set(&conn->c_state, RDS_CONN_ERROR); in rds_conn_drop()
562 queue_work(rds_wq, &conn->c_down_w); in rds_conn_drop()
570 void rds_conn_connect_if_down(struct rds_connection *conn) in rds_conn_connect_if_down() argument
572 if (rds_conn_state(conn) == RDS_CONN_DOWN && in rds_conn_connect_if_down()
573 !test_and_set_bit(RDS_RECONNECT_PENDING, &conn->c_flags)) in rds_conn_connect_if_down()
574 queue_delayed_work(rds_wq, &conn->c_conn_w, 0); in rds_conn_connect_if_down()
582 __rds_conn_error(struct rds_connection *conn, const char *fmt, ...) in __rds_conn_error() argument
590 rds_conn_drop(conn); in __rds_conn_error()