Lines Matching full:cp
114 static void rds_conn_path_reset(struct rds_conn_path *cp)
116 struct rds_connection *conn = cp->cp_conn;
122 rds_send_path_reset(cp);
123 cp->cp_flags = 0;
132 struct rds_conn_path *cp, bool is_outgoing)
134 spin_lock_init(&cp->cp_lock);
135 cp->cp_next_tx_seq = 1;
136 init_waitqueue_head(&cp->cp_waitq);
137 INIT_LIST_HEAD(&cp->cp_send_queue);
138 INIT_LIST_HEAD(&cp->cp_retrans);
140 cp->cp_conn = conn;
141 atomic_set(&cp->cp_state, RDS_CONN_DOWN);
142 cp->cp_send_gen = 0;
143 cp->cp_reconnect_jiffies = 0;
144 cp->cp_conn->c_proposed_version = RDS_PROTOCOL_VERSION;
145 INIT_DELAYED_WORK(&cp->cp_send_w, rds_send_worker);
146 INIT_DELAYED_WORK(&cp->cp_recv_w, rds_recv_worker);
147 INIT_DELAYED_WORK(&cp->cp_conn_w, rds_connect_worker);
148 INIT_WORK(&cp->cp_down_w, rds_shutdown_worker);
149 mutex_init(&cp->cp_cm_lock);
150 cp->cp_flags = 0;
318 struct rds_conn_path *cp;
322 cp = &conn->c_path[i];
327 if (cp->cp_transport_data)
328 trans->conn_free(cp->cp_transport_data);
368 void rds_conn_shutdown(struct rds_conn_path *cp)
370 struct rds_connection *conn = cp->cp_conn;
373 if (!rds_conn_path_transition(cp, RDS_CONN_DOWN, RDS_CONN_DOWN)) {
381 mutex_lock(&cp->cp_cm_lock);
382 if (!rds_conn_path_transition(cp, RDS_CONN_UP,
384 !rds_conn_path_transition(cp, RDS_CONN_ERROR,
386 rds_conn_path_error(cp,
388 atomic_read(&cp->cp_state));
389 mutex_unlock(&cp->cp_cm_lock);
392 mutex_unlock(&cp->cp_cm_lock);
394 wait_event(cp->cp_waitq,
395 !test_bit(RDS_IN_XMIT, &cp->cp_flags));
396 wait_event(cp->cp_waitq,
397 !test_bit(RDS_RECV_REFILL, &cp->cp_flags));
399 conn->c_trans->conn_path_shutdown(cp);
400 rds_conn_path_reset(cp);
402 if (!rds_conn_path_transition(cp, RDS_CONN_DISCONNECTING,
404 !rds_conn_path_transition(cp, RDS_CONN_ERROR,
417 rds_conn_path_error(cp, "%s: failed to transition "
420 atomic_read(&cp->cp_state));
429 cancel_delayed_work_sync(&cp->cp_conn_w);
433 rds_queue_reconnect(cp);
442 static void rds_conn_path_destroy(struct rds_conn_path *cp)
446 if (!cp->cp_transport_data)
450 cancel_delayed_work_sync(&cp->cp_send_w);
451 cancel_delayed_work_sync(&cp->cp_recv_w);
453 rds_conn_path_drop(cp, true);
454 flush_work(&cp->cp_down_w);
458 &cp->cp_send_queue,
464 if (cp->cp_xmit_rm)
465 rds_message_put(cp->cp_xmit_rm);
467 WARN_ON(delayed_work_pending(&cp->cp_send_w));
468 WARN_ON(delayed_work_pending(&cp->cp_recv_w));
469 WARN_ON(delayed_work_pending(&cp->cp_conn_w));
470 WARN_ON(work_pending(&cp->cp_down_w));
472 cp->cp_conn->c_trans->conn_free(cp->cp_transport_data);
486 struct rds_conn_path *cp;
501 cp = &conn->c_path[i];
502 rds_conn_path_destroy(cp);
503 BUG_ON(!list_empty(&cp->cp_retrans));
559 struct rds_conn_path *cp;
569 cp = &conn->c_path[j];
571 list = &cp->cp_send_queue;
573 list = &cp->cp_retrans;
575 spin_lock_irqsave(&cp->cp_lock, flags);
588 spin_unlock_irqrestore(&cp->cp_lock, flags);
710 struct rds_conn_path *cp;
720 cp = conn->c_path;
723 if (!visitor(cp, buffer))
740 static int rds_conn_info_visitor(struct rds_conn_path *cp, void *buffer)
743 struct rds_connection *conn = cp->cp_conn;
748 cinfo->next_tx_seq = cp->cp_next_tx_seq;
749 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;
781 rds_conn_info_set(cinfo6->flags, test_bit(RDS_IN_XMIT, &cp->cp_flags),
785 atomic_read(&cp->cp_state) == RDS_CONN_CONNECTING,
788 atomic_read(&cp->cp_state) == RDS_CONN_UP,
878 void rds_conn_path_drop(struct rds_conn_path *cp, bool destroy)
880 atomic_set(&cp->cp_state, RDS_CONN_ERROR);
883 if (!destroy && rds_destroy_pending(cp->cp_conn)) {
887 queue_work(rds_wq, &cp->cp_down_w);
903 void rds_conn_path_connect_if_down(struct rds_conn_path *cp)
906 if (rds_destroy_pending(cp->cp_conn)) {
910 if (rds_conn_path_state(cp) == RDS_CONN_DOWN &&
911 !test_and_set_bit(RDS_RECONNECT_PENDING, &cp->cp_flags))
912 queue_delayed_work(rds_wq, &cp->cp_conn_w, 0);
936 __rds_conn_path_error(struct rds_conn_path *cp, const char *fmt, ...)
944 rds_conn_path_drop(cp, false);