Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff1becbf authored by Sunil Mushran's avatar Sunil Mushran Committed by Joel Becker
Browse files

ocfs2/cluster: Use ktime instead of timeval in struct o2net_sock_container



Replace time trackers in struct o2net_sock_container from struct timeval to
union ktime.

Signed-off-by: default avatarSunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
parent 3f9c14fa
Loading
Loading
Loading
Loading
+13 −15
Original line number Diff line number Diff line
@@ -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;
@@ -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),
@@ -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);
	}
+53 −38
Original line number Diff line number Diff line
@@ -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)
@@ -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 {
@@ -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 */
@@ -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)) {
@@ -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;
}

@@ -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
@@ -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()));
}
+10 −9
Original line number Diff line number Diff line
@@ -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;
};