Lines Matching refs:nn

284 static u8 o2net_num_from_nn(struct o2net_node *nn)
286 BUG_ON(nn == NULL);
287 return nn - o2net_nodes;
292 static int o2net_prep_nsw(struct o2net_node *nn, struct o2net_status_wait *nsw)
296 spin_lock(&nn->nn_lock);
297 ret = idr_alloc(&nn->nn_status_idr, nsw, 0, 0, GFP_ATOMIC);
300 list_add_tail(&nsw->ns_node_item, &nn->nn_status_list);
302 spin_unlock(&nn->nn_lock);
312 static void o2net_complete_nsw_locked(struct o2net_node *nn,
317 assert_spin_locked(&nn->nn_lock);
323 idr_remove(&nn->nn_status_idr, nsw->ns_id);
328 static void o2net_complete_nsw(struct o2net_node *nn,
333 spin_lock(&nn->nn_lock);
338 nsw = idr_find(&nn->nn_status_idr, id);
343 o2net_complete_nsw_locked(nn, nsw, sys_status, status);
346 spin_unlock(&nn->nn_lock);
350 static void o2net_complete_nodes_nsw(struct o2net_node *nn)
355 assert_spin_locked(&nn->nn_lock);
357 list_for_each_entry_safe(nsw, tmp, &nn->nn_status_list, ns_node_item) {
358 o2net_complete_nsw_locked(nn, nsw, O2NET_ERR_DIED, 0);
363 o2net_num_from_nn(nn));
366 static int o2net_nsw_completed(struct o2net_node *nn,
370 spin_lock(&nn->nn_lock);
372 spin_unlock(&nn->nn_lock);
488 static void o2net_set_nn_state(struct o2net_node *nn,
492 int was_valid = nn->nn_sc_valid;
493 int was_err = nn->nn_persistent_error;
494 struct o2net_sock_container *old_sc = nn->nn_sc;
496 assert_spin_locked(&nn->nn_lock);
505 BUG_ON(sc && nn->nn_sc && nn->nn_sc != sc);
513 o2net_num_from_nn(nn), nn->nn_sc, sc, nn->nn_sc_valid, valid,
514 nn->nn_persistent_error, err);
516 nn->nn_sc = sc;
517 nn->nn_sc_valid = valid ? 1 : 0;
518 nn->nn_persistent_error = err;
521 if (nn->nn_persistent_error || nn->nn_sc_valid)
522 wake_up(&nn->nn_sc_wq);
524 if (was_valid && !was_err && nn->nn_persistent_error) {
525 o2quo_conn_err(o2net_num_from_nn(nn));
526 queue_delayed_work(o2net_wq, &nn->nn_still_up,
534 o2net_complete_nodes_nsw(nn);
538 o2quo_conn_up(o2net_num_from_nn(nn));
539 cancel_delayed_work(&nn->nn_connect_expired);
554 delay = (nn->nn_last_connect_attempt +
560 queue_delayed_work(o2net_wq, &nn->nn_connect_work, delay);
572 queue_delayed_work(o2net_wq, &nn->nn_connect_expired, delay);
575 /* keep track of the nn's sc ref for the caller */
691 * with an sc and want to detach it from the nn if someone already hasn't beat
695 static void o2net_ensure_shutdown(struct o2net_node *nn,
699 spin_lock(&nn->nn_lock);
700 if (nn->nn_sc == sc)
701 o2net_set_nn_state(nn, NULL, 0, err);
702 spin_unlock(&nn->nn_lock);
708 * sc detached from the nn. state_change will also trigger this callback
718 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num);
734 o2net_ensure_shutdown(nn, sc, 0);
935 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num);
955 o2net_ensure_shutdown(nn, sc, 0);
971 static int o2net_tx_can_proceed(struct o2net_node *nn,
977 spin_lock(&nn->nn_lock);
978 if (nn->nn_persistent_error) {
981 *error = nn->nn_persistent_error;
982 } else if (nn->nn_sc_valid) {
983 kref_get(&nn->nn_sc->sc_kref);
986 *sc_ret = nn->nn_sc;
989 spin_unlock(&nn->nn_lock);
1022 struct o2net_node *nn = o2net_nn_from_num(target_node);
1058 wait_event(nn->nn_sc_wq, o2net_tx_can_proceed(nn, &sc, &ret));
1085 ret = o2net_prep_nsw(nn, &nsw);
1108 wait_event(nsw.ns_wq, o2net_nsw_completed(nn, &nsw));
1127 o2net_complete_nsw(nn, &nsw, 0, 0, 0);
1171 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num);
1184 o2net_complete_nsw(nn, NULL,
1259 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num);
1269 o2net_ensure_shutdown(nn, sc, -ENOTCONN);
1285 o2net_ensure_shutdown(nn, sc, -ENOTCONN);
1296 o2net_ensure_shutdown(nn, sc, -ENOTCONN);
1307 o2net_ensure_shutdown(nn, sc, -ENOTCONN);
1313 spin_lock(&nn->nn_lock);
1316 if (nn->nn_sc == sc) {
1318 atomic_set(&nn->nn_timeout, 0);
1319 o2net_set_nn_state(nn, sc, 1, 0);
1321 spin_unlock(&nn->nn_lock);
1435 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num);
1438 o2net_ensure_shutdown(nn, sc, 0);
1491 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num);
1507 atomic_set(&nn->nn_timeout, 1);
1508 o2quo_conn_err(o2net_num_from_nn(nn));
1509 queue_delayed_work(o2net_wq, &nn->nn_still_up,
1528 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num);
1531 if (atomic_read(&nn->nn_timeout)) {
1532 o2quo_conn_up(o2net_num_from_nn(nn));
1533 cancel_delayed_work(&nn->nn_still_up);
1534 atomic_set(&nn->nn_timeout, 0);
1542 /* this work func is kicked whenever a path sets the nn state which doesn't
1549 struct o2net_node *nn =
1565 if (o2nm_this_node() <= o2net_num_from_nn(nn))
1569 node = o2nm_get_node_by_num(o2net_num_from_nn(nn));
1577 spin_lock(&nn->nn_lock);
1585 timeout = atomic_read(&nn->nn_timeout);
1586 stop = (nn->nn_sc ||
1587 (nn->nn_persistent_error &&
1588 (nn->nn_persistent_error != -ENOTCONN || timeout == 0)));
1589 spin_unlock(&nn->nn_lock);
1593 nn->nn_last_connect_attempt = jiffies;
1628 spin_lock(&nn->nn_lock);
1629 /* handshake completion will set nn->nn_sc_valid */
1630 o2net_set_nn_state(nn, sc, 0, 0);
1631 spin_unlock(&nn->nn_lock);
1650 o2net_ensure_shutdown(nn, sc, 0);
1665 struct o2net_node *nn =
1668 spin_lock(&nn->nn_lock);
1669 if (!nn->nn_sc_valid) {
1673 o2net_num_from_nn(nn),
1677 o2net_set_nn_state(nn, NULL, 0, 0);
1679 spin_unlock(&nn->nn_lock);
1684 struct o2net_node *nn =
1687 o2quo_hb_still_up(o2net_num_from_nn(nn));
1694 struct o2net_node *nn = o2net_nn_from_num(node->nd_num);
1697 spin_lock(&nn->nn_lock);
1698 atomic_set(&nn->nn_timeout, 0);
1699 o2net_set_nn_state(nn, NULL, 0, -ENOTCONN);
1700 spin_unlock(&nn->nn_lock);
1703 cancel_delayed_work(&nn->nn_connect_expired);
1704 cancel_delayed_work(&nn->nn_connect_work);
1705 cancel_delayed_work(&nn->nn_still_up);
1727 struct o2net_node *nn = o2net_nn_from_num(node_num);
1734 nn->nn_last_connect_attempt = jiffies -
1742 spin_lock(&nn->nn_lock);
1743 atomic_set(&nn->nn_timeout, 0);
1744 if (nn->nn_persistent_error)
1745 o2net_set_nn_state(nn, NULL, 0, 0);
1746 spin_unlock(&nn->nn_lock);
1785 struct o2net_node *nn;
1853 nn = o2net_nn_from_num(node->nd_num);
1855 spin_lock(&nn->nn_lock);
1856 if (nn->nn_sc)
1860 spin_unlock(&nn->nn_lock);
1878 spin_lock(&nn->nn_lock);
1879 atomic_set(&nn->nn_timeout, 0);
1880 o2net_set_nn_state(nn, sc, 0, 0);
1881 spin_unlock(&nn->nn_lock);
2108 struct o2net_node *nn = o2net_nn_from_num(i);
2110 atomic_set(&nn->nn_timeout, 0);
2111 spin_lock_init(&nn->nn_lock);
2112 INIT_DELAYED_WORK(&nn->nn_connect_work, o2net_start_connect);
2113 INIT_DELAYED_WORK(&nn->nn_connect_expired,
2115 INIT_DELAYED_WORK(&nn->nn_still_up, o2net_still_up);
2117 nn->nn_persistent_error = -ENOTCONN;
2118 init_waitqueue_head(&nn->nn_sc_wq);
2119 idr_init(&nn->nn_status_idr);
2120 INIT_LIST_HEAD(&nn->nn_status_list);