Lines Matching refs:cp

114 static void rds_conn_path_reset(struct rds_conn_path *cp)  in rds_conn_path_reset()  argument
116 struct rds_connection *conn = cp->cp_conn; in rds_conn_path_reset()
122 rds_send_path_reset(cp); in rds_conn_path_reset()
123 cp->cp_flags = 0; in rds_conn_path_reset()
132 struct rds_conn_path *cp, bool is_outgoing) in __rds_conn_path_init() argument
134 spin_lock_init(&cp->cp_lock); in __rds_conn_path_init()
135 cp->cp_next_tx_seq = 1; in __rds_conn_path_init()
136 init_waitqueue_head(&cp->cp_waitq); in __rds_conn_path_init()
137 INIT_LIST_HEAD(&cp->cp_send_queue); in __rds_conn_path_init()
138 INIT_LIST_HEAD(&cp->cp_retrans); in __rds_conn_path_init()
140 cp->cp_conn = conn; in __rds_conn_path_init()
141 atomic_set(&cp->cp_state, RDS_CONN_DOWN); in __rds_conn_path_init()
142 cp->cp_send_gen = 0; in __rds_conn_path_init()
143 cp->cp_reconnect_jiffies = 0; in __rds_conn_path_init()
144 cp->cp_conn->c_proposed_version = RDS_PROTOCOL_VERSION; in __rds_conn_path_init()
145 INIT_DELAYED_WORK(&cp->cp_send_w, rds_send_worker); in __rds_conn_path_init()
146 INIT_DELAYED_WORK(&cp->cp_recv_w, rds_recv_worker); in __rds_conn_path_init()
147 INIT_DELAYED_WORK(&cp->cp_conn_w, rds_connect_worker); in __rds_conn_path_init()
148 INIT_WORK(&cp->cp_down_w, rds_shutdown_worker); in __rds_conn_path_init()
149 mutex_init(&cp->cp_cm_lock); in __rds_conn_path_init()
150 cp->cp_flags = 0; in __rds_conn_path_init()
324 struct rds_conn_path *cp; in __rds_conn_create() local
328 cp = &conn->c_path[i]; in __rds_conn_create()
333 if (cp->cp_transport_data) in __rds_conn_create()
334 trans->conn_free(cp->cp_transport_data); in __rds_conn_create()
381 void rds_conn_shutdown(struct rds_conn_path *cp) in rds_conn_shutdown() argument
383 struct rds_connection *conn = cp->cp_conn; in rds_conn_shutdown()
386 if (!rds_conn_path_transition(cp, RDS_CONN_DOWN, RDS_CONN_DOWN)) { in rds_conn_shutdown()
394 mutex_lock(&cp->cp_cm_lock); in rds_conn_shutdown()
395 if (!rds_conn_path_transition(cp, RDS_CONN_UP, in rds_conn_shutdown()
397 !rds_conn_path_transition(cp, RDS_CONN_ERROR, in rds_conn_shutdown()
399 !rds_conn_path_transition(cp, RDS_CONN_RESETTING, in rds_conn_shutdown()
401 rds_conn_path_error(cp, in rds_conn_shutdown()
403 atomic_read(&cp->cp_state)); in rds_conn_shutdown()
404 mutex_unlock(&cp->cp_cm_lock); in rds_conn_shutdown()
407 mutex_unlock(&cp->cp_cm_lock); in rds_conn_shutdown()
409 wait_event(cp->cp_waitq, in rds_conn_shutdown()
410 !test_bit(RDS_IN_XMIT, &cp->cp_flags)); in rds_conn_shutdown()
411 wait_event(cp->cp_waitq, in rds_conn_shutdown()
412 !test_bit(RDS_RECV_REFILL, &cp->cp_flags)); in rds_conn_shutdown()
414 conn->c_trans->conn_path_shutdown(cp); in rds_conn_shutdown()
415 rds_conn_path_reset(cp); in rds_conn_shutdown()
417 if (!rds_conn_path_transition(cp, RDS_CONN_DISCONNECTING, in rds_conn_shutdown()
419 !rds_conn_path_transition(cp, RDS_CONN_ERROR, in rds_conn_shutdown()
432 rds_conn_path_error(cp, "%s: failed to transition " in rds_conn_shutdown()
435 atomic_read(&cp->cp_state)); in rds_conn_shutdown()
444 cancel_delayed_work_sync(&cp->cp_conn_w); in rds_conn_shutdown()
446 clear_bit(RDS_RECONNECT_PENDING, &cp->cp_flags); in rds_conn_shutdown()
451 cp->cp_index == 0) in rds_conn_shutdown()
453 rds_queue_reconnect(cp); in rds_conn_shutdown()
465 static void rds_conn_path_destroy(struct rds_conn_path *cp) in rds_conn_path_destroy() argument
469 if (!cp->cp_transport_data) in rds_conn_path_destroy()
473 cancel_delayed_work_sync(&cp->cp_send_w); in rds_conn_path_destroy()
474 cancel_delayed_work_sync(&cp->cp_recv_w); in rds_conn_path_destroy()
476 rds_conn_path_drop(cp, true); in rds_conn_path_destroy()
477 flush_work(&cp->cp_down_w); in rds_conn_path_destroy()
481 &cp->cp_send_queue, in rds_conn_path_destroy()
487 if (cp->cp_xmit_rm) in rds_conn_path_destroy()
488 rds_message_put(cp->cp_xmit_rm); in rds_conn_path_destroy()
490 WARN_ON(delayed_work_pending(&cp->cp_send_w)); in rds_conn_path_destroy()
491 WARN_ON(delayed_work_pending(&cp->cp_recv_w)); in rds_conn_path_destroy()
492 WARN_ON(delayed_work_pending(&cp->cp_conn_w)); in rds_conn_path_destroy()
493 WARN_ON(work_pending(&cp->cp_down_w)); in rds_conn_path_destroy()
495 if (cp->cp_wq != rds_wq) { in rds_conn_path_destroy()
496 destroy_workqueue(cp->cp_wq); in rds_conn_path_destroy()
497 cp->cp_wq = NULL; in rds_conn_path_destroy()
500 cp->cp_conn->c_trans->conn_free(cp->cp_transport_data); in rds_conn_path_destroy()
514 struct rds_conn_path *cp; in rds_conn_destroy() local
529 cp = &conn->c_path[i]; in rds_conn_destroy()
530 rds_conn_path_destroy(cp); in rds_conn_destroy()
531 BUG_ON(!list_empty(&cp->cp_retrans)); in rds_conn_destroy()
587 struct rds_conn_path *cp; in rds_conn_message_info_cmn() local
597 cp = &conn->c_path[j]; in rds_conn_message_info_cmn()
599 list = &cp->cp_send_queue; in rds_conn_message_info_cmn()
601 list = &cp->cp_retrans; in rds_conn_message_info_cmn()
603 spin_lock_irqsave(&cp->cp_lock, flags); in rds_conn_message_info_cmn()
616 spin_unlock_irqrestore(&cp->cp_lock, flags); in rds_conn_message_info_cmn()
738 struct rds_conn_path *cp; in rds_walk_conn_path_info() local
748 cp = conn->c_path; in rds_walk_conn_path_info()
751 if (!visitor(cp, buffer)) in rds_walk_conn_path_info()
768 static int rds_conn_info_visitor(struct rds_conn_path *cp, void *buffer) in rds_conn_info_visitor() argument
771 struct rds_connection *conn = cp->cp_conn; in rds_conn_info_visitor()
776 cinfo->next_tx_seq = cp->cp_next_tx_seq; in rds_conn_info_visitor()
777 cinfo->next_rx_seq = cp->cp_next_rx_seq; in rds_conn_info_visitor()
784 rds_conn_info_set(cinfo->flags, test_bit(RDS_IN_XMIT, &cp->cp_flags), in rds_conn_info_visitor()
788 atomic_read(&cp->cp_state) == RDS_CONN_CONNECTING, in rds_conn_info_visitor()
791 atomic_read(&cp->cp_state) == RDS_CONN_UP, in rds_conn_info_visitor()
797 static int rds6_conn_info_visitor(struct rds_conn_path *cp, void *buffer) in rds6_conn_info_visitor() argument
800 struct rds_connection *conn = cp->cp_conn; in rds6_conn_info_visitor()
802 cinfo6->next_tx_seq = cp->cp_next_tx_seq; in rds6_conn_info_visitor()
803 cinfo6->next_rx_seq = cp->cp_next_rx_seq; in rds6_conn_info_visitor()
809 rds_conn_info_set(cinfo6->flags, test_bit(RDS_IN_XMIT, &cp->cp_flags), in rds6_conn_info_visitor()
813 atomic_read(&cp->cp_state) == RDS_CONN_CONNECTING, in rds6_conn_info_visitor()
816 atomic_read(&cp->cp_state) == RDS_CONN_UP, in rds6_conn_info_visitor()
906 void rds_conn_path_drop(struct rds_conn_path *cp, bool destroy) in rds_conn_path_drop() argument
908 atomic_set(&cp->cp_state, RDS_CONN_ERROR); in rds_conn_path_drop()
911 if (!destroy && rds_destroy_pending(cp->cp_conn)) { in rds_conn_path_drop()
915 queue_work(cp->cp_wq, &cp->cp_down_w); in rds_conn_path_drop()
931 void rds_conn_path_connect_if_down(struct rds_conn_path *cp) in rds_conn_path_connect_if_down() argument
934 if (rds_destroy_pending(cp->cp_conn)) { in rds_conn_path_connect_if_down()
938 if (rds_conn_path_state(cp) == RDS_CONN_DOWN && in rds_conn_path_connect_if_down()
939 !test_and_set_bit(RDS_RECONNECT_PENDING, &cp->cp_flags)) in rds_conn_path_connect_if_down()
940 queue_delayed_work(cp->cp_wq, &cp->cp_conn_w, 0); in rds_conn_path_connect_if_down()
964 __rds_conn_path_error(struct rds_conn_path *cp, const char *fmt, ...) in __rds_conn_path_error() argument
972 rds_conn_path_drop(cp, false); in __rds_conn_path_error()