Lines Matching refs:sc

77 #define SC_NODEF_ARGS(sc) sc->sc_node->nd_name, sc->sc_node->nd_num,	\  argument
78 &sc->sc_node->nd_ipv4_address, \
79 ntohs(sc->sc_node->nd_ipv4_port)
96 #define sclog(sc, fmt, args...) do { \ argument
97 typeof(sc) __sc = (sc); \
143 static void o2net_sc_postpone_idle(struct o2net_sock_container *sc);
144 static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc);
173 struct o2net_sock_container *sc) in o2net_set_nst_sock_container() argument
175 nst->st_sc = sc; in o2net_set_nst_sock_container()
184 static inline void o2net_set_sock_timer(struct o2net_sock_container *sc) in o2net_set_sock_timer() argument
186 sc->sc_tv_timer = ktime_get(); in o2net_set_sock_timer()
189 static inline void o2net_set_data_ready_time(struct o2net_sock_container *sc) in o2net_set_data_ready_time() argument
191 sc->sc_tv_data_ready = ktime_get(); in o2net_set_data_ready_time()
194 static inline void o2net_set_advance_start_time(struct o2net_sock_container *sc) in o2net_set_advance_start_time() argument
196 sc->sc_tv_advance_start = ktime_get(); in o2net_set_advance_start_time()
199 static inline void o2net_set_advance_stop_time(struct o2net_sock_container *sc) in o2net_set_advance_stop_time() argument
201 sc->sc_tv_advance_stop = ktime_get(); in o2net_set_advance_stop_time()
204 static inline void o2net_set_func_start_time(struct o2net_sock_container *sc) in o2net_set_func_start_time() argument
206 sc->sc_tv_func_start = ktime_get(); in o2net_set_func_start_time()
209 static inline void o2net_set_func_stop_time(struct o2net_sock_container *sc) in o2net_set_func_stop_time() argument
211 sc->sc_tv_func_stop = ktime_get(); in o2net_set_func_stop_time()
230 static ktime_t o2net_get_func_run_time(struct o2net_sock_container *sc) in o2net_get_func_run_time() argument
232 return ktime_sub(sc->sc_tv_func_stop, sc->sc_tv_func_start); in o2net_get_func_run_time()
236 struct o2net_sock_container *sc) in o2net_update_send_stats() argument
238 sc->sc_tv_status_total = ktime_add(sc->sc_tv_status_total, in o2net_update_send_stats()
241 sc->sc_tv_send_total = ktime_add(sc->sc_tv_send_total, in o2net_update_send_stats()
244 sc->sc_tv_acquiry_total = ktime_add(sc->sc_tv_acquiry_total, in o2net_update_send_stats()
247 sc->sc_send_count++; in o2net_update_send_stats()
250 static void o2net_update_recv_stats(struct o2net_sock_container *sc) in o2net_update_recv_stats() argument
252 sc->sc_tv_process_total = ktime_add(sc->sc_tv_process_total, in o2net_update_recv_stats()
253 o2net_get_func_run_time(sc)); in o2net_update_recv_stats()
254 sc->sc_recv_count++; in o2net_update_recv_stats()
261 # define o2net_update_recv_stats(sc) argument
393 struct o2net_sock_container *sc = container_of(kref, in sc_kref_release() local
395 BUG_ON(timer_pending(&sc->sc_idle_timeout)); in sc_kref_release()
397 sclog(sc, "releasing\n"); in sc_kref_release()
399 if (sc->sc_sock) { in sc_kref_release()
400 sock_release(sc->sc_sock); in sc_kref_release()
401 sc->sc_sock = NULL; in sc_kref_release()
404 o2nm_undepend_item(&sc->sc_node->nd_item); in sc_kref_release()
405 o2nm_node_put(sc->sc_node); in sc_kref_release()
406 sc->sc_node = NULL; in sc_kref_release()
408 o2net_debug_del_sc(sc); in sc_kref_release()
410 if (sc->sc_page) in sc_kref_release()
411 __free_page(sc->sc_page); in sc_kref_release()
412 kfree(sc); in sc_kref_release()
415 static void sc_put(struct o2net_sock_container *sc) in sc_put() argument
417 sclog(sc, "put\n"); in sc_put()
418 kref_put(&sc->sc_kref, sc_kref_release); in sc_put()
420 static void sc_get(struct o2net_sock_container *sc) in sc_get() argument
422 sclog(sc, "get\n"); in sc_get()
423 kref_get(&sc->sc_kref); in sc_get()
427 struct o2net_sock_container *sc, *ret = NULL; in sc_alloc() local
432 sc = kzalloc(sizeof(*sc), GFP_NOFS); in sc_alloc()
433 if (sc == NULL || page == NULL) in sc_alloc()
436 kref_init(&sc->sc_kref); in sc_alloc()
438 sc->sc_node = node; in sc_alloc()
447 INIT_WORK(&sc->sc_connect_work, o2net_sc_connect_completed); in sc_alloc()
448 INIT_WORK(&sc->sc_rx_work, o2net_rx_until_empty); in sc_alloc()
449 INIT_WORK(&sc->sc_shutdown_work, o2net_shutdown_sc); in sc_alloc()
450 INIT_DELAYED_WORK(&sc->sc_keepalive_work, o2net_sc_send_keep_req); in sc_alloc()
452 init_timer(&sc->sc_idle_timeout); in sc_alloc()
453 sc->sc_idle_timeout.function = o2net_idle_timer; in sc_alloc()
454 sc->sc_idle_timeout.data = (unsigned long)sc; in sc_alloc()
456 sclog(sc, "alloced\n"); in sc_alloc()
458 ret = sc; in sc_alloc()
459 sc->sc_page = page; in sc_alloc()
460 o2net_debug_add_sc(sc); in sc_alloc()
461 sc = NULL; in sc_alloc()
467 kfree(sc); in sc_alloc()
474 static void o2net_sc_queue_work(struct o2net_sock_container *sc, in o2net_sc_queue_work() argument
477 sc_get(sc); in o2net_sc_queue_work()
479 sc_put(sc); in o2net_sc_queue_work()
481 static void o2net_sc_queue_delayed_work(struct o2net_sock_container *sc, in o2net_sc_queue_delayed_work() argument
485 sc_get(sc); in o2net_sc_queue_delayed_work()
487 sc_put(sc); in o2net_sc_queue_delayed_work()
489 static void o2net_sc_cancel_delayed_work(struct o2net_sock_container *sc, in o2net_sc_cancel_delayed_work() argument
493 sc_put(sc); in o2net_sc_cancel_delayed_work()
504 struct o2net_sock_container *sc, in o2net_set_nn_state() argument
513 if (old_sc && !sc) in o2net_set_nn_state()
515 else if (!old_sc && sc) in o2net_set_nn_state()
520 BUG_ON(sc && nn->nn_sc && nn->nn_sc != sc); in o2net_set_nn_state()
522 mlog_bug_on_msg(valid && !sc, "valid %u sc %p\n", valid, 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()
531 nn->nn_sc = sc; in o2net_set_nn_state()
556 o2nm_this_node() > sc->sc_node->nd_num ? in o2net_set_nn_state()
558 SC_NODEF_ARGS(sc)); in o2net_set_nn_state()
591 if ((old_sc == NULL) && sc) in o2net_set_nn_state()
592 sc_get(sc); in o2net_set_nn_state()
593 if (old_sc && (old_sc != sc)) { in o2net_set_nn_state()
606 struct o2net_sock_container *sc = sk->sk_user_data; in o2net_data_ready() local
607 sclog(sc, "data_ready hit\n"); in o2net_data_ready()
608 o2net_set_data_ready_time(sc); in o2net_data_ready()
609 o2net_sc_queue_work(sc, &sc->sc_rx_work); in o2net_data_ready()
610 ready = sc->sc_data_ready; in o2net_data_ready()
623 struct o2net_sock_container *sc; in o2net_state_change() local
626 sc = sk->sk_user_data; in o2net_state_change()
627 if (sc == NULL) { in o2net_state_change()
632 sclog(sc, "state_change to %d\n", sk->sk_state); in o2net_state_change()
634 state_change = sc->sc_state_change; in o2net_state_change()
642 o2net_sc_queue_work(sc, &sc->sc_connect_work); in o2net_state_change()
647 SC_NODEF_ARGS(sc), sk->sk_state); in o2net_state_change()
648 o2net_sc_queue_work(sc, &sc->sc_shutdown_work); in o2net_state_change()
662 struct o2net_sock_container *sc) in o2net_register_callbacks() argument
673 sk->sk_user_data = sc; in o2net_register_callbacks()
674 sc_get(sc); in o2net_register_callbacks()
676 sc->sc_data_ready = sk->sk_data_ready; in o2net_register_callbacks()
677 sc->sc_state_change = sk->sk_state_change; in o2net_register_callbacks()
681 mutex_init(&sc->sc_send_lock); in o2net_register_callbacks()
687 struct o2net_sock_container *sc) in o2net_unregister_callbacks() argument
692 if (sk->sk_user_data == sc) { in o2net_unregister_callbacks()
695 sk->sk_data_ready = sc->sc_data_ready; in o2net_unregister_callbacks()
696 sk->sk_state_change = sc->sc_state_change; in o2net_unregister_callbacks()
710 struct o2net_sock_container *sc, in o2net_ensure_shutdown() argument
714 if (nn->nn_sc == sc) in o2net_ensure_shutdown()
729 struct o2net_sock_container *sc = in o2net_shutdown_sc() local
732 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_shutdown_sc()
734 sclog(sc, "shutting down\n"); in o2net_shutdown_sc()
737 if (o2net_unregister_callbacks(sc->sc_sock->sk, sc)) { in o2net_shutdown_sc()
740 del_timer_sync(&sc->sc_idle_timeout); in o2net_shutdown_sc()
741 o2net_sc_cancel_delayed_work(sc, &sc->sc_keepalive_work); in o2net_shutdown_sc()
742 sc_put(sc); in o2net_shutdown_sc()
743 kernel_sock_shutdown(sc->sc_sock, SHUT_RDWR); in o2net_shutdown_sc()
748 o2net_ensure_shutdown(nn, sc, 0); in o2net_shutdown_sc()
749 sc_put(sc); in o2net_shutdown_sc()
946 static void o2net_sendpage(struct o2net_sock_container *sc, in o2net_sendpage() argument
950 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_sendpage()
954 mutex_lock(&sc->sc_send_lock); in o2net_sendpage()
955 ret = sc->sc_sock->ops->sendpage(sc->sc_sock, in o2net_sendpage()
959 mutex_unlock(&sc->sc_send_lock); in o2net_sendpage()
964 " returned EAGAIN\n", size, SC_NODEF_ARGS(sc)); in o2net_sendpage()
969 " failed with %zd\n", size, SC_NODEF_ARGS(sc), ret); in o2net_sendpage()
970 o2net_ensure_shutdown(nn, sc, 0); in o2net_sendpage()
1012 struct o2net_sock_container *sc; in o2net_fill_node_map() local
1019 if (!o2net_tx_can_proceed(o2net_nn_from_num(node), &sc, &ret)) in o2net_fill_node_map()
1023 sc_put(sc); in o2net_fill_node_map()
1036 struct o2net_sock_container *sc = NULL; 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()
1077 o2net_set_nst_sock_container(&nst, sc); in o2net_send_message_vec()
1111 mutex_lock(&sc->sc_send_lock); in o2net_send_message_vec()
1112 ret = o2net_send_tcp_msg(sc->sc_sock, vec, veclen, in o2net_send_message_vec()
1114 mutex_unlock(&sc->sc_send_lock); in o2net_send_message_vec()
1125 o2net_update_send_stats(&nst, sc); in o2net_send_message_vec()
1138 if (sc) in o2net_send_message_vec()
1139 sc_put(sc); in o2net_send_message_vec()
1183 static int o2net_process_message(struct o2net_sock_container *sc, in o2net_process_message() argument
1186 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_process_message()
1194 o2net_sc_postpone_idle(sc); in o2net_process_message()
1205 o2net_sendpage(sc, o2net_keep_resp, in o2net_process_message()
1238 o2net_set_func_start_time(sc); in o2net_process_message()
1239 sc->sc_msg_key = be32_to_cpu(hdr->key); in o2net_process_message()
1240 sc->sc_msg_type = be16_to_cpu(hdr->msg_type); in o2net_process_message()
1244 o2net_set_func_stop_time(sc); in o2net_process_message()
1246 o2net_update_recv_stats(sc); in o2net_process_message()
1250 mutex_lock(&sc->sc_send_lock); in o2net_process_message()
1251 ret = o2net_send_status_magic(sc->sc_sock, hdr, syserr, in o2net_process_message()
1253 mutex_unlock(&sc->sc_send_lock); in o2net_process_message()
1271 static int o2net_check_handshake(struct o2net_sock_container *sc) in o2net_check_handshake() argument
1273 struct o2net_handshake *hand = page_address(sc->sc_page); in o2net_check_handshake()
1274 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_check_handshake()
1279 "Disconnecting.\n", SC_NODEF_ARGS(sc), in o2net_check_handshake()
1284 o2net_ensure_shutdown(nn, sc, -ENOTCONN); in o2net_check_handshake()
1297 "Disconnecting.\n", SC_NODEF_ARGS(sc), in o2net_check_handshake()
1300 o2net_ensure_shutdown(nn, sc, -ENOTCONN); in o2net_check_handshake()
1308 "Disconnecting.\n", SC_NODEF_ARGS(sc), in o2net_check_handshake()
1311 o2net_ensure_shutdown(nn, sc, -ENOTCONN); in o2net_check_handshake()
1319 "Disconnecting.\n", SC_NODEF_ARGS(sc), in o2net_check_handshake()
1322 o2net_ensure_shutdown(nn, sc, -ENOTCONN); in o2net_check_handshake()
1326 sc->sc_handshake_ok = 1; in o2net_check_handshake()
1331 if (nn->nn_sc == sc) { in o2net_check_handshake()
1332 o2net_sc_reset_idle_timer(sc); in o2net_check_handshake()
1334 o2net_set_nn_state(nn, sc, 1, 0); in o2net_check_handshake()
1339 sc->sc_page_off -= sizeof(struct o2net_handshake); in o2net_check_handshake()
1340 if (sc->sc_page_off) in o2net_check_handshake()
1341 memmove(hand, hand + 1, sc->sc_page_off); in o2net_check_handshake()
1349 static int o2net_advance_rx(struct o2net_sock_container *sc) in o2net_advance_rx() argument
1356 sclog(sc, "receiving\n"); in o2net_advance_rx()
1357 o2net_set_advance_start_time(sc); in o2net_advance_rx()
1359 if (unlikely(sc->sc_handshake_ok == 0)) { in o2net_advance_rx()
1360 if(sc->sc_page_off < sizeof(struct o2net_handshake)) { in o2net_advance_rx()
1361 data = page_address(sc->sc_page) + sc->sc_page_off; in o2net_advance_rx()
1362 datalen = sizeof(struct o2net_handshake) - sc->sc_page_off; in o2net_advance_rx()
1363 ret = o2net_recv_tcp_msg(sc->sc_sock, data, datalen); in o2net_advance_rx()
1365 sc->sc_page_off += ret; in o2net_advance_rx()
1368 if (sc->sc_page_off == sizeof(struct o2net_handshake)) { in o2net_advance_rx()
1369 o2net_check_handshake(sc); in o2net_advance_rx()
1370 if (unlikely(sc->sc_handshake_ok == 0)) in o2net_advance_rx()
1377 if (sc->sc_page_off < sizeof(struct o2net_msg)) { in o2net_advance_rx()
1378 data = page_address(sc->sc_page) + sc->sc_page_off; in o2net_advance_rx()
1379 datalen = sizeof(struct o2net_msg) - sc->sc_page_off; in o2net_advance_rx()
1380 ret = o2net_recv_tcp_msg(sc->sc_sock, data, datalen); in o2net_advance_rx()
1382 sc->sc_page_off += ret; in o2net_advance_rx()
1386 if (sc->sc_page_off == sizeof(struct o2net_msg)) { in o2net_advance_rx()
1387 hdr = page_address(sc->sc_page); in o2net_advance_rx()
1397 if (sc->sc_page_off < sizeof(struct o2net_msg)) { in o2net_advance_rx()
1403 hdr = page_address(sc->sc_page); in o2net_advance_rx()
1405 msglog(hdr, "at page_off %zu\n", sc->sc_page_off); in o2net_advance_rx()
1408 if (sc->sc_page_off - sizeof(struct o2net_msg) < be16_to_cpu(hdr->data_len)) { in o2net_advance_rx()
1410 data = page_address(sc->sc_page) + sc->sc_page_off; in o2net_advance_rx()
1412 sc->sc_page_off; in o2net_advance_rx()
1413 ret = o2net_recv_tcp_msg(sc->sc_sock, data, datalen); in o2net_advance_rx()
1415 sc->sc_page_off += ret; in o2net_advance_rx()
1420 if (sc->sc_page_off - sizeof(struct o2net_msg) == be16_to_cpu(hdr->data_len)) { in o2net_advance_rx()
1424 ret = o2net_process_message(sc, hdr); in o2net_advance_rx()
1427 sc->sc_page_off = 0; in o2net_advance_rx()
1431 sclog(sc, "ret = %d\n", ret); in o2net_advance_rx()
1432 o2net_set_advance_stop_time(sc); in o2net_advance_rx()
1441 struct o2net_sock_container *sc = in o2net_rx_until_empty() local
1446 ret = o2net_advance_rx(sc); in o2net_rx_until_empty()
1450 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_rx_until_empty()
1451 sclog(sc, "saw error %d, closing\n", ret); in o2net_rx_until_empty()
1453 o2net_ensure_shutdown(nn, sc, 0); in o2net_rx_until_empty()
1456 sc_put(sc); in o2net_rx_until_empty()
1509 struct o2net_sock_container *sc = in o2net_sc_connect_completed() local
1518 o2net_sendpage(sc, o2net_hand, sizeof(*o2net_hand)); in o2net_sc_connect_completed()
1519 sc_put(sc); in o2net_sc_connect_completed()
1525 struct o2net_sock_container *sc = in o2net_sc_send_keep_req() local
1529 o2net_sendpage(sc, o2net_keep_req, sizeof(*o2net_keep_req)); in o2net_sc_send_keep_req()
1530 sc_put(sc); in o2net_sc_send_keep_req()
1538 struct o2net_sock_container *sc = (struct o2net_sock_container *)data; in o2net_idle_timer() local
1539 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_idle_timer()
1542 ktime_to_ms(sc->sc_tv_timer); in o2net_idle_timer()
1549 SC_NODEF_ARGS(sc), msecs / 1000, msecs % 1000); in o2net_idle_timer()
1560 o2net_sc_reset_idle_timer(sc); in o2net_idle_timer()
1564 static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc) in o2net_sc_reset_idle_timer() argument
1566 o2net_sc_cancel_delayed_work(sc, &sc->sc_keepalive_work); in o2net_sc_reset_idle_timer()
1567 o2net_sc_queue_delayed_work(sc, &sc->sc_keepalive_work, in o2net_sc_reset_idle_timer()
1569 o2net_set_sock_timer(sc); in o2net_sc_reset_idle_timer()
1570 mod_timer(&sc->sc_idle_timeout, in o2net_sc_reset_idle_timer()
1574 static void o2net_sc_postpone_idle(struct o2net_sock_container *sc) in o2net_sc_postpone_idle() argument
1576 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_sc_postpone_idle()
1586 if (timer_pending(&sc->sc_idle_timeout)) in o2net_sc_postpone_idle()
1587 o2net_sc_reset_idle_timer(sc); in o2net_sc_postpone_idle()
1599 struct o2net_sock_container *sc = NULL; in o2net_start_connect() local
1649 sc = sc_alloc(node); in o2net_start_connect()
1650 if (sc == NULL) { in o2net_start_connect()
1661 sc->sc_sock = sock; /* freed by sc_kref_release */ in o2net_start_connect()
1677 ret = o2net_set_nodelay(sc->sc_sock); in o2net_start_connect()
1689 o2net_register_callbacks(sc->sc_sock->sk, sc); in o2net_start_connect()
1693 o2net_set_nn_state(nn, sc, 0, 0); in o2net_start_connect()
1700 ret = sc->sc_sock->ops->connect(sc->sc_sock, in o2net_start_connect()
1708 if (ret && sc) { in o2net_start_connect()
1710 " failed with errno %d\n", SC_NODEF_ARGS(sc), ret); in o2net_start_connect()
1713 o2net_ensure_shutdown(nn, sc, 0); in o2net_start_connect()
1715 if (sc) in o2net_start_connect()
1716 sc_put(sc); in o2net_start_connect()
1847 struct o2net_sock_container *sc = NULL; in o2net_accept_one() local
1945 sc = sc_alloc(node); in o2net_accept_one()
1946 if (sc == NULL) { in o2net_accept_one()
1951 sc->sc_sock = new_sock; in o2net_accept_one()
1956 o2net_set_nn_state(nn, sc, 0, 0); in o2net_accept_one()
1959 o2net_register_callbacks(sc->sc_sock->sk, sc); in o2net_accept_one()
1960 o2net_sc_queue_work(sc, &sc->sc_rx_work); in o2net_accept_one()
1963 o2net_sendpage(sc, o2net_hand, sizeof(*o2net_hand)); in o2net_accept_one()
1972 if (sc) in o2net_accept_one()
1973 sc_put(sc); in o2net_accept_one()