Lines Matching refs:nn
297 static u8 o2net_num_from_nn(struct o2net_node *nn) in o2net_num_from_nn() argument
299 BUG_ON(nn == NULL); in o2net_num_from_nn()
300 return nn - o2net_nodes; in o2net_num_from_nn()
305 static int o2net_prep_nsw(struct o2net_node *nn, struct o2net_status_wait *nsw) in o2net_prep_nsw() argument
309 spin_lock(&nn->nn_lock); in o2net_prep_nsw()
310 ret = idr_alloc(&nn->nn_status_idr, nsw, 0, 0, GFP_ATOMIC); in o2net_prep_nsw()
313 list_add_tail(&nsw->ns_node_item, &nn->nn_status_list); in o2net_prep_nsw()
315 spin_unlock(&nn->nn_lock); in o2net_prep_nsw()
325 static void o2net_complete_nsw_locked(struct o2net_node *nn, in o2net_complete_nsw_locked() argument
330 assert_spin_locked(&nn->nn_lock); in o2net_complete_nsw_locked()
336 idr_remove(&nn->nn_status_idr, nsw->ns_id); in o2net_complete_nsw_locked()
341 static void o2net_complete_nsw(struct o2net_node *nn, in o2net_complete_nsw() argument
346 spin_lock(&nn->nn_lock); in o2net_complete_nsw()
351 nsw = idr_find(&nn->nn_status_idr, id); in o2net_complete_nsw()
356 o2net_complete_nsw_locked(nn, nsw, sys_status, status); in o2net_complete_nsw()
359 spin_unlock(&nn->nn_lock); in o2net_complete_nsw()
363 static void o2net_complete_nodes_nsw(struct o2net_node *nn) in o2net_complete_nodes_nsw() argument
368 assert_spin_locked(&nn->nn_lock); in o2net_complete_nodes_nsw()
370 list_for_each_entry_safe(nsw, tmp, &nn->nn_status_list, ns_node_item) { in o2net_complete_nodes_nsw()
371 o2net_complete_nsw_locked(nn, nsw, O2NET_ERR_DIED, 0); in o2net_complete_nodes_nsw()
376 o2net_num_from_nn(nn)); in o2net_complete_nodes_nsw()
379 static int o2net_nsw_completed(struct o2net_node *nn, in o2net_nsw_completed() argument
383 spin_lock(&nn->nn_lock); in o2net_nsw_completed()
385 spin_unlock(&nn->nn_lock); in o2net_nsw_completed()
503 static void o2net_set_nn_state(struct o2net_node *nn, in o2net_set_nn_state() argument
507 int was_valid = nn->nn_sc_valid; in o2net_set_nn_state()
508 int was_err = nn->nn_persistent_error; in o2net_set_nn_state()
509 struct o2net_sock_container *old_sc = nn->nn_sc; in o2net_set_nn_state()
511 assert_spin_locked(&nn->nn_lock); in o2net_set_nn_state()
520 BUG_ON(sc && nn->nn_sc && nn->nn_sc != sc); in o2net_set_nn_state()
528 o2net_num_from_nn(nn), nn->nn_sc, sc, nn->nn_sc_valid, valid, in o2net_set_nn_state()
529 nn->nn_persistent_error, err); in o2net_set_nn_state()
531 nn->nn_sc = sc; in o2net_set_nn_state()
532 nn->nn_sc_valid = valid ? 1 : 0; in o2net_set_nn_state()
533 nn->nn_persistent_error = err; in o2net_set_nn_state()
536 if (nn->nn_persistent_error || nn->nn_sc_valid) in o2net_set_nn_state()
537 wake_up(&nn->nn_sc_wq); in o2net_set_nn_state()
539 if (was_valid && !was_err && nn->nn_persistent_error) { in o2net_set_nn_state()
540 o2quo_conn_err(o2net_num_from_nn(nn)); in o2net_set_nn_state()
541 queue_delayed_work(o2net_wq, &nn->nn_still_up, in o2net_set_nn_state()
549 o2net_complete_nodes_nsw(nn); in o2net_set_nn_state()
553 o2quo_conn_up(o2net_num_from_nn(nn)); in o2net_set_nn_state()
554 cancel_delayed_work(&nn->nn_connect_expired); in o2net_set_nn_state()
569 delay = (nn->nn_last_connect_attempt + in o2net_set_nn_state()
575 queue_delayed_work(o2net_wq, &nn->nn_connect_work, delay); in o2net_set_nn_state()
587 queue_delayed_work(o2net_wq, &nn->nn_connect_expired, delay); in o2net_set_nn_state()
709 static void o2net_ensure_shutdown(struct o2net_node *nn, in o2net_ensure_shutdown() argument
713 spin_lock(&nn->nn_lock); in o2net_ensure_shutdown()
714 if (nn->nn_sc == sc) in o2net_ensure_shutdown()
715 o2net_set_nn_state(nn, NULL, 0, err); in o2net_ensure_shutdown()
716 spin_unlock(&nn->nn_lock); in o2net_ensure_shutdown()
732 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_shutdown_sc() local
748 o2net_ensure_shutdown(nn, sc, 0); in o2net_shutdown_sc()
950 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_sendpage() local
970 o2net_ensure_shutdown(nn, sc, 0); in o2net_sendpage()
986 static int o2net_tx_can_proceed(struct o2net_node *nn, in o2net_tx_can_proceed() argument
992 spin_lock(&nn->nn_lock); in o2net_tx_can_proceed()
993 if (nn->nn_persistent_error) { in o2net_tx_can_proceed()
996 *error = nn->nn_persistent_error; in o2net_tx_can_proceed()
997 } else if (nn->nn_sc_valid) { in o2net_tx_can_proceed()
998 kref_get(&nn->nn_sc->sc_kref); in o2net_tx_can_proceed()
1001 *sc_ret = nn->nn_sc; in o2net_tx_can_proceed()
1004 spin_unlock(&nn->nn_lock); in o2net_tx_can_proceed()
1037 struct o2net_node *nn = o2net_nn_from_num(target_node); in o2net_send_message_vec() local
1073 wait_event(nn->nn_sc_wq, o2net_tx_can_proceed(nn, &sc, &ret)); in o2net_send_message_vec()
1100 ret = o2net_prep_nsw(nn, &nsw); in o2net_send_message_vec()
1123 wait_event(nsw.ns_wq, o2net_nsw_completed(nn, &nsw)); in o2net_send_message_vec()
1142 o2net_complete_nsw(nn, &nsw, 0, 0, 0); in o2net_send_message_vec()
1186 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_process_message() local
1199 o2net_complete_nsw(nn, NULL, in o2net_process_message()
1274 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_check_handshake() local
1284 o2net_ensure_shutdown(nn, sc, -ENOTCONN); in o2net_check_handshake()
1300 o2net_ensure_shutdown(nn, sc, -ENOTCONN); in o2net_check_handshake()
1311 o2net_ensure_shutdown(nn, sc, -ENOTCONN); in o2net_check_handshake()
1322 o2net_ensure_shutdown(nn, sc, -ENOTCONN); in o2net_check_handshake()
1328 spin_lock(&nn->nn_lock); in o2net_check_handshake()
1331 if (nn->nn_sc == sc) { in o2net_check_handshake()
1333 atomic_set(&nn->nn_timeout, 0); in o2net_check_handshake()
1334 o2net_set_nn_state(nn, sc, 1, 0); in o2net_check_handshake()
1336 spin_unlock(&nn->nn_lock); in o2net_check_handshake()
1450 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_rx_until_empty() local
1453 o2net_ensure_shutdown(nn, sc, 0); in o2net_rx_until_empty()
1539 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_idle_timer() local
1555 atomic_set(&nn->nn_timeout, 1); in o2net_idle_timer()
1556 o2quo_conn_err(o2net_num_from_nn(nn)); in o2net_idle_timer()
1557 queue_delayed_work(o2net_wq, &nn->nn_still_up, in o2net_idle_timer()
1576 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_sc_postpone_idle() local
1579 if (atomic_read(&nn->nn_timeout)) { in o2net_sc_postpone_idle()
1580 o2quo_conn_up(o2net_num_from_nn(nn)); in o2net_sc_postpone_idle()
1581 cancel_delayed_work(&nn->nn_still_up); in o2net_sc_postpone_idle()
1582 atomic_set(&nn->nn_timeout, 0); in o2net_sc_postpone_idle()
1597 struct o2net_node *nn = in o2net_start_connect() local
1615 if (o2nm_this_node() <= o2net_num_from_nn(nn)) in o2net_start_connect()
1619 node = o2nm_get_node_by_num(o2net_num_from_nn(nn)); in o2net_start_connect()
1631 spin_lock(&nn->nn_lock); in o2net_start_connect()
1639 timeout = atomic_read(&nn->nn_timeout); in o2net_start_connect()
1640 stop = (nn->nn_sc || in o2net_start_connect()
1641 (nn->nn_persistent_error && in o2net_start_connect()
1642 (nn->nn_persistent_error != -ENOTCONN || timeout == 0))); in o2net_start_connect()
1643 spin_unlock(&nn->nn_lock); in o2net_start_connect()
1647 nn->nn_last_connect_attempt = jiffies; in o2net_start_connect()
1691 spin_lock(&nn->nn_lock); in o2net_start_connect()
1693 o2net_set_nn_state(nn, sc, 0, 0); in o2net_start_connect()
1694 spin_unlock(&nn->nn_lock); in o2net_start_connect()
1713 o2net_ensure_shutdown(nn, sc, 0); in o2net_start_connect()
1728 struct o2net_node *nn = in o2net_connect_expired() local
1731 spin_lock(&nn->nn_lock); in o2net_connect_expired()
1732 if (!nn->nn_sc_valid) { in o2net_connect_expired()
1736 o2net_num_from_nn(nn), in o2net_connect_expired()
1740 o2net_set_nn_state(nn, NULL, 0, 0); in o2net_connect_expired()
1742 spin_unlock(&nn->nn_lock); in o2net_connect_expired()
1747 struct o2net_node *nn = in o2net_still_up() local
1750 o2quo_hb_still_up(o2net_num_from_nn(nn)); in o2net_still_up()
1757 struct o2net_node *nn = o2net_nn_from_num(node->nd_num); in o2net_disconnect_node() local
1760 spin_lock(&nn->nn_lock); in o2net_disconnect_node()
1761 atomic_set(&nn->nn_timeout, 0); in o2net_disconnect_node()
1762 o2net_set_nn_state(nn, NULL, 0, -ENOTCONN); in o2net_disconnect_node()
1763 spin_unlock(&nn->nn_lock); in o2net_disconnect_node()
1766 cancel_delayed_work(&nn->nn_connect_expired); in o2net_disconnect_node()
1767 cancel_delayed_work(&nn->nn_connect_work); in o2net_disconnect_node()
1768 cancel_delayed_work(&nn->nn_still_up); in o2net_disconnect_node()
1790 struct o2net_node *nn = o2net_nn_from_num(node_num); in o2net_hb_node_up_cb() local
1797 nn->nn_last_connect_attempt = jiffies - in o2net_hb_node_up_cb()
1805 spin_lock(&nn->nn_lock); in o2net_hb_node_up_cb()
1806 atomic_set(&nn->nn_timeout, 0); in o2net_hb_node_up_cb()
1807 if (nn->nn_persistent_error) in o2net_hb_node_up_cb()
1808 o2net_set_nn_state(nn, NULL, 0, 0); in o2net_hb_node_up_cb()
1809 spin_unlock(&nn->nn_lock); in o2net_hb_node_up_cb()
1848 struct o2net_node *nn; in o2net_accept_one() local
1929 nn = o2net_nn_from_num(node->nd_num); in o2net_accept_one()
1931 spin_lock(&nn->nn_lock); in o2net_accept_one()
1932 if (nn->nn_sc) in o2net_accept_one()
1936 spin_unlock(&nn->nn_lock); in o2net_accept_one()
1954 spin_lock(&nn->nn_lock); in o2net_accept_one()
1955 atomic_set(&nn->nn_timeout, 0); in o2net_accept_one()
1956 o2net_set_nn_state(nn, sc, 0, 0); in o2net_accept_one()
1957 spin_unlock(&nn->nn_lock); in o2net_accept_one()
2186 struct o2net_node *nn = o2net_nn_from_num(i); in o2net_init() local
2188 atomic_set(&nn->nn_timeout, 0); in o2net_init()
2189 spin_lock_init(&nn->nn_lock); in o2net_init()
2190 INIT_DELAYED_WORK(&nn->nn_connect_work, o2net_start_connect); in o2net_init()
2191 INIT_DELAYED_WORK(&nn->nn_connect_expired, in o2net_init()
2193 INIT_DELAYED_WORK(&nn->nn_still_up, o2net_still_up); in o2net_init()
2195 nn->nn_persistent_error = -ENOTCONN; in o2net_init()
2196 init_waitqueue_head(&nn->nn_sc_wq); in o2net_init()
2197 idr_init(&nn->nn_status_idr); in o2net_init()
2198 INIT_LIST_HEAD(&nn->nn_status_list); in o2net_init()