Loading fs/ocfs2/cluster/netdebug.c +13 −15 Original line number Diff line number Diff line Loading @@ -280,8 +280,6 @@ static void *sc_seq_next(struct seq_file *seq, void *v, loff_t *pos) return sc; /* unused, just needs to be null when done */ } #define TV_SEC_USEC(TV) TV.tv_sec, (long)TV.tv_usec static int sc_seq_show(struct seq_file *seq, void *v) { struct o2net_sock_container *sc, *dummy_sc = seq->private; Loading Loading @@ -313,13 +311,13 @@ static int sc_seq_show(struct seq_file *seq, void *v) " remote node: %s\n" " page off: %zu\n" " handshake ok: %u\n" " timer: %lu.%ld\n" " data ready: %lu.%ld\n" " advance start: %lu.%ld\n" " advance stop: %lu.%ld\n" " func start: %lu.%ld\n" " func stop: %lu.%ld\n" " func key: %u\n" " timer: %lld usecs\n" " data ready: %lld usecs\n" " advance start: %lld usecs\n" " advance stop: %lld usecs\n" " func start: %lld usecs\n" " func stop: %lld usecs\n" " func key: 0x%08x\n" " func type: %u\n", sc, atomic_read(&sc->sc_kref.refcount), Loading @@ -328,12 +326,12 @@ static int sc_seq_show(struct seq_file *seq, void *v) sc->sc_node->nd_name, sc->sc_page_off, sc->sc_handshake_ok, TV_SEC_USEC(sc->sc_tv_timer), TV_SEC_USEC(sc->sc_tv_data_ready), TV_SEC_USEC(sc->sc_tv_advance_start), TV_SEC_USEC(sc->sc_tv_advance_stop), TV_SEC_USEC(sc->sc_tv_func_start), TV_SEC_USEC(sc->sc_tv_func_stop), (long long)ktime_to_us(sc->sc_tv_timer), (long long)ktime_to_us(sc->sc_tv_data_ready), (long long)ktime_to_us(sc->sc_tv_advance_start), (long long)ktime_to_us(sc->sc_tv_advance_stop), (long long)ktime_to_us(sc->sc_tv_func_start), (long long)ktime_to_us(sc->sc_tv_func_stop), sc->sc_msg_key, sc->sc_msg_type); } Loading fs/ocfs2/cluster/tcp.c +53 −38 Original line number Diff line number Diff line Loading @@ -153,61 +153,75 @@ static void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype, nst->st_node = node; } static void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) static inline void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) { nst->st_sock_time = ktime_get(); } static void o2net_set_nst_send_time(struct o2net_send_tracking *nst) static inline void o2net_set_nst_send_time(struct o2net_send_tracking *nst) { nst->st_send_time = ktime_get(); } static void o2net_set_nst_status_time(struct o2net_send_tracking *nst) static inline void o2net_set_nst_status_time(struct o2net_send_tracking *nst) { nst->st_status_time = ktime_get(); } static void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, static inline void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, struct o2net_sock_container *sc) { nst->st_sc = sc; } static void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, u32 msg_id) static inline void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, u32 msg_id) { nst->st_id = msg_id; } #else /* CONFIG_DEBUG_FS */ static inline void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype, u32 msgkey, struct task_struct *task, u8 node) static inline void o2net_set_sock_timer(struct o2net_sock_container *sc) { sc->sc_tv_timer = ktime_get(); } static inline void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) static inline void o2net_set_data_ready_time(struct o2net_sock_container *sc) { sc->sc_tv_data_ready = ktime_get(); } static inline void o2net_set_nst_send_time(struct o2net_send_tracking *nst) static inline void o2net_set_advance_start_time(struct o2net_sock_container *sc) { sc->sc_tv_advance_start = ktime_get(); } static inline void o2net_set_nst_status_time(struct o2net_send_tracking *nst) static inline void o2net_set_advance_stop_time(struct o2net_sock_container *sc) { sc->sc_tv_advance_stop = ktime_get(); } static inline void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, struct o2net_sock_container *sc) static inline void o2net_set_func_start_time(struct o2net_sock_container *sc) { sc->sc_tv_func_start = ktime_get(); } static inline void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, u32 msg_id) static inline void o2net_set_func_stop_time(struct o2net_sock_container *sc) { sc->sc_tv_func_stop = ktime_get(); } #else /* CONFIG_DEBUG_FS */ # define o2net_init_nst(a, b, c, d, e) # define o2net_set_nst_sock_time(a) # define o2net_set_nst_send_time(a) # define o2net_set_nst_status_time(a) # define o2net_set_nst_sock_container(a, b) # define o2net_set_nst_msg_id(a, b) # define o2net_set_sock_timer(a) # define o2net_set_data_ready_time(a) # define o2net_set_advance_start_time(a) # define o2net_set_advance_stop_time(a) # define o2net_set_func_start_time(a) # define o2net_set_func_stop_time(a) #endif /* CONFIG_DEBUG_FS */ static inline int o2net_reconnect_delay(void) Loading Loading @@ -555,7 +569,7 @@ static void o2net_data_ready(struct sock *sk, int bytes) if (sk->sk_user_data) { struct o2net_sock_container *sc = sk->sk_user_data; sclog(sc, "data_ready hit\n"); do_gettimeofday(&sc->sc_tv_data_ready); o2net_set_data_ready_time(sc); o2net_sc_queue_work(sc, &sc->sc_rx_work); ready = sc->sc_data_ready; } else { Loading Loading @@ -1192,13 +1206,13 @@ static int o2net_process_message(struct o2net_sock_container *sc, if (syserr != O2NET_ERR_NONE) goto out_respond; do_gettimeofday(&sc->sc_tv_func_start); o2net_set_func_start_time(sc); sc->sc_msg_key = be32_to_cpu(hdr->key); sc->sc_msg_type = be16_to_cpu(hdr->msg_type); handler_status = (nmh->nh_func)(hdr, sizeof(struct o2net_msg) + be16_to_cpu(hdr->data_len), nmh->nh_func_data, &ret_data); do_gettimeofday(&sc->sc_tv_func_stop); o2net_set_func_stop_time(sc); out_respond: /* this destroys the hdr, so don't use it after this */ Loading Loading @@ -1309,7 +1323,7 @@ static int o2net_advance_rx(struct o2net_sock_container *sc) size_t datalen; sclog(sc, "receiving\n"); do_gettimeofday(&sc->sc_tv_advance_start); o2net_set_advance_start_time(sc); if (unlikely(sc->sc_handshake_ok == 0)) { if(sc->sc_page_off < sizeof(struct o2net_handshake)) { Loading Loading @@ -1384,7 +1398,7 @@ static int o2net_advance_rx(struct o2net_sock_container *sc) out: sclog(sc, "ret = %d\n", ret); do_gettimeofday(&sc->sc_tv_advance_stop); o2net_set_advance_stop_time(sc); return ret; } Loading Loading @@ -1484,27 +1498,28 @@ static void o2net_idle_timer(unsigned long data) { struct o2net_sock_container *sc = (struct o2net_sock_container *)data; struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); struct timeval now; do_gettimeofday(&now); #ifdef CONFIG_DEBUG_FS ktime_t now = ktime_get(); #endif printk(KERN_NOTICE "o2net: connection to " SC_NODEF_FMT " has been idle for %u.%u " "seconds, shutting it down.\n", SC_NODEF_ARGS(sc), o2net_idle_timeout() / 1000, o2net_idle_timeout() % 1000); mlog(ML_NOTICE, "here are some times that might help debug the " "situation: (tmr %ld.%ld now %ld.%ld dr %ld.%ld adv " "%ld.%ld:%ld.%ld func (%08x:%u) %ld.%ld:%ld.%ld)\n", sc->sc_tv_timer.tv_sec, (long) sc->sc_tv_timer.tv_usec, now.tv_sec, (long) now.tv_usec, sc->sc_tv_data_ready.tv_sec, (long) sc->sc_tv_data_ready.tv_usec, sc->sc_tv_advance_start.tv_sec, (long) sc->sc_tv_advance_start.tv_usec, sc->sc_tv_advance_stop.tv_sec, (long) sc->sc_tv_advance_stop.tv_usec, #ifdef CONFIG_DEBUG_FS mlog(ML_NOTICE, "Here are some times that might help debug the " "situation: (Timer: %lld, Now %lld, DataReady %lld, Advance %lld-%lld, " "Key 0x%08x, Func %u, FuncTime %lld-%lld)\n", (long long)ktime_to_us(sc->sc_tv_timer), (long long)ktime_to_us(now), (long long)ktime_to_us(sc->sc_tv_data_ready), (long long)ktime_to_us(sc->sc_tv_advance_start), (long long)ktime_to_us(sc->sc_tv_advance_stop), sc->sc_msg_key, sc->sc_msg_type, sc->sc_tv_func_start.tv_sec, (long) sc->sc_tv_func_start.tv_usec, sc->sc_tv_func_stop.tv_sec, (long) sc->sc_tv_func_stop.tv_usec); (long long)ktime_to_us(sc->sc_tv_func_start), (long long)ktime_to_us(sc->sc_tv_func_stop)); #endif /* * Initialize the nn_timeout so that the next connection attempt Loading @@ -1520,7 +1535,7 @@ static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc) o2net_sc_cancel_delayed_work(sc, &sc->sc_keepalive_work); o2net_sc_queue_delayed_work(sc, &sc->sc_keepalive_work, msecs_to_jiffies(o2net_keepalive_delay())); do_gettimeofday(&sc->sc_tv_timer); o2net_set_sock_timer(sc); mod_timer(&sc->sc_idle_timeout, jiffies + msecs_to_jiffies(o2net_idle_timeout())); } Loading fs/ocfs2/cluster/tcp_internal.h +10 −9 Original line number Diff line number Diff line Loading @@ -166,18 +166,19 @@ struct o2net_sock_container { /* original handlers for the sockets */ void (*sc_state_change)(struct sock *sk); void (*sc_data_ready)(struct sock *sk, int bytes); #ifdef CONFIG_DEBUG_FS struct list_head sc_net_debug_item; #endif struct timeval sc_tv_timer; struct timeval sc_tv_data_ready; struct timeval sc_tv_advance_start; struct timeval sc_tv_advance_stop; struct timeval sc_tv_func_start; struct timeval sc_tv_func_stop; u32 sc_msg_key; u16 sc_msg_type; #ifdef CONFIG_DEBUG_FS struct list_head sc_net_debug_item; ktime_t sc_tv_timer; ktime_t sc_tv_data_ready; ktime_t sc_tv_advance_start; ktime_t sc_tv_advance_stop; ktime_t sc_tv_func_start; ktime_t sc_tv_func_stop; #endif struct mutex sc_send_lock; }; Loading Loading
fs/ocfs2/cluster/netdebug.c +13 −15 Original line number Diff line number Diff line Loading @@ -280,8 +280,6 @@ static void *sc_seq_next(struct seq_file *seq, void *v, loff_t *pos) return sc; /* unused, just needs to be null when done */ } #define TV_SEC_USEC(TV) TV.tv_sec, (long)TV.tv_usec static int sc_seq_show(struct seq_file *seq, void *v) { struct o2net_sock_container *sc, *dummy_sc = seq->private; Loading Loading @@ -313,13 +311,13 @@ static int sc_seq_show(struct seq_file *seq, void *v) " remote node: %s\n" " page off: %zu\n" " handshake ok: %u\n" " timer: %lu.%ld\n" " data ready: %lu.%ld\n" " advance start: %lu.%ld\n" " advance stop: %lu.%ld\n" " func start: %lu.%ld\n" " func stop: %lu.%ld\n" " func key: %u\n" " timer: %lld usecs\n" " data ready: %lld usecs\n" " advance start: %lld usecs\n" " advance stop: %lld usecs\n" " func start: %lld usecs\n" " func stop: %lld usecs\n" " func key: 0x%08x\n" " func type: %u\n", sc, atomic_read(&sc->sc_kref.refcount), Loading @@ -328,12 +326,12 @@ static int sc_seq_show(struct seq_file *seq, void *v) sc->sc_node->nd_name, sc->sc_page_off, sc->sc_handshake_ok, TV_SEC_USEC(sc->sc_tv_timer), TV_SEC_USEC(sc->sc_tv_data_ready), TV_SEC_USEC(sc->sc_tv_advance_start), TV_SEC_USEC(sc->sc_tv_advance_stop), TV_SEC_USEC(sc->sc_tv_func_start), TV_SEC_USEC(sc->sc_tv_func_stop), (long long)ktime_to_us(sc->sc_tv_timer), (long long)ktime_to_us(sc->sc_tv_data_ready), (long long)ktime_to_us(sc->sc_tv_advance_start), (long long)ktime_to_us(sc->sc_tv_advance_stop), (long long)ktime_to_us(sc->sc_tv_func_start), (long long)ktime_to_us(sc->sc_tv_func_stop), sc->sc_msg_key, sc->sc_msg_type); } Loading
fs/ocfs2/cluster/tcp.c +53 −38 Original line number Diff line number Diff line Loading @@ -153,61 +153,75 @@ static void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype, nst->st_node = node; } static void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) static inline void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) { nst->st_sock_time = ktime_get(); } static void o2net_set_nst_send_time(struct o2net_send_tracking *nst) static inline void o2net_set_nst_send_time(struct o2net_send_tracking *nst) { nst->st_send_time = ktime_get(); } static void o2net_set_nst_status_time(struct o2net_send_tracking *nst) static inline void o2net_set_nst_status_time(struct o2net_send_tracking *nst) { nst->st_status_time = ktime_get(); } static void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, static inline void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, struct o2net_sock_container *sc) { nst->st_sc = sc; } static void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, u32 msg_id) static inline void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, u32 msg_id) { nst->st_id = msg_id; } #else /* CONFIG_DEBUG_FS */ static inline void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype, u32 msgkey, struct task_struct *task, u8 node) static inline void o2net_set_sock_timer(struct o2net_sock_container *sc) { sc->sc_tv_timer = ktime_get(); } static inline void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) static inline void o2net_set_data_ready_time(struct o2net_sock_container *sc) { sc->sc_tv_data_ready = ktime_get(); } static inline void o2net_set_nst_send_time(struct o2net_send_tracking *nst) static inline void o2net_set_advance_start_time(struct o2net_sock_container *sc) { sc->sc_tv_advance_start = ktime_get(); } static inline void o2net_set_nst_status_time(struct o2net_send_tracking *nst) static inline void o2net_set_advance_stop_time(struct o2net_sock_container *sc) { sc->sc_tv_advance_stop = ktime_get(); } static inline void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, struct o2net_sock_container *sc) static inline void o2net_set_func_start_time(struct o2net_sock_container *sc) { sc->sc_tv_func_start = ktime_get(); } static inline void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, u32 msg_id) static inline void o2net_set_func_stop_time(struct o2net_sock_container *sc) { sc->sc_tv_func_stop = ktime_get(); } #else /* CONFIG_DEBUG_FS */ # define o2net_init_nst(a, b, c, d, e) # define o2net_set_nst_sock_time(a) # define o2net_set_nst_send_time(a) # define o2net_set_nst_status_time(a) # define o2net_set_nst_sock_container(a, b) # define o2net_set_nst_msg_id(a, b) # define o2net_set_sock_timer(a) # define o2net_set_data_ready_time(a) # define o2net_set_advance_start_time(a) # define o2net_set_advance_stop_time(a) # define o2net_set_func_start_time(a) # define o2net_set_func_stop_time(a) #endif /* CONFIG_DEBUG_FS */ static inline int o2net_reconnect_delay(void) Loading Loading @@ -555,7 +569,7 @@ static void o2net_data_ready(struct sock *sk, int bytes) if (sk->sk_user_data) { struct o2net_sock_container *sc = sk->sk_user_data; sclog(sc, "data_ready hit\n"); do_gettimeofday(&sc->sc_tv_data_ready); o2net_set_data_ready_time(sc); o2net_sc_queue_work(sc, &sc->sc_rx_work); ready = sc->sc_data_ready; } else { Loading Loading @@ -1192,13 +1206,13 @@ static int o2net_process_message(struct o2net_sock_container *sc, if (syserr != O2NET_ERR_NONE) goto out_respond; do_gettimeofday(&sc->sc_tv_func_start); o2net_set_func_start_time(sc); sc->sc_msg_key = be32_to_cpu(hdr->key); sc->sc_msg_type = be16_to_cpu(hdr->msg_type); handler_status = (nmh->nh_func)(hdr, sizeof(struct o2net_msg) + be16_to_cpu(hdr->data_len), nmh->nh_func_data, &ret_data); do_gettimeofday(&sc->sc_tv_func_stop); o2net_set_func_stop_time(sc); out_respond: /* this destroys the hdr, so don't use it after this */ Loading Loading @@ -1309,7 +1323,7 @@ static int o2net_advance_rx(struct o2net_sock_container *sc) size_t datalen; sclog(sc, "receiving\n"); do_gettimeofday(&sc->sc_tv_advance_start); o2net_set_advance_start_time(sc); if (unlikely(sc->sc_handshake_ok == 0)) { if(sc->sc_page_off < sizeof(struct o2net_handshake)) { Loading Loading @@ -1384,7 +1398,7 @@ static int o2net_advance_rx(struct o2net_sock_container *sc) out: sclog(sc, "ret = %d\n", ret); do_gettimeofday(&sc->sc_tv_advance_stop); o2net_set_advance_stop_time(sc); return ret; } Loading Loading @@ -1484,27 +1498,28 @@ static void o2net_idle_timer(unsigned long data) { struct o2net_sock_container *sc = (struct o2net_sock_container *)data; struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); struct timeval now; do_gettimeofday(&now); #ifdef CONFIG_DEBUG_FS ktime_t now = ktime_get(); #endif printk(KERN_NOTICE "o2net: connection to " SC_NODEF_FMT " has been idle for %u.%u " "seconds, shutting it down.\n", SC_NODEF_ARGS(sc), o2net_idle_timeout() / 1000, o2net_idle_timeout() % 1000); mlog(ML_NOTICE, "here are some times that might help debug the " "situation: (tmr %ld.%ld now %ld.%ld dr %ld.%ld adv " "%ld.%ld:%ld.%ld func (%08x:%u) %ld.%ld:%ld.%ld)\n", sc->sc_tv_timer.tv_sec, (long) sc->sc_tv_timer.tv_usec, now.tv_sec, (long) now.tv_usec, sc->sc_tv_data_ready.tv_sec, (long) sc->sc_tv_data_ready.tv_usec, sc->sc_tv_advance_start.tv_sec, (long) sc->sc_tv_advance_start.tv_usec, sc->sc_tv_advance_stop.tv_sec, (long) sc->sc_tv_advance_stop.tv_usec, #ifdef CONFIG_DEBUG_FS mlog(ML_NOTICE, "Here are some times that might help debug the " "situation: (Timer: %lld, Now %lld, DataReady %lld, Advance %lld-%lld, " "Key 0x%08x, Func %u, FuncTime %lld-%lld)\n", (long long)ktime_to_us(sc->sc_tv_timer), (long long)ktime_to_us(now), (long long)ktime_to_us(sc->sc_tv_data_ready), (long long)ktime_to_us(sc->sc_tv_advance_start), (long long)ktime_to_us(sc->sc_tv_advance_stop), sc->sc_msg_key, sc->sc_msg_type, sc->sc_tv_func_start.tv_sec, (long) sc->sc_tv_func_start.tv_usec, sc->sc_tv_func_stop.tv_sec, (long) sc->sc_tv_func_stop.tv_usec); (long long)ktime_to_us(sc->sc_tv_func_start), (long long)ktime_to_us(sc->sc_tv_func_stop)); #endif /* * Initialize the nn_timeout so that the next connection attempt Loading @@ -1520,7 +1535,7 @@ static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc) o2net_sc_cancel_delayed_work(sc, &sc->sc_keepalive_work); o2net_sc_queue_delayed_work(sc, &sc->sc_keepalive_work, msecs_to_jiffies(o2net_keepalive_delay())); do_gettimeofday(&sc->sc_tv_timer); o2net_set_sock_timer(sc); mod_timer(&sc->sc_idle_timeout, jiffies + msecs_to_jiffies(o2net_idle_timeout())); } Loading
fs/ocfs2/cluster/tcp_internal.h +10 −9 Original line number Diff line number Diff line Loading @@ -166,18 +166,19 @@ struct o2net_sock_container { /* original handlers for the sockets */ void (*sc_state_change)(struct sock *sk); void (*sc_data_ready)(struct sock *sk, int bytes); #ifdef CONFIG_DEBUG_FS struct list_head sc_net_debug_item; #endif struct timeval sc_tv_timer; struct timeval sc_tv_data_ready; struct timeval sc_tv_advance_start; struct timeval sc_tv_advance_stop; struct timeval sc_tv_func_start; struct timeval sc_tv_func_stop; u32 sc_msg_key; u16 sc_msg_type; #ifdef CONFIG_DEBUG_FS struct list_head sc_net_debug_item; ktime_t sc_tv_timer; ktime_t sc_tv_data_ready; ktime_t sc_tv_advance_start; ktime_t sc_tv_advance_stop; ktime_t sc_tv_func_start; ktime_t sc_tv_func_stop; #endif struct mutex sc_send_lock; }; Loading