[PATCH 2.6.0-test5][NETROM] timer code cleanup

From: Vinay K Nallamothu
Date: Sun Sep 21 2003 - 07:02:36 EST


Compiles fine. Untested.

1. move timer initialization into nr_init_timers so that we can use mod_timer
2. remove skb queue purge in af_netrom as its already done by nr_clear_queues
3. Use del_timer_sync in nr_loopback_clear



af_netrom.c | 18 +++-------------
nr_loopback.c | 31 +++++++----------------------
nr_timer.c | 62 ++++++++++++++++++++++++++--------------------------------
3 files changed, 40 insertions(+), 71 deletions(-)


diff -urN linux-2.6.0-test5/net/netrom/af_netrom.c linux-2.6.0-test5-nvk/net/netrom/af_netrom.c
--- linux-2.6.0-test5/net/netrom/af_netrom.c 2003-09-09 11:12:08.000000000 +0530
+++ linux-2.6.0-test5-nvk/net/netrom/af_netrom.c 2003-09-21 16:36:12.000000000 +0530
@@ -62,6 +62,7 @@
static spinlock_t nr_list_lock = SPIN_LOCK_UNLOCKED;

static struct proto_ops nr_proto_ops;
+void nr_init_timers(struct sock *sk);

static struct sock *nr_alloc_sock(void)
{
@@ -279,17 +280,12 @@

kfree_skb(skb);
}
- while ((skb = skb_dequeue(&sk->sk_write_queue)) != NULL) {
- kfree_skb(skb);
- }

if (atomic_read(&sk->sk_wmem_alloc) ||
atomic_read(&sk->sk_rmem_alloc)) {
/* Defer: outstanding buffers */
- init_timer(&sk->sk_timer);
- sk->sk_timer.expires = jiffies + 2 * HZ;
sk->sk_timer.function = nr_destroy_timer;
- sk->sk_timer.data = (unsigned long)sk;
+ sk->sk_timer.expires = jiffies + 2 * HZ;
add_timer(&sk->sk_timer);
} else
sock_put(sk);
@@ -442,10 +438,7 @@
skb_queue_head_init(&nr->reseq_queue);
skb_queue_head_init(&nr->frag_queue);

- init_timer(&nr->t1timer);
- init_timer(&nr->t2timer);
- init_timer(&nr->t4timer);
- init_timer(&nr->idletimer);
+ nr_init_timers(sk);

nr->t1 = sysctl_netrom_transport_timeout;
nr->t2 = sysctl_netrom_transport_acknowledge_delay;
@@ -491,10 +484,7 @@
skb_queue_head_init(&nr->reseq_queue);
skb_queue_head_init(&nr->frag_queue);

- init_timer(&nr->t1timer);
- init_timer(&nr->t2timer);
- init_timer(&nr->t4timer);
- init_timer(&nr->idletimer);
+ nr_init_timers(sk);

onr = nr_sk(osk);

diff -urN linux-2.6.0-test5/net/netrom/nr_loopback.c linux-2.6.0-test5-nvk/net/netrom/nr_loopback.c
--- linux-2.6.0-test5/net/netrom/nr_loopback.c 2003-09-09 11:12:08.000000000 +0530
+++ linux-2.6.0-test5-nvk/net/netrom/nr_loopback.c 2003-09-21 13:36:05.000000000 +0530
@@ -14,19 +14,17 @@
#include <net/netrom.h>
#include <linux/init.h>

-static struct sk_buff_head loopback_queue;
-static struct timer_list loopback_timer;
+static void nr_loopback_timer(unsigned long);

-static void nr_set_loopback_timer(void);
+static struct sk_buff_head loopback_queue;
+static struct timer_list loopback_timer = TIMER_INITIALIZER(nr_loopback_timer, 0, 0);

-void nr_loopback_init(void)
+void __init nr_loopback_init(void)
{
skb_queue_head_init(&loopback_queue);
-
- init_timer(&loopback_timer);
}

-static int nr_loopback_running(void)
+static inline int nr_loopback_running(void)
{
return timer_pending(&loopback_timer);
}
@@ -42,26 +40,13 @@
skb_queue_tail(&loopback_queue, skbn);

if (!nr_loopback_running())
- nr_set_loopback_timer();
+ mod_timer(&loopback_timer, jiffies + 10);
}

kfree_skb(skb);
return 1;
}

