mac802154: iface: fix hrtimer cancel on ifdown
authorAlexander Aring <alex.aring@gmail.com>
Sat, 13 Jun 2015 20:15:51 +0000 (22:15 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Sun, 14 Jun 2015 23:22:19 +0000 (01:22 +0200)
The interframe spacing timer is a per phy definition and is part of a
ieee802154_local structure. If we have possible multiple interfaces
ifdown one interface then the timer should not be cancled. First if the
last interface is down and the receive handling is stopped we should be
sure that the interframe spacing timer isn't run anymore.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/mac802154/iface.c

index e3d77b07c0e4a4924be35b803dcaf6981ec5f789..d8043378e7a067f75cbc31bbbf417dc345585be3 100644 (file)
@@ -302,15 +302,15 @@ static int mac802154_slave_close(struct net_device *dev)
 
        ASSERT_RTNL();
 
-       hrtimer_cancel(&local->ifs_timer);
-
        netif_stop_queue(dev);
        local->open_count--;
 
        clear_bit(SDATA_STATE_RUNNING, &sdata->state);
 
-       if (!local->open_count)
+       if (!local->open_count) {
+               hrtimer_cancel(&local->ifs_timer);
                drv_stop(local);
+       }
 
        return 0;
 }