]> Pileus Git - ~andy/linux/blobdiff - drivers/net/bonding/bonding.h
bonding: Fix race at module unload
[~andy/linux] / drivers / net / bonding / bonding.h
index b8180600a309545f720800bf68708969450564cb..e1e4734e23ce7191d0ddb23809c5a710bafa3190 100644 (file)
@@ -22,8 +22,8 @@
 #include "bond_3ad.h"
 #include "bond_alb.h"
 
-#define DRV_VERSION    "3.2.1"
-#define DRV_RELDATE    "October 15, 2007"
+#define DRV_VERSION    "3.2.3"
+#define DRV_RELDATE    "December 6, 2007"
 #define DRV_NAME       "bonding"
 #define DRV_DESCRIPTION        "Ethernet Channel Bonding Driver"
 
@@ -184,8 +184,6 @@ struct bonding {
        s32      slave_cnt; /* never change this value outside the attach/detach wrappers */
        rwlock_t lock;
        rwlock_t curr_slave_lock;
-       struct   timer_list mii_timer;
-       struct   timer_list arp_timer;
        s8       kill_timers;
        s8       send_grat_arp;
        s8       setup_by_slave;
@@ -199,12 +197,18 @@ struct bonding {
        int      (*xmit_hash_policy)(struct sk_buff *, struct net_device *, int);
        __be32   master_ip;
        u16      flags;
+       u16      rr_tx_counter;
        struct   ad_bond_info ad_info;
        struct   alb_bond_info alb_info;
        struct   bond_params params;
        struct   list_head vlan_list;
        struct   vlan_group *vlgrp;
        struct   packet_type arp_mon_pt;
+       struct   workqueue_struct *wq;
+       struct   delayed_work mii_work;
+       struct   delayed_work arp_work;
+       struct   delayed_work alb_work;
+       struct   delayed_work ad_work;
 };
 
 /**
@@ -298,7 +302,6 @@ int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_de
 int bond_create(char *name, struct bond_params *params, struct bonding **newbond);
 void bond_destroy(struct bonding *bond);
 int  bond_release_and_destroy(struct net_device *bond_dev, struct net_device *slave_dev);
-void bond_deinit(struct net_device *bond_dev);
 int bond_create_sysfs(void);
 void bond_destroy_sysfs(void);
 void bond_destroy_sysfs_entry(struct bonding *bond);
@@ -307,9 +310,9 @@ int bond_create_slave_symlinks(struct net_device *master, struct net_device *sla
 void bond_destroy_slave_symlinks(struct net_device *master, struct net_device *slave);
 int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev);
 int bond_release(struct net_device *bond_dev, struct net_device *slave_dev);
-void bond_mii_monitor(struct net_device *bond_dev);
-void bond_loadbalance_arp_mon(struct net_device *bond_dev);
-void bond_activebackup_arp_mon(struct net_device *bond_dev);
+void bond_mii_monitor(struct work_struct *);
+void bond_loadbalance_arp_mon(struct work_struct *);
+void bond_activebackup_arp_mon(struct work_struct *);
 void bond_set_mode_ops(struct bonding *bond, int mode);
 int bond_parse_parm(char *mode_arg, struct bond_parm_tbl *tbl);
 void bond_select_active_slave(struct bonding *bond);