• Home
  • Raw
  • Download

Lines Matching refs:sc

64 #define SC_NODEF_ARGS(sc) sc->sc_node->nd_name, sc->sc_node->nd_num,	\  argument
65 &sc->sc_node->nd_ipv4_address, \
66 ntohs(sc->sc_node->nd_ipv4_port)
83 #define sclog(sc, fmt, args...) do { \ argument
84 typeof(sc) __sc = (sc); \
130 static void o2net_sc_postpone_idle(struct o2net_sock_container *sc);
131 static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc);
160 struct o2net_sock_container *sc) in o2net_set_nst_sock_container() argument
162 nst->st_sc = sc; in o2net_set_nst_sock_container()
171 static inline void o2net_set_sock_timer(struct o2net_sock_container *sc) in o2net_set_sock_timer() argument
173 sc->sc_tv_timer = ktime_get(); in o2net_set_sock_timer()
176 static inline void o2net_set_data_ready_time(struct o2net_sock_container *sc) in o2net_set_data_ready_time() argument
178 sc->sc_tv_data_ready = ktime_get(); in o2net_set_data_ready_time()
181 static inline void o2net_set_advance_start_time(struct o2net_sock_container *sc) in o2net_set_advance_start_time() argument
183 sc->sc_tv_advance_start = ktime_get(); in o2net_set_advance_start_time()
186 static inline void o2net_set_advance_stop_time(struct o2net_sock_container *sc) in o2net_set_advance_stop_time() argument
188 sc->sc_tv_advance_stop = ktime_get(); in o2net_set_advance_stop_time()
191 static inline void o2net_set_func_start_time(struct o2net_sock_container *sc) in o2net_set_func_start_time() argument
193 sc->sc_tv_func_start = ktime_get(); in o2net_set_func_start_time()
196 static inline void o2net_set_func_stop_time(struct o2net_sock_container *sc) in o2net_set_func_stop_time() argument
198 sc->sc_tv_func_stop = ktime_get(); in o2net_set_func_stop_time()
217 static ktime_t o2net_get_func_run_time(struct o2net_sock_container *sc) in o2net_get_func_run_time() argument
219 return ktime_sub(sc->sc_tv_func_stop, sc->sc_tv_func_start); in o2net_get_func_run_time()
223 struct o2net_sock_container *sc) in o2net_update_send_stats() argument
225 sc->sc_tv_status_total = ktime_add(sc->sc_tv_status_total, in o2net_update_send_stats()
228 sc->sc_tv_send_total = ktime_add(sc->sc_tv_send_total, in o2net_update_send_stats()
231 sc->sc_tv_acquiry_total = ktime_add(sc->sc_tv_acquiry_total, in o2net_update_send_stats()
234 sc->sc_send_count++; in o2net_update_send_stats()
237 static void o2net_update_recv_stats(struct o2net_sock_container *sc) in o2net_update_recv_stats() argument
239 sc->sc_tv_process_total = ktime_add(sc->sc_tv_process_total, in o2net_update_recv_stats()
240 o2net_get_func_run_time(sc)); in o2net_update_recv_stats()
241 sc->sc_recv_count++; in o2net_update_recv_stats()
248 # define o2net_update_recv_stats(sc) argument
380 struct o2net_sock_container *sc = container_of(kref, in sc_kref_release() local
382 BUG_ON(timer_pending(&sc->sc_idle_timeout)); in sc_kref_release()
384 sclog(sc, "releasing\n"); in sc_kref_release()
386 if (sc->sc_sock) { in sc_kref_release()
387 sock_release(sc->sc_sock); in sc_kref_release()
388 sc->sc_sock = NULL; in sc_kref_release()
391 o2nm_undepend_item(&sc->sc_node->nd_item); in sc_kref_release()
392 o2nm_node_put(sc->sc_node); in sc_kref_release()
393 sc->sc_node = NULL; in sc_kref_release()
395 o2net_debug_del_sc(sc); in sc_kref_release()
397 if (sc->sc_page) in sc_kref_release()
398 __free_page(sc->sc_page); in sc_kref_release()
399 kfree(sc); in sc_kref_release()
402 static void sc_put(struct o2net_sock_container *sc) in sc_put() argument
404 sclog(sc, "put\n"); in sc_put()
405 kref_put(&sc->sc_kref, sc_kref_release); in sc_put()
407 static void sc_get(struct o2net_sock_container *sc) in sc_get() argument
409 sclog(sc, "get\n"); in sc_get()
410 kref_get(&sc->sc_kref); in sc_get()
414 struct o2net_sock_container *sc, *ret = NULL; in sc_alloc() local
419 sc = kzalloc(sizeof(*sc), GFP_NOFS); in sc_alloc()
420 if (sc == NULL || page == NULL) in sc_alloc()
423 kref_init(&sc->sc_kref); in sc_alloc()
425 sc->sc_node = node; in sc_alloc()
434 INIT_WORK(&sc->sc_connect_work, o2net_sc_connect_completed); in sc_alloc()
435 INIT_WORK(&sc->sc_rx_work, o2net_rx_until_empty); in sc_alloc()
436 INIT_WORK(&sc->sc_shutdown_work, o2net_shutdown_sc); in sc_alloc()
437 INIT_DELAYED_WORK(&sc->sc_keepalive_work, o2net_sc_send_keep_req); in sc_alloc()
439 timer_setup(&sc->sc_idle_timeout, o2net_idle_timer, 0); in sc_alloc()
441 sclog(sc, "alloced\n"); in sc_alloc()
443 ret = sc; in sc_alloc()
444 sc->sc_page = page; in sc_alloc()
445 o2net_debug_add_sc(sc); in sc_alloc()
446 sc = NULL; in sc_alloc()
452 kfree(sc); in sc_alloc()
459 static void o2net_sc_queue_work(struct o2net_sock_container *sc, in o2net_sc_queue_work() argument
462 sc_get(sc); in o2net_sc_queue_work()
464 sc_put(sc); in o2net_sc_queue_work()
466 static void o2net_sc_queue_delayed_work(struct o2net_sock_container *sc, in o2net_sc_queue_delayed_work() argument
470 sc_get(sc); in o2net_sc_queue_delayed_work()
472 sc_put(sc); in o2net_sc_queue_delayed_work()
474 static void o2net_sc_cancel_delayed_work(struct o2net_sock_container *sc, in o2net_sc_cancel_delayed_work() argument
478 sc_put(sc); in o2net_sc_cancel_delayed_work()
489 struct o2net_sock_container *sc, in o2net_set_nn_state() argument
498 if (old_sc && !sc) in o2net_set_nn_state()
500 else if (!old_sc && sc) in o2net_set_nn_state()
505 BUG_ON(sc && nn->nn_sc && nn->nn_sc != sc); in o2net_set_nn_state()
507 mlog_bug_on_msg(valid && !sc, "valid %u sc %p\n", valid, sc); in o2net_set_nn_state()
513 o2net_num_from_nn(nn), nn->nn_sc, sc, nn->nn_sc_valid, valid, in o2net_set_nn_state()
516 nn->nn_sc = sc; in o2net_set_nn_state()
541 o2nm_this_node() > sc->sc_node->nd_num ? in o2net_set_nn_state()
543 SC_NODEF_ARGS(sc)); in o2net_set_nn_state()
576 if ((old_sc == NULL) && sc) in o2net_set_nn_state()
577 sc_get(sc); in o2net_set_nn_state()
578 if (old_sc && (old_sc != sc)) { in o2net_set_nn_state()
588 struct o2net_sock_container *sc; in o2net_data_ready() local
591 sc = sk->sk_user_data; in o2net_data_ready()
592 if (sc) { in o2net_data_ready()
593 sclog(sc, "data_ready hit\n"); in o2net_data_ready()
594 o2net_set_data_ready_time(sc); in o2net_data_ready()
595 o2net_sc_queue_work(sc, &sc->sc_rx_work); in o2net_data_ready()
596 ready = sc->sc_data_ready; in o2net_data_ready()
609 struct o2net_sock_container *sc; in o2net_state_change() local
612 sc = sk->sk_user_data; in o2net_state_change()
613 if (sc == NULL) { in o2net_state_change()
618 sclog(sc, "state_change to %d\n", sk->sk_state); in o2net_state_change()
620 state_change = sc->sc_state_change; in o2net_state_change()
628 o2net_sc_queue_work(sc, &sc->sc_connect_work); in o2net_state_change()
633 SC_NODEF_ARGS(sc), sk->sk_state); in o2net_state_change()
634 o2net_sc_queue_work(sc, &sc->sc_shutdown_work); in o2net_state_change()
648 struct o2net_sock_container *sc) in o2net_register_callbacks() argument
659 sk->sk_user_data = sc; in o2net_register_callbacks()
660 sc_get(sc); in o2net_register_callbacks()
662 sc->sc_data_ready = sk->sk_data_ready; in o2net_register_callbacks()
663 sc->sc_state_change = sk->sk_state_change; in o2net_register_callbacks()
667 mutex_init(&sc->sc_send_lock); in o2net_register_callbacks()
673 struct o2net_sock_container *sc) in o2net_unregister_callbacks() argument
678 if (sk->sk_user_data == sc) { in o2net_unregister_callbacks()
681 sk->sk_data_ready = sc->sc_data_ready; in o2net_unregister_callbacks()
682 sk->sk_state_change = sc->sc_state_change; in o2net_unregister_callbacks()
696 struct o2net_sock_container *sc, in o2net_ensure_shutdown() argument
700 if (nn->nn_sc == sc) in o2net_ensure_shutdown()
715 struct o2net_sock_container *sc = in o2net_shutdown_sc() local
718 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_shutdown_sc()
720 sclog(sc, "shutting down\n"); in o2net_shutdown_sc()
723 if (o2net_unregister_callbacks(sc->sc_sock->sk, sc)) { in o2net_shutdown_sc()
726 del_timer_sync(&sc->sc_idle_timeout); in o2net_shutdown_sc()
727 o2net_sc_cancel_delayed_work(sc, &sc->sc_keepalive_work); in o2net_shutdown_sc()
728 sc_put(sc); in o2net_shutdown_sc()
729 kernel_sock_shutdown(sc->sc_sock, SHUT_RDWR); in o2net_shutdown_sc()
734 o2net_ensure_shutdown(nn, sc, 0); in o2net_shutdown_sc()
735 sc_put(sc); in o2net_shutdown_sc()
931 static void o2net_sendpage(struct o2net_sock_container *sc, in o2net_sendpage() argument
935 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_sendpage()
939 mutex_lock(&sc->sc_send_lock); in o2net_sendpage()
940 ret = sc->sc_sock->ops->sendpage(sc->sc_sock, in o2net_sendpage()
944 mutex_unlock(&sc->sc_send_lock); in o2net_sendpage()
949 " returned EAGAIN\n", size, SC_NODEF_ARGS(sc)); in o2net_sendpage()
954 " failed with %zd\n", size, SC_NODEF_ARGS(sc), ret); in o2net_sendpage()
955 o2net_ensure_shutdown(nn, sc, 0); in o2net_sendpage()
997 struct o2net_sock_container *sc; in o2net_fill_node_map() local
1004 if (!o2net_tx_can_proceed(o2net_nn_from_num(node), &sc, &ret)) in o2net_fill_node_map()
1008 sc_put(sc); in o2net_fill_node_map()
1021 struct o2net_sock_container *sc = NULL; in o2net_send_message_vec() local
1058 wait_event(nn->nn_sc_wq, o2net_tx_can_proceed(nn, &sc, &ret)); in o2net_send_message_vec()
1062 o2net_set_nst_sock_container(&nst, sc); in o2net_send_message_vec()
1096 mutex_lock(&sc->sc_send_lock); in o2net_send_message_vec()
1097 ret = o2net_send_tcp_msg(sc->sc_sock, vec, veclen, in o2net_send_message_vec()
1099 mutex_unlock(&sc->sc_send_lock); in o2net_send_message_vec()
1110 o2net_update_send_stats(&nst, sc); in o2net_send_message_vec()
1123 if (sc) in o2net_send_message_vec()
1124 sc_put(sc); in o2net_send_message_vec()
1168 static int o2net_process_message(struct o2net_sock_container *sc, in o2net_process_message() argument
1171 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_process_message()
1179 o2net_sc_postpone_idle(sc); in o2net_process_message()
1190 o2net_sendpage(sc, o2net_keep_resp, in o2net_process_message()
1223 o2net_set_func_start_time(sc); in o2net_process_message()
1224 sc->sc_msg_key = be32_to_cpu(hdr->key); in o2net_process_message()
1225 sc->sc_msg_type = be16_to_cpu(hdr->msg_type); in o2net_process_message()
1229 o2net_set_func_stop_time(sc); in o2net_process_message()
1231 o2net_update_recv_stats(sc); in o2net_process_message()
1235 mutex_lock(&sc->sc_send_lock); in o2net_process_message()
1236 ret = o2net_send_status_magic(sc->sc_sock, hdr, syserr, in o2net_process_message()
1238 mutex_unlock(&sc->sc_send_lock); in o2net_process_message()
1256 static int o2net_check_handshake(struct o2net_sock_container *sc) in o2net_check_handshake() argument
1258 struct o2net_handshake *hand = page_address(sc->sc_page); in o2net_check_handshake()
1259 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_check_handshake()
1264 "Disconnecting.\n", SC_NODEF_ARGS(sc), in o2net_check_handshake()
1269 o2net_ensure_shutdown(nn, sc, -ENOTCONN); in o2net_check_handshake()
1282 "Disconnecting.\n", SC_NODEF_ARGS(sc), in o2net_check_handshake()
1285 o2net_ensure_shutdown(nn, sc, -ENOTCONN); in o2net_check_handshake()
1293 "Disconnecting.\n", SC_NODEF_ARGS(sc), in o2net_check_handshake()
1296 o2net_ensure_shutdown(nn, sc, -ENOTCONN); in o2net_check_handshake()
1304 "Disconnecting.\n", SC_NODEF_ARGS(sc), in o2net_check_handshake()
1307 o2net_ensure_shutdown(nn, sc, -ENOTCONN); in o2net_check_handshake()
1311 sc->sc_handshake_ok = 1; in o2net_check_handshake()
1316 if (nn->nn_sc == sc) { in o2net_check_handshake()
1317 o2net_sc_reset_idle_timer(sc); in o2net_check_handshake()
1319 o2net_set_nn_state(nn, sc, 1, 0); in o2net_check_handshake()
1324 sc->sc_page_off -= sizeof(struct o2net_handshake); in o2net_check_handshake()
1325 if (sc->sc_page_off) in o2net_check_handshake()
1326 memmove(hand, hand + 1, sc->sc_page_off); in o2net_check_handshake()
1334 static int o2net_advance_rx(struct o2net_sock_container *sc) in o2net_advance_rx() argument
1341 sclog(sc, "receiving\n"); in o2net_advance_rx()
1342 o2net_set_advance_start_time(sc); in o2net_advance_rx()
1344 if (unlikely(sc->sc_handshake_ok == 0)) { in o2net_advance_rx()
1345 if(sc->sc_page_off < sizeof(struct o2net_handshake)) { in o2net_advance_rx()
1346 data = page_address(sc->sc_page) + sc->sc_page_off; in o2net_advance_rx()
1347 datalen = sizeof(struct o2net_handshake) - sc->sc_page_off; in o2net_advance_rx()
1348 ret = o2net_recv_tcp_msg(sc->sc_sock, data, datalen); in o2net_advance_rx()
1350 sc->sc_page_off += ret; in o2net_advance_rx()
1353 if (sc->sc_page_off == sizeof(struct o2net_handshake)) { in o2net_advance_rx()
1354 o2net_check_handshake(sc); in o2net_advance_rx()
1355 if (unlikely(sc->sc_handshake_ok == 0)) in o2net_advance_rx()
1362 if (sc->sc_page_off < sizeof(struct o2net_msg)) { in o2net_advance_rx()
1363 data = page_address(sc->sc_page) + sc->sc_page_off; in o2net_advance_rx()
1364 datalen = sizeof(struct o2net_msg) - sc->sc_page_off; in o2net_advance_rx()
1365 ret = o2net_recv_tcp_msg(sc->sc_sock, data, datalen); in o2net_advance_rx()
1367 sc->sc_page_off += ret; in o2net_advance_rx()
1371 if (sc->sc_page_off == sizeof(struct o2net_msg)) { in o2net_advance_rx()
1372 hdr = page_address(sc->sc_page); in o2net_advance_rx()
1382 if (sc->sc_page_off < sizeof(struct o2net_msg)) { in o2net_advance_rx()
1388 hdr = page_address(sc->sc_page); in o2net_advance_rx()
1390 msglog(hdr, "at page_off %zu\n", sc->sc_page_off); in o2net_advance_rx()
1393 if (sc->sc_page_off - sizeof(struct o2net_msg) < be16_to_cpu(hdr->data_len)) { in o2net_advance_rx()
1395 data = page_address(sc->sc_page) + sc->sc_page_off; in o2net_advance_rx()
1397 sc->sc_page_off; in o2net_advance_rx()
1398 ret = o2net_recv_tcp_msg(sc->sc_sock, data, datalen); in o2net_advance_rx()
1400 sc->sc_page_off += ret; in o2net_advance_rx()
1405 if (sc->sc_page_off - sizeof(struct o2net_msg) == be16_to_cpu(hdr->data_len)) { in o2net_advance_rx()
1409 ret = o2net_process_message(sc, hdr); in o2net_advance_rx()
1412 sc->sc_page_off = 0; in o2net_advance_rx()
1416 sclog(sc, "ret = %d\n", ret); in o2net_advance_rx()
1417 o2net_set_advance_stop_time(sc); in o2net_advance_rx()
1426 struct o2net_sock_container *sc = in o2net_rx_until_empty() local
1431 ret = o2net_advance_rx(sc); in o2net_rx_until_empty()
1435 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_rx_until_empty()
1436 sclog(sc, "saw error %d, closing\n", ret); in o2net_rx_until_empty()
1438 o2net_ensure_shutdown(nn, sc, 0); in o2net_rx_until_empty()
1441 sc_put(sc); in o2net_rx_until_empty()
1477 struct o2net_sock_container *sc = in o2net_sc_connect_completed() local
1486 o2net_sendpage(sc, o2net_hand, sizeof(*o2net_hand)); in o2net_sc_connect_completed()
1487 sc_put(sc); in o2net_sc_connect_completed()
1493 struct o2net_sock_container *sc = in o2net_sc_send_keep_req() local
1497 o2net_sendpage(sc, o2net_keep_req, sizeof(*o2net_keep_req)); in o2net_sc_send_keep_req()
1498 sc_put(sc); in o2net_sc_send_keep_req()
1506 struct o2net_sock_container *sc = from_timer(sc, t, sc_idle_timeout); in o2net_idle_timer() local
1507 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_idle_timer()
1510 ktime_to_ms(sc->sc_tv_timer); in o2net_idle_timer()
1517 SC_NODEF_ARGS(sc), msecs / 1000, msecs % 1000); in o2net_idle_timer()
1528 o2net_sc_reset_idle_timer(sc); in o2net_idle_timer()
1532 static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc) in o2net_sc_reset_idle_timer() argument
1534 o2net_sc_cancel_delayed_work(sc, &sc->sc_keepalive_work); in o2net_sc_reset_idle_timer()
1535 o2net_sc_queue_delayed_work(sc, &sc->sc_keepalive_work, in o2net_sc_reset_idle_timer()
1537 o2net_set_sock_timer(sc); in o2net_sc_reset_idle_timer()
1538 mod_timer(&sc->sc_idle_timeout, in o2net_sc_reset_idle_timer()
1542 static void o2net_sc_postpone_idle(struct o2net_sock_container *sc) in o2net_sc_postpone_idle() argument
1544 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); in o2net_sc_postpone_idle()
1554 if (timer_pending(&sc->sc_idle_timeout)) in o2net_sc_postpone_idle()
1555 o2net_sc_reset_idle_timer(sc); in o2net_sc_postpone_idle()
1567 struct o2net_sock_container *sc = NULL; in o2net_start_connect() local
1613 sc = sc_alloc(node); in o2net_start_connect()
1614 if (sc == NULL) { in o2net_start_connect()
1625 sc->sc_sock = sock; /* freed by sc_kref_release */ in o2net_start_connect()
1641 ret = o2net_set_nodelay(sc->sc_sock); in o2net_start_connect()
1653 o2net_register_callbacks(sc->sc_sock->sk, sc); in o2net_start_connect()
1657 o2net_set_nn_state(nn, sc, 0, 0); in o2net_start_connect()
1664 ret = sc->sc_sock->ops->connect(sc->sc_sock, in o2net_start_connect()
1672 if (ret && sc) { in o2net_start_connect()
1674 " failed with errno %d\n", SC_NODEF_ARGS(sc), ret); in o2net_start_connect()
1677 o2net_ensure_shutdown(nn, sc, 0); in o2net_start_connect()
1679 if (sc) in o2net_start_connect()
1680 sc_put(sc); in o2net_start_connect()
1811 struct o2net_sock_container *sc = NULL; in o2net_accept_one() local
1907 sc = sc_alloc(node); in o2net_accept_one()
1908 if (sc == NULL) { in o2net_accept_one()
1913 sc->sc_sock = new_sock; in o2net_accept_one()
1918 o2net_set_nn_state(nn, sc, 0, 0); in o2net_accept_one()
1921 o2net_register_callbacks(sc->sc_sock->sk, sc); in o2net_accept_one()
1922 o2net_sc_queue_work(sc, &sc->sc_rx_work); in o2net_accept_one()
1925 o2net_sendpage(sc, o2net_hand, sizeof(*o2net_hand)); in o2net_accept_one()
1934 if (sc) in o2net_accept_one()
1935 sc_put(sc); in o2net_accept_one()