Commit Graph

13 Commits

Author SHA1 Message Date
Rafał Miłecki
eea538204b kernel: fix refcnt leak in LED netdev trigger on interface rename
Renaming a netdev-trigger-tracked interface was resulting in an
unbalanced dev_hold().

Example:
> iw phy phy0 interface add foo type __ap
> echo netdev > trigger
> echo foo > device_name
> ip link set foo name bar
> iw dev bar del
[  237.355366] unregister_netdevice: waiting for bar to become free. Usage count = 1
[  247.435362] unregister_netdevice: waiting for bar to become free. Usage count = 1
[  257.545366] unregister_netdevice: waiting for bar to become free. Usage count = 1

Above problem was caused by trigger checking a dev->name which obviously
changes after renaming an interface. It meant missing all further events
including the NETDEV_UNREGISTER which is required for calling dev_put().

This change fixes that by:
1) Comparing device struct *address* for notification-filtering purposes
2) Dropping unneeded NETDEV_CHANGENAME code (no behavior change)

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2019-03-06 06:08:15 +01:00
Alexander Couzens
814e1695aa linux/ledtrig-netdev: remove unsigned < 0 check
Found-by: Coverity Scan
Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
2017-06-11 14:22:44 +02:00
Sergey Sergeev
74ea99b01d ledtrig-netdev: don't cancel work on events for different interfaces
This fixes logic bug(in function netdev_trig_notify) introduced in
0b2991a8ed commit.
Events triggered by different interfaces were stopping work queue so it
wasn't working for tx/rx mode.

Signed-off-by: Sergey Sergeev <adron@yapic.net>
2017-01-29 17:32:58 +01:00
Felix Fietkau
0b2991a8ed kernel: make ledtrig-netdev use a work queue for updates
This fixes hangs in igb that happen if the update call interrupts an
already existing dev_get_stats call. In that case the calling CPU
deadlocks because it's trying to acquire the same spinlock recursively.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2017-01-16 09:52:59 +01:00
Rafał Miłecki
b836a7c29d ledtrig-netdev: don't stop timer on events for different interfaces
This fixes regression introduced in my recent ledtrig-netdev commit.
Events triggered by different interfaces were stopping timer so it
wasn't working for tx/rx mode.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 48072
2016-01-02 20:38:56 +00:00
John Crispin
df165974c3 ledtrig-netdev: add support for renamed devices
The ppp0 interface is renamed after the connection is established. Due
to a missing NETDEV_REGISTER event, the ledtrig-netdev isn't aware of
the renamed interface and literally ignores the device
(no tx/rx indication, led isn't switched off with 'ifdown wan').

Signed-off-by: Mathias Kresin <openwrt@kresin.me>

SVN-Revision: 48048
2016-01-01 21:19:41 +00:00
Rafał Miłecki
e9e3a0682c ledtrig-netdev: reset link status & stats after changing device_name
Previously switching to non-existing device (interface) could result in
leaving LED on.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 47990
2015-12-23 17:11:49 +00:00
Rafał Miłecki
2b1129a7ba ledtrig-netdev: drop locking from timer callback function
We may just delete timer on every trigger update and then start it again
if needed. This will let us avoid both: races and locking in frequently
called timer callback.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 47987
2015-12-23 15:45:43 +00:00
Rafał Miłecki
a56aaf73b9 ledtrig-netdev: switch rwlock to spinlock
Read/write lock was adding useless complexity, there wasn't any real
gain in case of this driver.
Also switch to _bh variants to avoid deadlocks.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 47986
2015-12-23 15:45:36 +00:00
Rafał Miłecki
8996164e56 ledtrig-netdev: update base driver instead of patching it for every kernel
All supported kernels require patching ledtrig-netdev in the same way,
so it's safe to just move these changes to the base version of this
driver. We needed these patches for some old kernels 2.6.36 and 3.11.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 47962
2015-12-23 10:17:09 +00:00
Imre Kaloz
e1de4e27c1 coding style cleanups, drop old kernel support
Signed-off-by: Imre Kaloz <kaloz@openwrt.org>

SVN-Revision: 41293
2014-06-21 10:00:07 +00:00
John Crispin
e3e2a170cd we dont need 1024 bytes buffer. 128 bytes is enough.
SVN-Revision: 27143
2011-06-09 07:08:54 +00:00
Felix Fietkau
da1bb88a2b rename target/linux/generic-2.6 to generic
SVN-Revision: 21952
2010-06-26 20:42:58 +00:00