]> git.hungrycats.org Git - linux/commitdiff
[IPV4]: Fix deadlock in IGMP locking.
authorAlexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Mon, 10 Mar 2003 09:12:51 +0000 (01:12 -0800)
committerDavid S. Miller <davem@nuts.ninka.net>
Mon, 10 Mar 2003 09:12:51 +0000 (01:12 -0800)
net/ipv4/igmp.c

index 80e8e743323538abb1fa98cf5255059d2c95bd16..1053e9093bee7d328687a935f444ca5c656cf35d 100644 (file)
@@ -255,30 +255,22 @@ static void igmp_timer_expire(unsigned long data)
 {
        struct ip_mc_list *im=(struct ip_mc_list *)data;
        struct in_device *in_dev = im->interface;
-       int err;
 
        spin_lock(&im->lock);
        im->tm_running=0;
 
-       if (IGMP_V1_SEEN(in_dev))
-               err = igmp_send_report(in_dev->dev, im->multiaddr, IGMP_HOST_MEMBERSHIP_REPORT);
-       else
-               err = igmp_send_report(in_dev->dev, im->multiaddr, IGMP_HOST_NEW_MEMBERSHIP_REPORT);
-
-       /* Failed. Retry later. */
-       if (err) {
-               if (!in_dev->dead)
-                       igmp_start_timer(im, IGMP_Unsolicited_Report_Interval);
-               goto out;
-       }
-
        if (im->unsolicit_count) {
                im->unsolicit_count--;
                igmp_start_timer(im, IGMP_Unsolicited_Report_Interval);
        }
        im->reporter = 1;
-out:
        spin_unlock(&im->lock);
+
+       if (IGMP_V1_SEEN(in_dev))
+               igmp_send_report(in_dev->dev, im->multiaddr, IGMP_HOST_MEMBERSHIP_REPORT);
+       else
+               igmp_send_report(in_dev->dev, im->multiaddr, IGMP_HOST_NEW_MEMBERSHIP_REPORT);
+
        ip_ma_put(im);
 }