[PATCH] bonding: plug reference count leak
Bonding leaks route structures when the ARP monitor is configured to send probes over VLANs. Originally reported by Ian Abel <ian.abel@mxtelecom.com>; his original fix was modified by Jay Vosburgh to correct coding style and to close a leak it missed. Signed-off-by: Jay Vosburgh <fubar@us.ibm.com> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
This commit is contained in:
parent
c5f977a0d2
commit
ed4b9f8014
|
@ -2879,6 +2879,7 @@ static void bond_arp_send_all(struct bonding *bond, struct slave *slave)
|
||||||
* This target is not on a VLAN
|
* This target is not on a VLAN
|
||||||
*/
|
*/
|
||||||
if (rt->u.dst.dev == bond->dev) {
|
if (rt->u.dst.dev == bond->dev) {
|
||||||
|
ip_rt_put(rt);
|
||||||
dprintk("basa: rtdev == bond->dev: arp_send\n");
|
dprintk("basa: rtdev == bond->dev: arp_send\n");
|
||||||
bond_arp_send(slave->dev, ARPOP_REQUEST, targets[i],
|
bond_arp_send(slave->dev, ARPOP_REQUEST, targets[i],
|
||||||
bond->master_ip, 0);
|
bond->master_ip, 0);
|
||||||
|
@ -2898,6 +2899,7 @@ static void bond_arp_send_all(struct bonding *bond, struct slave *slave)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vlan_id) {
|
if (vlan_id) {
|
||||||
|
ip_rt_put(rt);
|
||||||
bond_arp_send(slave->dev, ARPOP_REQUEST, targets[i],
|
bond_arp_send(slave->dev, ARPOP_REQUEST, targets[i],
|
||||||
vlan->vlan_ip, vlan_id);
|
vlan->vlan_ip, vlan_id);
|
||||||
continue;
|
continue;
|
||||||
|
@ -2909,6 +2911,7 @@ static void bond_arp_send_all(struct bonding *bond, struct slave *slave)
|
||||||
bond->dev->name, NIPQUAD(fl.fl4_dst),
|
bond->dev->name, NIPQUAD(fl.fl4_dst),
|
||||||
rt->u.dst.dev ? rt->u.dst.dev->name : "NULL");
|
rt->u.dst.dev ? rt->u.dst.dev->name : "NULL");
|
||||||
}
|
}
|
||||||
|
ip_rt_put(rt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue