459
460
461
462 BUG_ON(sc && nn->nn_sc && nn->nn_sc != sc);
463 mlog_bug_on_msg(err && valid, "err %d valid %u\n", err, valid);
464 mlog_bug_on_msg(valid && !sc, "valid %u sc %p\n", valid, sc);
465
466 if (was_valid && !valid && err == 0)
467 err = -ENOTCONN;
468
469 mlog(ML_CONN, "node %u sc: %p -> %p, valid %u -> %u, err %d -> %d\n",
470 o2net_num_from_nn(nn), nn->nn_sc, sc, nn->nn_sc_valid, valid,
471 nn->nn_persistent_error, err);
472
473 nn->nn_sc = sc;
474 nn->nn_sc_valid = valid ? 1 : 0;
475 nn->nn_persistent_error = err;
476
477
478 if (nn->nn_persistent_error || nn->nn_sc_valid)
479 wake_up(&nn->nn_sc_wq);
480
481 if (!was_err && nn->nn_persistent_error) {
482 o2quo_conn_err(o2net_num_from_nn(nn));
483 queue_delayed_work(o2net_wq, &nn->nn_still_up,
484 msecs_to_jiffies(O2NET_QUORUM_DELAY_MS));
485 }
486
487 if (was_valid && !valid) {
488 printk(KERN_INFO "o2net: no longer connected to "
489 SC_NODEF_FMT "\n", SC_NODEF_ARGS(old_sc));
490 o2net_complete_nodes_nsw(nn);
491 }
492
493 if (!was_valid && valid) {
494 o2quo_conn_up(o2net_num_from_nn(nn));
495 cancel_delayed_work(&nn->nn_connect_expired);
496 printk(KERN_INFO "o2net: %s " SC_NODEF_FMT "\n",
497 o2nm_this_node() > sc->sc_node->nd_num ?
498 "connected to" : "accepted connection from",
499 SC_NODEF_ARGS(sc));