aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSunil Mushran <sunil.mushran@oracle.com>2010-12-22 15:39:39 -0500
committerJoel Becker <joel.becker@oracle.com>2010-12-22 21:37:57 -0500
commitff1becbf85bf4d4d4652915b7ab27db949585f6b (patch)
treea037c063caa2ea0dda28d2967bffd399dfdc7cc6
parent3f9c14fab0a2e90af9995f261a123f59e0b41141 (diff)
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: Sunil Mushran <sunil.mushran@oracle.com> Signed-off-by: Joel Becker <joel.becker@oracle.com>
-rw-r--r--fs/ocfs2/cluster/netdebug.c28
-rw-r--r--fs/ocfs2/cluster/tcp.c91
-rw-r--r--fs/ocfs2/cluster/tcp_internal.h19
3 files changed, 76 insertions, 62 deletions
diff --git a/fs/ocfs2/cluster/netdebug.c b/fs/ocfs2/cluster/netdebug.c
index 2b986aa82299..536a93d13a06 100644
--- a/fs/ocfs2/cluster/netdebug.c
+++ b/fs/ocfs2/cluster/netdebug.c
@@ -280,8 +280,6 @@ static void *sc_seq_next(struct seq_file *seq, void *v, loff_t *pos)
280 return sc; /* unused, just needs to be null when done */ 280 return sc; /* unused, just needs to be null when done */
281} 281}
282 282
283#define TV_SEC_USEC(TV) TV.tv_sec, (long)TV.tv_usec
284
285static int sc_seq_show(struct seq_file *seq, void *v) 283static int sc_seq_show(struct seq_file *seq, void *v)
286{ 284{
287 struct o2net_sock_container *sc, *dummy_sc = seq->private; 285 struct o2net_sock_container *sc, *dummy_sc = seq->private;
@@ -313,13 +311,13 @@ static int sc_seq_show(struct seq_file *seq, void *v)
313 " remote node: %s\n" 311 " remote node: %s\n"
314 " page off: %zu\n" 312 " page off: %zu\n"
315 " handshake ok: %u\n" 313 " handshake ok: %u\n"
316 " timer: %lu.%ld\n" 314 " timer: %lld usecs\n"
317 " data ready: %lu.%ld\n" 315 " data ready: %lld usecs\n"
318 " advance start: %lu.%ld\n" 316 " advance start: %lld usecs\n"
319 " advance stop: %lu.%ld\n" 317 " advance stop: %lld usecs\n"
320 " func start: %lu.%ld\n" 318 " func start: %lld usecs\n"
321 " func stop: %lu.%ld\n" 319 " func stop: %lld usecs\n"
322 " func key: %u\n" 320 " func key: 0x%08x\n"
323 " func type: %u\n", 321 " func type: %u\n",
324 sc, 322 sc,
325 atomic_read(&sc->sc_kref.refcount), 323 atomic_read(&sc->sc_kref.refcount),
@@ -328,12 +326,12 @@ static int sc_seq_show(struct seq_file *seq, void *v)
328 sc->sc_node->nd_name, 326 sc->sc_node->nd_name,
329 sc->sc_page_off, 327 sc->sc_page_off,
330 sc->sc_handshake_ok, 328 sc->sc_handshake_ok,
331 TV_SEC_USEC(sc->sc_tv_timer), 329 (long long)ktime_to_us(sc->sc_tv_timer),
332 TV_SEC_USEC(sc->sc_tv_data_ready), 330 (long long)ktime_to_us(sc->sc_tv_data_ready),
333 TV_SEC_USEC(sc->sc_tv_advance_start), 331 (long long)ktime_to_us(sc->sc_tv_advance_start),
334 TV_SEC_USEC(sc->sc_tv_advance_stop), 332 (long long)ktime_to_us(sc->sc_tv_advance_stop),
335 TV_SEC_USEC(sc->sc_tv_func_start), 333 (long long)ktime_to_us(sc->sc_tv_func_start),
336 TV_SEC_USEC(sc->sc_tv_func_stop), 334 (long long)ktime_to_us(sc->sc_tv_func_stop),
337 sc->sc_msg_key, 335 sc->sc_msg_key,
338 sc->sc_msg_type); 336 sc->sc_msg_type);
339 } 337 }
diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c
index 49c1a95e352e..efd848334052 100644
--- a/fs/ocfs2/cluster/tcp.c
+++ b/fs/ocfs2/cluster/tcp.c
@@ -153,61 +153,75 @@ static void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype,
153 nst->st_node = node; 153 nst->st_node = node;
154} 154}
155 155
156static void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) 156static inline void o2net_set_nst_sock_time(struct o2net_send_tracking *nst)
157{ 157{
158 nst->st_sock_time = ktime_get(); 158 nst->st_sock_time = ktime_get();
159} 159}
160 160
161static void o2net_set_nst_send_time(struct o2net_send_tracking *nst) 161static inline void o2net_set_nst_send_time(struct o2net_send_tracking *nst)
162{ 162{
163 nst->st_send_time = ktime_get(); 163 nst->st_send_time = ktime_get();
164} 164}
165 165
166static void o2net_set_nst_status_time(struct o2net_send_tracking *nst) 166static inline void o2net_set_nst_status_time(struct o2net_send_tracking *nst)
167{ 167{
168 nst->st_status_time = ktime_get(); 168 nst->st_status_time = ktime_get();
169} 169}
170 170
171static void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, 171static inline void o2net_set_nst_sock_container(struct o2net_send_tracking *nst,
172 struct o2net_sock_container *sc) 172 struct o2net_sock_container *sc)
173{ 173{
174 nst->st_sc = sc; 174 nst->st_sc = sc;
175} 175}
176 176
177static void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, u32 msg_id) 177static inline void o2net_set_nst_msg_id(struct o2net_send_tracking *nst,
178 u32 msg_id)
178{ 179{
179 nst->st_id = msg_id; 180 nst->st_id = msg_id;
180} 181}
181 182
182#else /* CONFIG_DEBUG_FS */ 183static inline void o2net_set_sock_timer(struct o2net_sock_container *sc)
183
184static inline void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype,
185 u32 msgkey, struct task_struct *task, u8 node)
186{ 184{
185 sc->sc_tv_timer = ktime_get();
187} 186}
188 187
189static inline void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) 188static inline void o2net_set_data_ready_time(struct o2net_sock_container *sc)
190{ 189{
190 sc->sc_tv_data_ready = ktime_get();
191} 191}
192 192
193static inline void o2net_set_nst_send_time(struct o2net_send_tracking *nst) 193static inline void o2net_set_advance_start_time(struct o2net_sock_container *sc)
194{ 194{
195 sc->sc_tv_advance_start = ktime_get();
195} 196}
196 197
197static inline void o2net_set_nst_status_time(struct o2net_send_tracking *nst) 198static inline void o2net_set_advance_stop_time(struct o2net_sock_container *sc)
198{ 199{
200 sc->sc_tv_advance_stop = ktime_get();
199} 201}
200 202
201static inline void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, 203static inline void o2net_set_func_start_time(struct o2net_sock_container *sc)
202 struct o2net_sock_container *sc)
203{ 204{
205 sc->sc_tv_func_start = ktime_get();
204} 206}
205 207
206static inline void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, 208static inline void o2net_set_func_stop_time(struct o2net_sock_container *sc)
207 u32 msg_id)
208{ 209{
210 sc->sc_tv_func_stop = ktime_get();
209} 211}
210 212#else /* CONFIG_DEBUG_FS */
213# define o2net_init_nst(a, b, c, d, e)
214# define o2net_set_nst_sock_time(a)
215# define o2net_set_nst_send_time(a)
216# define o2net_set_nst_status_time(a)
217# define o2net_set_nst_sock_container(a, b)
218# define o2net_set_nst_msg_id(a, b)
219# define o2net_set_sock_timer(a)
220# define o2net_set_data_ready_time(a)
221# define o2net_set_advance_start_time(a)
222# define o2net_set_advance_stop_time(a)
223# define o2net_set_func_start_time(a)
224# define o2net_set_func_stop_time(a)
211#endif /* CONFIG_DEBUG_FS */ 225#endif /* CONFIG_DEBUG_FS */
212 226
213static inline int o2net_reconnect_delay(void) 227static inline int o2net_reconnect_delay(void)
@@ -555,7 +569,7 @@ static void o2net_data_ready(struct sock *sk, int bytes)
555 if (sk->sk_user_data) { 569 if (sk->sk_user_data) {
556 struct o2net_sock_container *sc = sk->sk_user_data; 570 struct o2net_sock_container *sc = sk->sk_user_data;
557 sclog(sc, "data_ready hit\n"); 571 sclog(sc, "data_ready hit\n");
558 do_gettimeofday(&sc->sc_tv_data_ready); 572 o2net_set_data_ready_time(sc);
559 o2net_sc_queue_work(sc, &sc->sc_rx_work); 573 o2net_sc_queue_work(sc, &sc->sc_rx_work);
560 ready = sc->sc_data_ready; 574 ready = sc->sc_data_ready;
561 } else { 575 } else {
@@ -1192,13 +1206,13 @@ static int o2net_process_message(struct o2net_sock_container *sc,
1192 if (syserr != O2NET_ERR_NONE) 1206 if (syserr != O2NET_ERR_NONE)
1193 goto out_respond; 1207 goto out_respond;
1194 1208
1195 do_gettimeofday(&sc->sc_tv_func_start); 1209 o2net_set_func_start_time(sc);
1196 sc->sc_msg_key = be32_to_cpu(hdr->key); 1210 sc->sc_msg_key = be32_to_cpu(hdr->key);
1197 sc->sc_msg_type = be16_to_cpu(hdr->msg_type); 1211 sc->sc_msg_type = be16_to_cpu(hdr->msg_type);
1198 handler_status = (nmh->nh_func)(hdr, sizeof(struct o2net_msg) + 1212 handler_status = (nmh->nh_func)(hdr, sizeof(struct o2net_msg) +
1199 be16_to_cpu(hdr->data_len), 1213 be16_to_cpu(hdr->data_len),
1200 nmh->nh_func_data, &ret_data); 1214 nmh->nh_func_data, &ret_data);
1201 do_gettimeofday(&sc->sc_tv_func_stop); 1215 o2net_set_func_stop_time(sc);
1202 1216
1203out_respond: 1217out_respond:
1204 /* this destroys the hdr, so don't use it after this */ 1218 /* 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)
1309 size_t datalen; 1323 size_t datalen;
1310 1324
1311 sclog(sc, "receiving\n"); 1325 sclog(sc, "receiving\n");
1312 do_gettimeofday(&sc->sc_tv_advance_start); 1326 o2net_set_advance_start_time(sc);
1313 1327
1314 if (unlikely(sc->sc_handshake_ok == 0)) { 1328 if (unlikely(sc->sc_handshake_ok == 0)) {
1315 if(sc->sc_page_off < sizeof(struct o2net_handshake)) { 1329 if(sc->sc_page_off < sizeof(struct o2net_handshake)) {
@@ -1384,7 +1398,7 @@ static int o2net_advance_rx(struct o2net_sock_container *sc)
1384 1398
1385out: 1399out:
1386 sclog(sc, "ret = %d\n", ret); 1400 sclog(sc, "ret = %d\n", ret);
1387 do_gettimeofday(&sc->sc_tv_advance_stop); 1401 o2net_set_advance_stop_time(sc);
1388 return ret; 1402 return ret;
1389} 1403}
1390 1404
@@ -1484,27 +1498,28 @@ static void o2net_idle_timer(unsigned long data)
1484{ 1498{
1485 struct o2net_sock_container *sc = (struct o2net_sock_container *)data; 1499 struct o2net_sock_container *sc = (struct o2net_sock_container *)data;
1486 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num); 1500 struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num);
1487 struct timeval now;
1488 1501
1489 do_gettimeofday(&now); 1502#ifdef CONFIG_DEBUG_FS
1503 ktime_t now = ktime_get();
1504#endif
1490 1505
1491 printk(KERN_NOTICE "o2net: connection to " SC_NODEF_FMT " has been idle for %u.%u " 1506 printk(KERN_NOTICE "o2net: connection to " SC_NODEF_FMT " has been idle for %u.%u "
1492 "seconds, shutting it down.\n", SC_NODEF_ARGS(sc), 1507 "seconds, shutting it down.\n", SC_NODEF_ARGS(sc),
1493 o2net_idle_timeout() / 1000, 1508 o2net_idle_timeout() / 1000,
1494 o2net_idle_timeout() % 1000); 1509 o2net_idle_timeout() % 1000);
1495 mlog(ML_NOTICE, "here are some times that might help debug the " 1510
1496 "situation: (tmr %ld.%ld now %ld.%ld dr %ld.%ld adv " 1511#ifdef CONFIG_DEBUG_FS
1497 "%ld.%ld:%ld.%ld func (%08x:%u) %ld.%ld:%ld.%ld)\n", 1512 mlog(ML_NOTICE, "Here are some times that might help debug the "
1498 sc->sc_tv_timer.tv_sec, (long) sc->sc_tv_timer.tv_usec, 1513 "situation: (Timer: %lld, Now %lld, DataReady %lld, Advance %lld-%lld, "
1499 now.tv_sec, (long) now.tv_usec, 1514 "Key 0x%08x, Func %u, FuncTime %lld-%lld)\n",
1500 sc->sc_tv_data_ready.tv_sec, (long) sc->sc_tv_data_ready.tv_usec, 1515 (long long)ktime_to_us(sc->sc_tv_timer), (long long)ktime_to_us(now),
1501 sc->sc_tv_advance_start.tv_sec, 1516 (long long)ktime_to_us(sc->sc_tv_data_ready),
1502 (long) sc->sc_tv_advance_start.tv_usec, 1517 (long long)ktime_to_us(sc->sc_tv_advance_start),
1503 sc->sc_tv_advance_stop.tv_sec, 1518 (long long)ktime_to_us(sc->sc_tv_advance_stop),
1504 (long) sc->sc_tv_advance_stop.tv_usec,
1505 sc->sc_msg_key, sc->sc_msg_type, 1519 sc->sc_msg_key, sc->sc_msg_type,
1506 sc->sc_tv_func_start.tv_sec, (long) sc->sc_tv_func_start.tv_usec, 1520 (long long)ktime_to_us(sc->sc_tv_func_start),
1507 sc->sc_tv_func_stop.tv_sec, (long) sc->sc_tv_func_stop.tv_usec); 1521 (long long)ktime_to_us(sc->sc_tv_func_stop));
1522#endif
1508 1523
1509 /* 1524 /*
1510 * Initialize the nn_timeout so that the next connection attempt 1525 * 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)
1520 o2net_sc_cancel_delayed_work(sc, &sc->sc_keepalive_work); 1535 o2net_sc_cancel_delayed_work(sc, &sc->sc_keepalive_work);
1521 o2net_sc_queue_delayed_work(sc, &sc->sc_keepalive_work, 1536 o2net_sc_queue_delayed_work(sc, &sc->sc_keepalive_work,
1522 msecs_to_jiffies(o2net_keepalive_delay())); 1537 msecs_to_jiffies(o2net_keepalive_delay()));
1523 do_gettimeofday(&sc->sc_tv_timer); 1538 o2net_set_sock_timer(sc);
1524 mod_timer(&sc->sc_idle_timeout, 1539 mod_timer(&sc->sc_idle_timeout,
1525 jiffies + msecs_to_jiffies(o2net_idle_timeout())); 1540 jiffies + msecs_to_jiffies(o2net_idle_timeout()));
1526} 1541}
diff --git a/fs/ocfs2/cluster/tcp_internal.h b/fs/ocfs2/cluster/tcp_internal.h
index b613aaaf3e5c..f81576333911 100644
--- a/fs/ocfs2/cluster/tcp_internal.h
+++ b/fs/ocfs2/cluster/tcp_internal.h
@@ -166,18 +166,19 @@ struct o2net_sock_container {
166 /* original handlers for the sockets */ 166 /* original handlers for the sockets */
167 void (*sc_state_change)(struct sock *sk); 167 void (*sc_state_change)(struct sock *sk);
168 void (*sc_data_ready)(struct sock *sk, int bytes); 168 void (*sc_data_ready)(struct sock *sk, int bytes);
169#ifdef CONFIG_DEBUG_FS 169
170 struct list_head sc_net_debug_item;
171#endif
172 struct timeval sc_tv_timer;
173 struct timeval sc_tv_data_ready;
174 struct timeval sc_tv_advance_start;
175 struct timeval sc_tv_advance_stop;
176 struct timeval sc_tv_func_start;
177 struct timeval sc_tv_func_stop;
178 u32 sc_msg_key; 170 u32 sc_msg_key;
179 u16 sc_msg_type; 171 u16 sc_msg_type;
180 172
173#ifdef CONFIG_DEBUG_FS
174 struct list_head sc_net_debug_item;
175 ktime_t sc_tv_timer;
176 ktime_t sc_tv_data_ready;
177 ktime_t sc_tv_advance_start;
178 ktime_t sc_tv_advance_stop;
179 ktime_t sc_tv_func_start;
180 ktime_t sc_tv_func_stop;
181#endif
181 struct mutex sc_send_lock; 182 struct mutex sc_send_lock;
182}; 183};
183 184