net: ipv6: mld: introduce mld_{gq, ifc, dad}_stop_timer functions
authorDaniel Borkmann <dborkman@redhat.com>
Tue, 3 Sep 2013 22:19:43 +0000 (00:19 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 4 Sep 2013 18:53:21 +0000 (14:53 -0400)
We already have mld_{gq,ifc,dad}_start_timer() functions, so introduce
mld_{gq,ifc,dad}_stop_timer() functions to reduce code size and make it
more readable.

Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/mcast.c

index 04399cb..096cd67 100644 (file)
@@ -1006,6 +1006,13 @@ static void mld_gq_start_timer(struct inet6_dev *idev)
                in6_dev_hold(idev);
 }
 
+static void mld_gq_stop_timer(struct inet6_dev *idev)
+{
+       idev->mc_gq_running = 0;
+       if (del_timer(&idev->mc_gq_timer))
+               __in6_dev_put(idev);
+}
+
 static void mld_ifc_start_timer(struct inet6_dev *idev, unsigned long delay)
 {
        unsigned long tv = net_random() % delay;
@@ -1014,6 +1021,13 @@ static void mld_ifc_start_timer(struct inet6_dev *idev, unsigned long delay)
                in6_dev_hold(idev);
 }
 
+static void mld_ifc_stop_timer(struct inet6_dev *idev)
+{
+       idev->mc_ifc_count = 0;
+       if (del_timer(&idev->mc_ifc_timer))
+               __in6_dev_put(idev);
+}
+
 static void mld_dad_start_timer(struct inet6_dev *idev, unsigned long delay)
 {
        unsigned long tv = net_random() % delay;
@@ -1022,6 +1036,12 @@ static void mld_dad_start_timer(struct inet6_dev *idev, unsigned long delay)
                in6_dev_hold(idev);
 }
 
+static void mld_dad_stop_timer(struct inet6_dev *idev)
+{
+       if (del_timer(&idev->mc_dad_timer))
+               __in6_dev_put(idev);
+}
+
 /*
  *     IGMP handling (alias multicast ICMPv6 messages)
  */
@@ -1234,15 +1254,9 @@ static int mld_process_v1(struct inet6_dev *idev, struct mld_msg *mld,
        mld_set_v1_mode(idev);
 
        /* cancel MLDv2 report timer */
-       idev->mc_gq_running = 0;
-       if (del_timer(&idev->mc_gq_timer))
-               __in6_dev_put(idev);
-
+       mld_gq_stop_timer(idev);
        /* cancel the interface change timer */
-       idev->mc_ifc_count = 0;
-       if (del_timer(&idev->mc_ifc_timer))
-               __in6_dev_put(idev);
-
+       mld_ifc_stop_timer(idev);
        /* clear deleted report items */
        mld_clear_delrec(idev);
 
@@ -2434,14 +2448,9 @@ void ipv6_mc_down(struct inet6_dev *idev)
        /* Withdraw multicast list */
 
        read_lock_bh(&idev->lock);
-       idev->mc_ifc_count = 0;
-       if (del_timer(&idev->mc_ifc_timer))
-               __in6_dev_put(idev);
-       idev->mc_gq_running = 0;
-       if (del_timer(&idev->mc_gq_timer))
-               __in6_dev_put(idev);
-       if (del_timer(&idev->mc_dad_timer))
-               __in6_dev_put(idev);
+       mld_ifc_stop_timer(idev);
+       mld_gq_stop_timer(idev);
+       mld_dad_stop_timer(idev);
 
        for (i = idev->mc_list; i; i=i->next)
                igmp6_group_dropped(i);