-static void nr_loopback_timer(unsigned long);
-
-static void nr_set_loopback_timer(void)
-{
- del_timer(&loopback_timer);
-
- loopback_timer.data = 0;
- loopback_timer.function = &nr_loopback_timer;
- loopback_timer.expires = jiffies + 10;
-
- add_timer(&loopback_timer);
-}
-
static void nr_loopback_timer(unsigned long param)
{
struct sk_buff *skb;
@@ -80,12 +65,12 @@
dev_put(dev);

if (!skb_queue_empty(&loopback_queue) && !nr_loopback_running())
- nr_set_loopback_timer();
+ mod_timer(&loopback_timer, jiffies + 10);
}
}

void __exit nr_loopback_clear(void)
{
- del_timer(&loopback_timer);
+ del_timer_sync(&loopback_timer);
skb_queue_purge(&loopback_queue);
}
diff -urN linux-2.6.0-test5/net/netrom/nr_timer.c linux-2.6.0-test5-nvk/net/netrom/nr_timer.c
--- linux-2.6.0-test5/net/netrom/nr_timer.c 2003-09-09 11:12:08.000000000 +0530
+++ linux-2.6.0-test5-nvk/net/netrom/nr_timer.c 2003-09-21 15:23:46.000000000 +0530
@@ -36,69 +36,63 @@
static void nr_t4timer_expiry(unsigned long);
static void nr_idletimer_expiry(unsigned long);

-void nr_start_t1timer(struct sock *sk)
+void nr_init_timers(struct sock *sk)
{
nr_cb *nr = nr_sk(sk);

- del_timer(&nr->t1timer);
-
+ init_timer(&nr->t1timer);
nr->t1timer.data = (unsigned long)sk;
nr->t1timer.function = &nr_t1timer_expiry;
- nr->t1timer.expires = jiffies + nr->t1;
+
+ init_timer(&nr->t2timer);
+ nr->t2timer.data = (unsigned long)sk;
+ nr->t2timer.function = &nr_t2timer_expiry;
+
+ init_timer(&nr->t4timer);
+ nr->t4timer.data = (unsigned long)sk;
+ nr->t4timer.function = &nr_t4timer_expiry;
+
+ init_timer(&nr->idletimer);
+ nr->idletimer.data = (unsigned long)sk;
+ nr->idletimer.function = &nr_idletimer_expiry;

- add_timer(&nr->t1timer);
+ /* initialized by sock_init_data */
+ sk->sk_timer.data = (unsigned long)sk;
+ sk->sk_timer.function = &nr_heartbeat_expiry;
}

-void nr_start_t2timer(struct sock *sk)
+void nr_start_t1timer(struct sock *sk)
{
nr_cb *nr = nr_sk(sk);

- del_timer(&nr->t2timer);
+ mod_timer(&nr->t1timer, jiffies + nr->t1);
+}

- nr->t2timer.data = (unsigned long)sk;
- nr->t2timer.function = &nr_t2timer_expiry;
- nr->t2timer.expires = jiffies + nr->t2;
+void nr_start_t2timer(struct sock *sk)
+{
+ nr_cb *nr = nr_sk(sk);

- add_timer(&nr->t2timer);
+ mod_timer(&nr->t2timer, jiffies + nr->t2);
}

void nr_start_t4timer(struct sock *sk)
{
nr_cb *nr = nr_sk(sk);

- del_timer(&nr->t4timer);
-
- nr->t4timer.data = (unsigned long)sk;
- nr->t4timer.function = &nr_t4timer_expiry;
- nr->t4timer.expires = jiffies + nr->t4;
-
- add_timer(&nr->t4timer);
+ mod_timer(&nr->t4timer, jiffies + nr->t4);
}

void nr_start_idletimer(struct sock *sk)
{
nr_cb *nr = nr_sk(sk);

- del_timer(&nr->idletimer);
-
- if (nr->idle > 0) {
- nr->idletimer.data = (unsigned long)sk;
- nr->idletimer.function = &nr_idletimer_expiry;
- nr->idletimer.expires = jiffies + nr->idle;
-
- add_timer(&nr->idletimer);
- }
+ if (nr->idle > 0)
+ mod_timer(&nr->idletimer, jiffies + nr->idle);
}

void nr_start_heartbeat(struct sock *sk)
{
- del_timer(&sk->sk_timer);
-
- sk->sk_timer.data = (unsigned long)sk;
- sk->sk_timer.function = &nr_heartbeat_expiry;
- sk->sk_timer.expires = jiffies + 5 * HZ;
-
- add_timer(&sk->sk_timer);
+ mod_timer(&sk->sk_timer, jiffies + 5 * HZ);
}

void nr_stop_t1timer(struct sock *sk)


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/