Lines Matching refs:cp

112 static void rds_conn_path_reset(struct rds_conn_path *cp)  in rds_conn_path_reset()  argument
114 struct rds_connection *conn = cp->cp_conn; in rds_conn_path_reset()
120 rds_send_path_reset(cp); in rds_conn_path_reset()
121 cp->cp_flags = 0; in rds_conn_path_reset()
130 struct rds_conn_path *cp, bool is_outgoing) in __rds_conn_path_init() argument
132 spin_lock_init(&cp->cp_lock); in __rds_conn_path_init()
133 cp->cp_next_tx_seq = 1; in __rds_conn_path_init()
134 init_waitqueue_head(&cp->cp_waitq); in __rds_conn_path_init()
135 INIT_LIST_HEAD(&cp->cp_send_queue); in __rds_conn_path_init()
136 INIT_LIST_HEAD(&cp->cp_retrans); in __rds_conn_path_init()
138 cp->cp_conn = conn; in __rds_conn_path_init()
139 atomic_set(&cp->cp_state, RDS_CONN_DOWN); in __rds_conn_path_init()
140 cp->cp_send_gen = 0; in __rds_conn_path_init()
141 cp->cp_reconnect_jiffies = 0; in __rds_conn_path_init()
142 INIT_DELAYED_WORK(&cp->cp_send_w, rds_send_worker); in __rds_conn_path_init()
143 INIT_DELAYED_WORK(&cp->cp_recv_w, rds_recv_worker); in __rds_conn_path_init()
144 INIT_DELAYED_WORK(&cp->cp_conn_w, rds_connect_worker); in __rds_conn_path_init()
145 INIT_WORK(&cp->cp_down_w, rds_shutdown_worker); in __rds_conn_path_init()
146 mutex_init(&cp->cp_cm_lock); in __rds_conn_path_init()
147 cp->cp_flags = 0; in __rds_conn_path_init()
302 struct rds_conn_path *cp; in __rds_conn_create() local
306 cp = &conn->c_path[i]; in __rds_conn_create()
311 if (cp->cp_transport_data) in __rds_conn_create()
312 trans->conn_free(cp->cp_transport_data); in __rds_conn_create()
352 void rds_conn_shutdown(struct rds_conn_path *cp) in rds_conn_shutdown() argument
354 struct rds_connection *conn = cp->cp_conn; in rds_conn_shutdown()
357 if (!rds_conn_path_transition(cp, RDS_CONN_DOWN, RDS_CONN_DOWN)) { in rds_conn_shutdown()
365 mutex_lock(&cp->cp_cm_lock); in rds_conn_shutdown()
366 if (!rds_conn_path_transition(cp, RDS_CONN_UP, in rds_conn_shutdown()
368 !rds_conn_path_transition(cp, RDS_CONN_ERROR, in rds_conn_shutdown()
370 rds_conn_path_error(cp, in rds_conn_shutdown()
372 atomic_read(&cp->cp_state)); in rds_conn_shutdown()
373 mutex_unlock(&cp->cp_cm_lock); in rds_conn_shutdown()
376 mutex_unlock(&cp->cp_cm_lock); in rds_conn_shutdown()
378 wait_event(cp->cp_waitq, in rds_conn_shutdown()
379 !test_bit(RDS_IN_XMIT, &cp->cp_flags)); in rds_conn_shutdown()
380 wait_event(cp->cp_waitq, in rds_conn_shutdown()
381 !test_bit(RDS_RECV_REFILL, &cp->cp_flags)); in rds_conn_shutdown()
383 conn->c_trans->conn_path_shutdown(cp); in rds_conn_shutdown()
384 rds_conn_path_reset(cp); in rds_conn_shutdown()
386 if (!rds_conn_path_transition(cp, RDS_CONN_DISCONNECTING, in rds_conn_shutdown()
388 !rds_conn_path_transition(cp, RDS_CONN_ERROR, in rds_conn_shutdown()
401 rds_conn_path_error(cp, "%s: failed to transition " in rds_conn_shutdown()
404 atomic_read(&cp->cp_state)); in rds_conn_shutdown()
413 cancel_delayed_work_sync(&cp->cp_conn_w); in rds_conn_shutdown()
417 rds_queue_reconnect(cp); in rds_conn_shutdown()
426 static void rds_conn_path_destroy(struct rds_conn_path *cp) in rds_conn_path_destroy() argument
430 if (!cp->cp_transport_data) in rds_conn_path_destroy()
434 cancel_delayed_work_sync(&cp->cp_send_w); in rds_conn_path_destroy()
435 cancel_delayed_work_sync(&cp->cp_recv_w); in rds_conn_path_destroy()
437 rds_conn_path_drop(cp, true); in rds_conn_path_destroy()
438 flush_work(&cp->cp_down_w); in rds_conn_path_destroy()
442 &cp->cp_send_queue, in rds_conn_path_destroy()
448 if (cp->cp_xmit_rm) in rds_conn_path_destroy()
449 rds_message_put(cp->cp_xmit_rm); in rds_conn_path_destroy()
451 WARN_ON(delayed_work_pending(&cp->cp_send_w)); in rds_conn_path_destroy()
452 WARN_ON(delayed_work_pending(&cp->cp_recv_w)); in rds_conn_path_destroy()
453 WARN_ON(delayed_work_pending(&cp->cp_conn_w)); in rds_conn_path_destroy()
454 WARN_ON(work_pending(&cp->cp_down_w)); in rds_conn_path_destroy()
456 cp->cp_conn->c_trans->conn_free(cp->cp_transport_data); in rds_conn_path_destroy()
470 struct rds_conn_path *cp; in rds_conn_destroy() local
485 cp = &conn->c_path[i]; in rds_conn_destroy()
486 rds_conn_path_destroy(cp); in rds_conn_destroy()
487 BUG_ON(!list_empty(&cp->cp_retrans)); in rds_conn_destroy()
543 struct rds_conn_path *cp; in rds_conn_message_info_cmn() local
553 cp = &conn->c_path[j]; in rds_conn_message_info_cmn()
555 list = &cp->cp_send_queue; in rds_conn_message_info_cmn()
557 list = &cp->cp_retrans; in rds_conn_message_info_cmn()
559 spin_lock_irqsave(&cp->cp_lock, flags); in rds_conn_message_info_cmn()
572 spin_unlock_irqrestore(&cp->cp_lock, flags); in rds_conn_message_info_cmn()
694 struct rds_conn_path *cp; in rds_walk_conn_path_info() local
704 cp = conn->c_path; in rds_walk_conn_path_info()
707 if (!visitor(cp, buffer)) in rds_walk_conn_path_info()
724 static int rds_conn_info_visitor(struct rds_conn_path *cp, void *buffer) in rds_conn_info_visitor() argument
727 struct rds_connection *conn = cp->cp_conn; in rds_conn_info_visitor()
732 cinfo->next_tx_seq = cp->cp_next_tx_seq; in rds_conn_info_visitor()
733 cinfo->next_rx_seq = cp->cp_next_rx_seq; in rds_conn_info_visitor()
740 rds_conn_info_set(cinfo->flags, test_bit(RDS_IN_XMIT, &cp->cp_flags), in rds_conn_info_visitor()
744 atomic_read(&cp->cp_state) == RDS_CONN_CONNECTING, in rds_conn_info_visitor()
747 atomic_read(&cp->cp_state) == RDS_CONN_UP, in rds_conn_info_visitor()
753 static int rds6_conn_info_visitor(struct rds_conn_path *cp, void *buffer) in rds6_conn_info_visitor() argument
756 struct rds_connection *conn = cp->cp_conn; in rds6_conn_info_visitor()
758 cinfo6->next_tx_seq = cp->cp_next_tx_seq; in rds6_conn_info_visitor()
759 cinfo6->next_rx_seq = cp->cp_next_rx_seq; in rds6_conn_info_visitor()
766 rds_conn_info_set(cinfo6->flags, test_bit(RDS_IN_XMIT, &cp->cp_flags), in rds6_conn_info_visitor()
770 atomic_read(&cp->cp_state) == RDS_CONN_CONNECTING, in rds6_conn_info_visitor()
773 atomic_read(&cp->cp_state) == RDS_CONN_UP, in rds6_conn_info_visitor()
865 void rds_conn_path_drop(struct rds_conn_path *cp, bool destroy) in rds_conn_path_drop() argument
867 atomic_set(&cp->cp_state, RDS_CONN_ERROR); in rds_conn_path_drop()
870 if (!destroy && rds_destroy_pending(cp->cp_conn)) { in rds_conn_path_drop()
874 queue_work(rds_wq, &cp->cp_down_w); in rds_conn_path_drop()
890 void rds_conn_path_connect_if_down(struct rds_conn_path *cp) in rds_conn_path_connect_if_down() argument
893 if (rds_destroy_pending(cp->cp_conn)) { in rds_conn_path_connect_if_down()
897 if (rds_conn_path_state(cp) == RDS_CONN_DOWN && in rds_conn_path_connect_if_down()
898 !test_and_set_bit(RDS_RECONNECT_PENDING, &cp->cp_flags)) in rds_conn_path_connect_if_down()
899 queue_delayed_work(rds_wq, &cp->cp_conn_w, 0); in rds_conn_path_connect_if_down()
912 __rds_conn_path_error(struct rds_conn_path *cp, const char *fmt, ...) in __rds_conn_path_error() argument
920 rds_conn_path_drop(cp, false); in __rds_conn_path_error()