Home | History | Annotate | Download | only in sunrpc
      1 /*
      2  *  linux/include/linux/sunrpc/timer.h
      3  *
      4  *  Declarations for the RPC transport timer.
      5  *
      6  *  Copyright (C) 2002 Trond Myklebust <trond.myklebust (at) fys.uio.no>
      7  */
      8 
      9 #ifndef _LINUX_SUNRPC_TIMER_H
     10 #define _LINUX_SUNRPC_TIMER_H
     11 
     12 #include <asm/atomic.h>
     13 
     14 struct rpc_rtt {
     15 	unsigned long timeo;	/* default timeout value */
     16 	unsigned long srtt[5];	/* smoothed round trip time << 3 */
     17 	unsigned long sdrtt[5];	/* smoothed medium deviation of RTT */
     18 	int ntimeouts[5];	/* Number of timeouts for the last request */
     19 };
     20 
     21 
     22 extern void rpc_init_rtt(struct rpc_rtt *rt, unsigned long timeo);
     23 extern void rpc_update_rtt(struct rpc_rtt *rt, unsigned timer, long m);
     24 extern unsigned long rpc_calc_rto(struct rpc_rtt *rt, unsigned timer);
     25 
     26 static inline void rpc_set_timeo(struct rpc_rtt *rt, int timer, int ntimeo)
     27 {
     28 	int *t;
     29 	if (!timer)
     30 		return;
     31 	t = &rt->ntimeouts[timer-1];
     32 	if (ntimeo < *t) {
     33 		if (*t > 0)
     34 			(*t)--;
     35 	} else {
     36 		if (ntimeo > 8)
     37 			ntimeo = 8;
     38 		*t = ntimeo;
     39 	}
     40 }
     41 
     42 static inline int rpc_ntimeo(struct rpc_rtt *rt, int timer)
     43 {
     44 	if (!timer)
     45 		return 0;
     46 	return rt->ntimeouts[timer-1];
     47 }
     48 
     49 #endif /* _LINUX_SUNRPC_TIMER_H */
     50