Lines Matching refs:cp

113 static void rds_conn_path_reset(struct rds_conn_path *cp)
115 struct rds_connection *conn = cp->cp_conn;
121 rds_send_path_reset(cp);
122 cp->cp_flags = 0;
131 struct rds_conn_path *cp, bool is_outgoing)
133 spin_lock_init(&cp->cp_lock);
134 cp->cp_next_tx_seq = 1;
135 init_waitqueue_head(&cp->cp_waitq);
136 INIT_LIST_HEAD(&cp->cp_send_queue);
137 INIT_LIST_HEAD(&cp->cp_retrans);
139 cp->cp_conn = conn;
140 atomic_set(&cp->cp_state, RDS_CONN_DOWN);
141 cp->cp_send_gen = 0;
142 cp->cp_reconnect_jiffies = 0;
143 cp->cp_conn->c_proposed_version = RDS_PROTOCOL_VERSION;
144 INIT_DELAYED_WORK(&cp->cp_send_w, rds_send_worker);
145 INIT_DELAYED_WORK(&cp->cp_recv_w, rds_recv_worker);
146 INIT_DELAYED_WORK(&cp->cp_conn_w, rds_connect_worker);
147 INIT_WORK(&cp->cp_down_w, rds_shutdown_worker);
148 mutex_init(&cp->cp_cm_lock);
149 cp->cp_flags = 0;
317 struct rds_conn_path *cp;
321 cp = &conn->c_path[i];
326 if (cp->cp_transport_data)
327 trans->conn_free(cp->cp_transport_data);
367 void rds_conn_shutdown(struct rds_conn_path *cp)
369 struct rds_connection *conn = cp->cp_conn;
372 if (!rds_conn_path_transition(cp, RDS_CONN_DOWN, RDS_CONN_DOWN)) {
380 mutex_lock(&cp->cp_cm_lock);
381 if (!rds_conn_path_transition(cp, RDS_CONN_UP,
383 !rds_conn_path_transition(cp, RDS_CONN_ERROR,
385 rds_conn_path_error(cp,
387 atomic_read(&cp->cp_state));
388 mutex_unlock(&cp->cp_cm_lock);
391 mutex_unlock(&cp->cp_cm_lock);
393 wait_event(cp->cp_waitq,
394 !test_bit(RDS_IN_XMIT, &cp->cp_flags));
395 wait_event(cp->cp_waitq,
396 !test_bit(RDS_RECV_REFILL, &cp->cp_flags));
398 conn->c_trans->conn_path_shutdown(cp);
399 rds_conn_path_reset(cp);
401 if (!rds_conn_path_transition(cp, RDS_CONN_DISCONNECTING,
403 !rds_conn_path_transition(cp, RDS_CONN_ERROR,
416 rds_conn_path_error(cp, "%s: failed to transition "
419 atomic_read(&cp->cp_state));
428 cancel_delayed_work_sync(&cp->cp_conn_w);
432 rds_queue_reconnect(cp);
441 static void rds_conn_path_destroy(struct rds_conn_path *cp)
445 if (!cp->cp_transport_data)
449 cancel_delayed_work_sync(&cp->cp_send_w);
450 cancel_delayed_work_sync(&cp->cp_recv_w);
452 rds_conn_path_drop(cp, true);
453 flush_work(&cp->cp_down_w);
457 &cp->cp_send_queue,
463 if (cp->cp_xmit_rm)
464 rds_message_put(cp->cp_xmit_rm);
466 WARN_ON(delayed_work_pending(&cp->cp_send_w));
467 WARN_ON(delayed_work_pending(&cp->cp_recv_w));
468 WARN_ON(delayed_work_pending(&cp->cp_conn_w));
469 WARN_ON(work_pending(&cp->cp_down_w));
471 cp->cp_conn->c_trans->conn_free(cp->cp_transport_data);
485 struct rds_conn_path *cp;
500 cp = &conn->c_path[i];
501 rds_conn_path_destroy(cp);
502 BUG_ON(!list_empty(&cp->cp_retrans));
558 struct rds_conn_path *cp;
568 cp = &conn->c_path[j];
570 list = &cp->cp_send_queue;
572 list = &cp->cp_retrans;
574 spin_lock_irqsave(&cp->cp_lock, flags);
587 spin_unlock_irqrestore(&cp->cp_lock, flags);
709 struct rds_conn_path *cp;
719 cp = conn->c_path;
722 if (!visitor(cp, buffer))
739 static int rds_conn_info_visitor(struct rds_conn_path *cp, void *buffer)
742 struct rds_connection *conn = cp->cp_conn;
747 cinfo->next_tx_seq = cp->cp_next_tx_seq;
748 cinfo->next_rx_seq = cp->cp_next_rx_seq;
756 rds_conn_info_set(cinfo->flags, test_bit(RDS_IN_XMIT, &cp->cp_flags),
760 atomic_read(&cp->cp_state) == RDS_CONN_CONNECTING,
763 atomic_read(&cp->cp_state) == RDS_CONN_UP,
769 static int rds6_conn_info_visitor(struct rds_conn_path *cp, void *buffer)
772 struct rds_connection *conn = cp->cp_conn;
774 cinfo6->next_tx_seq = cp->cp_next_tx_seq;
775 cinfo6->next_rx_seq = cp->cp_next_rx_seq;
782 rds_conn_info_set(cinfo6->flags, test_bit(RDS_IN_XMIT, &cp->cp_flags),
786 atomic_read(&cp->cp_state) == RDS_CONN_CONNECTING,
789 atomic_read(&cp->cp_state) == RDS_CONN_UP,
879 void rds_conn_path_drop(struct rds_conn_path *cp, bool destroy)
881 atomic_set(&cp->cp_state, RDS_CONN_ERROR);
884 if (!destroy && rds_destroy_pending(cp->cp_conn)) {
888 queue_work(rds_wq, &cp->cp_down_w);
904 void rds_conn_path_connect_if_down(struct rds_conn_path *cp)
907 if (rds_destroy_pending(cp->cp_conn)) {
911 if (rds_conn_path_state(cp) == RDS_CONN_DOWN &&
912 !test_and_set_bit(RDS_RECONNECT_PENDING, &cp->cp_flags))
913 queue_delayed_work(rds_wq, &cp->cp_conn_w, 0);
937 __rds_conn_path_error(struct rds_conn_path *cp, const char *fmt, ...)
945 rds_conn_path_drop(cp, false);