Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

leds: trigger: netdev: fix handling on interface rename

The NETDEV_CHANGENAME code is not "unneeded" like it is stated in commit
4cb6560514fa ("leds: trigger: netdev: fix refcnt leak on interface
rename").

The event was accidentally misinterpreted equivalent to
NETDEV_UNREGISTER, but should be equivalent to NETDEV_REGISTER.

This was the case in the original code from the openwrt project.

Otherwise, you are unable to set netdev led triggers for (non-existent)
netdevices, which has to be renamed. This is the case, for example, for
ppp interfaces in openwrt.

Fixes: 06f502f57d0d ("leds: trigger: Introduce a NETDEV trigger")
Fixes: 4cb6560514fa ("leds: trigger: netdev: fix refcnt leak on interface rename")
Signed-off-by: Martin Schiller <ms@dev.tdt.de>
Signed-off-by: Pavel Machek <pavel@ucw.cz>

authored by

Martin Schiller and committed by
Pavel Machek
5f820ed5 fc7b5028

+4 -1
+4 -1
drivers/leds/trigger/ledtrig-netdev.c
··· 302 302 container_of(nb, struct led_netdev_data, notifier); 303 303 304 304 if (evt != NETDEV_UP && evt != NETDEV_DOWN && evt != NETDEV_CHANGE 305 - && evt != NETDEV_REGISTER && evt != NETDEV_UNREGISTER) 305 + && evt != NETDEV_REGISTER && evt != NETDEV_UNREGISTER 306 + && evt != NETDEV_CHANGENAME) 306 307 return NOTIFY_DONE; 307 308 308 309 if (!(dev == trigger_data->net_dev || 310 + (evt == NETDEV_CHANGENAME && !strcmp(dev->name, trigger_data->device_name)) || 309 311 (evt == NETDEV_REGISTER && !strcmp(dev->name, trigger_data->device_name)))) 310 312 return NOTIFY_DONE; 311 313 ··· 317 315 318 316 clear_bit(NETDEV_LED_MODE_LINKUP, &trigger_data->mode); 319 317 switch (evt) { 318 + case NETDEV_CHANGENAME: 320 319 case NETDEV_REGISTER: 321 320 if (trigger_data->net_dev) 322 321 dev_put(trigger_data->net_dev);