Commit c4f283b1 authored by Jay Vosburgh's avatar Jay Vosburgh Committed by Jeff Garzik

bonding: fix double dev_add_pack

	Bonding can erroneously register the same packet_type to receive
ARPs (for use by ARP validation): once at device open time, and once via
sysfs.  Since sysfs can change the validate setting (and thus register
or unregister) at any time, a flag is needed to synchronize with device
open in order to avoid double registrations, and the simplest place is
within the packet_type structure itself.  Double unregister is not an
issue.

	Bug reported by Ulrich Oelmann <ulrich.oelmann@web.de>.
Signed-off-by: default avatarJay Vosburgh <fubar@us.ibm.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent c3442e29
...@@ -3423,6 +3423,9 @@ void bond_register_arp(struct bonding *bond) ...@@ -3423,6 +3423,9 @@ void bond_register_arp(struct bonding *bond)
{ {
struct packet_type *pt = &bond->arp_mon_pt; struct packet_type *pt = &bond->arp_mon_pt;
if (pt->type)
return;
pt->type = htons(ETH_P_ARP); pt->type = htons(ETH_P_ARP);
pt->dev = NULL; /*bond->dev;XXX*/ pt->dev = NULL; /*bond->dev;XXX*/
pt->func = bond_arp_rcv; pt->func = bond_arp_rcv;
...@@ -3431,7 +3434,10 @@ void bond_register_arp(struct bonding *bond) ...@@ -3431,7 +3434,10 @@ void bond_register_arp(struct bonding *bond)
void bond_unregister_arp(struct bonding *bond) void bond_unregister_arp(struct bonding *bond)
{ {
dev_remove_pack(&bond->arp_mon_pt); struct packet_type *pt = &bond->arp_mon_pt;
dev_remove_pack(pt);
pt->type = 0;
} }
/*---------------------------- Hashing Policies -----------------------------*/ /*---------------------------- Hashing Policies -----------------------------*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment