This source file includes following definitions.
- dn_start_slow_timer
- dn_stop_slow_timer
- dn_slow_timer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <linux/net.h>
20 #include <linux/socket.h>
21 #include <linux/skbuff.h>
22 #include <linux/netdevice.h>
23 #include <linux/timer.h>
24 #include <linux/spinlock.h>
25 #include <net/sock.h>
26 #include <linux/atomic.h>
27 #include <linux/jiffies.h>
28 #include <net/flow.h>
29 #include <net/dn.h>
30
31
32
33
34
35 #define SLOW_INTERVAL (HZ/2)
36
37 static void dn_slow_timer(struct timer_list *t);
38
39 void dn_start_slow_timer(struct sock *sk)
40 {
41 timer_setup(&sk->sk_timer, dn_slow_timer, 0);
42 sk_reset_timer(sk, &sk->sk_timer, jiffies + SLOW_INTERVAL);
43 }
44
45 void dn_stop_slow_timer(struct sock *sk)
46 {
47 sk_stop_timer(sk, &sk->sk_timer);
48 }
49
50 static void dn_slow_timer(struct timer_list *t)
51 {
52 struct sock *sk = from_timer(sk, t, sk_timer);
53 struct dn_scp *scp = DN_SK(sk);
54
55 bh_lock_sock(sk);
56
57 if (sock_owned_by_user(sk)) {
58 sk_reset_timer(sk, &sk->sk_timer, jiffies + HZ / 10);
59 goto out;
60 }
61
62
63
64
65
66
67
68
69
70
71
72
73 if (scp->persist && scp->persist_fxn) {
74 if (scp->persist <= SLOW_INTERVAL) {
75 scp->persist = 0;
76
77 if (scp->persist_fxn(sk))
78 goto out;
79 } else {
80 scp->persist -= SLOW_INTERVAL;
81 }
82 }
83
84
85
86
87
88
89
90
91
92
93
94
95 if (scp->keepalive && scp->keepalive_fxn && (scp->state == DN_RUN)) {
96 if (time_after_eq(jiffies, scp->stamp + scp->keepalive))
97 scp->keepalive_fxn(sk);
98 }
99
100 sk_reset_timer(sk, &sk->sk_timer, jiffies + SLOW_INTERVAL);
101 out:
102 bh_unlock_sock(sk);
103 sock_put(sk);
104 }