Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c4f283b1f275e5528c13c119e5cfc80cdba55d00
Commit:     c4f283b1f275e5528c13c119e5cfc80cdba55d00
Parent:     c3442e296517aee733d62fc3fe03211598902c7d
Author:     Jay Vosburgh <[EMAIL PROTECTED]>
AuthorDate: Wed Feb 28 17:03:20 2007 -0800
Committer:  Jeff Garzik <[EMAIL PROTECTED]>
CommitDate: Tue Mar 6 06:08:11 2007 -0500

    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 <[EMAIL PROTECTED]>.
    
    Signed-off-by: Jay Vosburgh <[EMAIL PROTECTED]>
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
---
 drivers/net/bonding/bond_main.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index ea73ebf..68afcb5 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -3423,6 +3423,9 @@ void bond_register_arp(struct bonding *bond)
 {
        struct packet_type *pt = &bond->arp_mon_pt;
 
+       if (pt->type)
+               return;
+
        pt->type = htons(ETH_P_ARP);
        pt->dev = NULL; /*bond->dev;XXX*/
        pt->func = bond_arp_rcv;
@@ -3431,7 +3434,10 @@ void bond_register_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 -----------------------------*/
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to