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()
318 struct rds_conn_path *cp; in __rds_conn_create() local
322 cp = &conn->c_path[i]; in __rds_conn_create()
327 if (cp->cp_transport_data) in __rds_conn_create()
328 trans->conn_free(cp->cp_transport_data); in __rds_conn_create()
368 void rds_conn_shutdown(struct rds_conn_path *cp) in rds_conn_shutdown() argument
370 struct rds_connection *conn = cp->cp_conn; in rds_conn_shutdown()
373 if (!rds_conn_path_transition(cp, RDS_CONN_DOWN, RDS_CONN_DOWN)) { in rds_conn_shutdown()
381 mutex_lock(&cp->cp_cm_lock); in rds_conn_shutdown()
382 if (!rds_conn_path_transition(cp, RDS_CONN_UP, in rds_conn_shutdown()
384 !rds_conn_path_transition(cp, RDS_CONN_ERROR, in rds_conn_shutdown()
386 rds_conn_path_error(cp, in rds_conn_shutdown()
388 atomic_read(&cp->cp_state)); in rds_conn_shutdown()
389 mutex_unlock(&cp->cp_cm_lock); in rds_conn_shutdown()
392 mutex_unlock(&cp->cp_cm_lock); in rds_conn_shutdown()
394 wait_event(cp->cp_waitq, in rds_conn_shutdown()
395 !test_bit(RDS_IN_XMIT, &cp->cp_flags)); in rds_conn_shutdown()
396 wait_event(cp->cp_waitq, in rds_conn_shutdown()
397 !test_bit(RDS_RECV_REFILL, &cp->cp_flags)); in rds_conn_shutdown()
399 conn->c_trans->conn_path_shutdown(cp); in rds_conn_shutdown()
400 rds_conn_path_reset(cp); in rds_conn_shutdown()
402 if (!rds_conn_path_transition(cp, RDS_CONN_DISCONNECTING, in rds_conn_shutdown()
404 !rds_conn_path_transition(cp, RDS_CONN_ERROR, in rds_conn_shutdown()
417 rds_conn_path_error(cp, "%s: failed to transition " in rds_conn_shutdown()
420 atomic_read(&cp->cp_state)); in rds_conn_shutdown()
429 cancel_delayed_work_sync(&cp->cp_conn_w); in rds_conn_shutdown()
433 rds_queue_reconnect(cp); in rds_conn_shutdown()
442 static void rds_conn_path_destroy(struct rds_conn_path *cp) in rds_conn_path_destroy() argument
446 if (!cp->cp_transport_data) in rds_conn_path_destroy()
450 cancel_delayed_work_sync(&cp->cp_send_w); in rds_conn_path_destroy()
451 cancel_delayed_work_sync(&cp->cp_recv_w); in rds_conn_path_destroy()
453 rds_conn_path_drop(cp, true); in rds_conn_path_destroy()
454 flush_work(&cp->cp_down_w); in rds_conn_path_destroy()
458 &cp->cp_send_queue, in rds_conn_path_destroy()
464 if (cp->cp_xmit_rm) in rds_conn_path_destroy()
465 rds_message_put(cp->cp_xmit_rm); in rds_conn_path_destroy()
467 WARN_ON(delayed_work_pending(&cp->cp_send_w)); in rds_conn_path_destroy()
468 WARN_ON(delayed_work_pending(&cp->cp_recv_w)); in rds_conn_path_destroy()
469 WARN_ON(delayed_work_pending(&cp->cp_conn_w)); in rds_conn_path_destroy()
470 WARN_ON(work_pending(&cp->cp_down_w)); in rds_conn_path_destroy()
472 cp->cp_conn->c_trans->conn_free(cp->cp_transport_data); in rds_conn_path_destroy()
486 struct rds_conn_path *cp; in rds_conn_destroy() local
501 cp = &conn->c_path[i]; in rds_conn_destroy()
502 rds_conn_path_destroy(cp); in rds_conn_destroy()
503 BUG_ON(!list_empty(&cp->cp_retrans)); in rds_conn_destroy()
559 struct rds_conn_path *cp; in rds_conn_message_info_cmn() local
569 cp = &conn->c_path[j]; in rds_conn_message_info_cmn()
571 list = &cp->cp_send_queue; in rds_conn_message_info_cmn()
573 list = &cp->cp_retrans; in rds_conn_message_info_cmn()
575 spin_lock_irqsave(&cp->cp_lock, flags); in rds_conn_message_info_cmn()
588 spin_unlock_irqrestore(&cp->cp_lock, flags); in rds_conn_message_info_cmn()
710 struct rds_conn_path *cp; in rds_walk_conn_path_info() local
720 cp = conn->c_path; in rds_walk_conn_path_info()
723 if (!visitor(cp, buffer)) in rds_walk_conn_path_info()
740 static int rds_conn_info_visitor(struct rds_conn_path *cp, void *buffer) in rds_conn_info_visitor() argument
743 struct rds_connection *conn = cp->cp_conn; in rds_conn_info_visitor()
748 cinfo->next_tx_seq = cp->cp_next_tx_seq; in rds_conn_info_visitor()
749 cinfo->next_rx_seq = cp->cp_next_rx_seq; in rds_conn_info_visitor()
756 rds_conn_info_set(cinfo->flags, test_bit(RDS_IN_XMIT, &cp->cp_flags), in rds_conn_info_visitor()
760 atomic_read(&cp->cp_state) == RDS_CONN_CONNECTING, in rds_conn_info_visitor()
763 atomic_read(&cp->cp_state) == RDS_CONN_UP, in rds_conn_info_visitor()
769 static int rds6_conn_info_visitor(struct rds_conn_path *cp, void *buffer) in rds6_conn_info_visitor() argument
772 struct rds_connection *conn = cp->cp_conn; in rds6_conn_info_visitor()
774 cinfo6->next_tx_seq = cp->cp_next_tx_seq; in rds6_conn_info_visitor()
775 cinfo6->next_rx_seq = cp->cp_next_rx_seq; in rds6_conn_info_visitor()
781 rds_conn_info_set(cinfo6->flags, test_bit(RDS_IN_XMIT, &cp->cp_flags), in rds6_conn_info_visitor()
785 atomic_read(&cp->cp_state) == RDS_CONN_CONNECTING, in rds6_conn_info_visitor()
788 atomic_read(&cp->cp_state) == RDS_CONN_UP, in rds6_conn_info_visitor()
878 void rds_conn_path_drop(struct rds_conn_path *cp, bool destroy) in rds_conn_path_drop() argument
880 atomic_set(&cp->cp_state, RDS_CONN_ERROR); in rds_conn_path_drop()
883 if (!destroy && rds_destroy_pending(cp->cp_conn)) { in rds_conn_path_drop()
887 queue_work(rds_wq, &cp->cp_down_w); in rds_conn_path_drop()
903 void rds_conn_path_connect_if_down(struct rds_conn_path *cp) in rds_conn_path_connect_if_down() argument
906 if (rds_destroy_pending(cp->cp_conn)) { in rds_conn_path_connect_if_down()
910 if (rds_conn_path_state(cp) == RDS_CONN_DOWN && in rds_conn_path_connect_if_down()
911 !test_and_set_bit(RDS_RECONNECT_PENDING, &cp->cp_flags)) in rds_conn_path_connect_if_down()
912 queue_delayed_work(rds_wq, &cp->cp_conn_w, 0); in rds_conn_path_connect_if_down()
936 __rds_conn_path_error(struct rds_conn_path *cp, const char *fmt, ...) in __rds_conn_path_error() argument
944 rds_conn_path_drop(cp, false); in __rds_conn_path_error()