1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40#ifndef __LIBCFS_TIME_H__
41#define __LIBCFS_TIME_H__
42
43
44
45
46static inline unsigned long cfs_time_add(unsigned long t, long d)
47{
48 return (unsigned long)(t + d);
49}
50
51static inline unsigned long cfs_time_sub(unsigned long t1, unsigned long t2)
52{
53 return (unsigned long)(t1 - t2);
54}
55
56static inline int cfs_time_after(unsigned long t1, unsigned long t2)
57{
58 return time_before(t2, t1);
59}
60
61static inline int cfs_time_aftereq(unsigned long t1, unsigned long t2)
62{
63 return time_before_eq(t2, t1);
64}
65
66static inline unsigned long cfs_time_shift(int seconds)
67{
68 return cfs_time_add(cfs_time_current(), cfs_time_seconds(seconds));
69}
70
71static inline long cfs_timeval_sub(struct timeval *large, struct timeval *small,
72 struct timeval *result)
73{
74 long r = (long)(
75 (large->tv_sec - small->tv_sec) * ONE_MILLION +
76 (large->tv_usec - small->tv_usec));
77 if (result != NULL) {
78 result->tv_usec = r % ONE_MILLION;
79 result->tv_sec = r / ONE_MILLION;
80 }
81 return r;
82}
83
84static inline void cfs_slow_warning(unsigned long now, int seconds, char *msg)
85{
86 if (cfs_time_after(cfs_time_current(),
87 cfs_time_add(now, cfs_time_seconds(15))))
88 CERROR("slow %s "CFS_TIME_T" sec\n", msg,
89 cfs_duration_sec(cfs_time_sub(cfs_time_current(), now)));
90}
91
92#define CFS_RATELIMIT(seconds) \
93({ \
94
95
96 \
97 static time_t __next_message; \
98 int result; \
99 \
100 if (cfs_time_after(cfs_time_current(), __next_message)) \
101 result = 1; \
102 else { \
103 __next_message = cfs_time_shift(seconds); \
104 result = 0; \
105 } \
106 result; \
107})
108
109
110
111
112static inline void cfs_fs_timeval(struct timeval *tv)
113{
114 struct timespec time;
115
116 cfs_fs_time_current(&time);
117 cfs_fs_time_usec(&time, tv);
118}
119
120
121
122
123
124static inline long cfs_timeout_cap(long timeout)
125{
126 if (timeout < CFS_TICK)
127 timeout = CFS_TICK;
128 return timeout;
129}
130
131#endif
132