From: Andrew Morton Cc: Jaroslav Kysela Cc: Stephen Hemminger Cc: Oleg Nesterov Cc: Chad Tindel Cc: Jay Vosburgh Signed-off-by: Andrew Morton --- drivers/net/bonding/bond_3ad.c | 7 +++++-- drivers/net/bonding/bond_alb.c | 7 +++++-- drivers/net/bonding/bond_main.c | 24 ++++++++++-------------- drivers/net/bonding/bond_sysfs.c | 11 ++++++----- 4 files changed, 26 insertions(+), 23 deletions(-) diff -puN drivers/net/bonding/bond_3ad.c~bonding-replace-system-timer-with-work-queue-tidy drivers/net/bonding/bond_3ad.c --- a/drivers/net/bonding/bond_3ad.c~bonding-replace-system-timer-with-work-queue-tidy +++ a/drivers/net/bonding/bond_3ad.c @@ -2099,11 +2099,14 @@ void bond_3ad_unbind_slave(struct slave */ void bond_3ad_state_machine_handler(struct work_struct *work) { - struct ad_bond_info *ad_info = container_of(work, struct ad_bond_info, ad_work.work); - struct bonding *bond = (struct bonding *)((char *)ad_info - offsetof(struct bonding, ad_info)); + struct ad_bond_info *ad_info; + struct bonding *bond; struct port *port; struct aggregator *aggregator; + ad_info = container_of(work, struct ad_bond_info, ad_work.work); + bond = container_of(ad_info, struct bonding, ad_info); + read_lock(&bond->lock); if (bond->kill_timers) { diff -puN drivers/net/bonding/bond_alb.c~bonding-replace-system-timer-with-work-queue-tidy drivers/net/bonding/bond_alb.c --- a/drivers/net/bonding/bond_alb.c~bonding-replace-system-timer-with-work-queue-tidy +++ a/drivers/net/bonding/bond_alb.c @@ -1367,11 +1367,14 @@ out: void bond_alb_monitor(struct work_struct *work) { - struct alb_bond_info *bond_info = container_of(work, struct alb_bond_info, alb_work.work); - struct bonding *bond = (struct bonding *)((char *)bond_info - offsetof(struct bonding, alb_info)); + struct alb_bond_info *bond_info; + struct bonding *bond; struct slave *slave; int i; + bond_info = container_of(work, struct alb_bond_info, alb_work.work); + bond = container_of(bond_info, struct bonding, alb_info); + read_lock(&bond->lock); if (bond->kill_timers) { diff -puN drivers/net/bonding/bond_main.c~bonding-replace-system-timer-with-work-queue-tidy drivers/net/bonding/bond_main.c --- a/drivers/net/bonding/bond_main.c~bonding-replace-system-timer-with-work-queue-tidy +++ a/drivers/net/bonding/bond_main.c @@ -2271,9 +2271,8 @@ void bond_mii_monitor(struct work_struct bond_set_carrier(bond); re_arm: - if (bond->params.miimon) { + if (bond->params.miimon) queue_delayed_work(bond_wq, &bond->mii_work, delta_in_ticks); - } out: read_unlock(&bond->lock); } @@ -2683,9 +2682,8 @@ void bond_loadbalance_arp_mon(struct wor } re_arm: - if (bond->params.arp_interval) { + if (bond->params.arp_interval) queue_delayed_work(bond_wq, &bond->arp_work, delta_in_ticks); - } out: read_unlock(&bond->lock); } @@ -2932,9 +2930,8 @@ void bond_activebackup_arp_mon(struct wo } re_arm: - if (bond->params.arp_interval) { + if (bond->params.arp_interval) queue_delayed_work(bond_wq, &bond->arp_work, delta_in_ticks); - } out: read_unlock(&bond->lock); } @@ -3529,7 +3526,7 @@ static int bond_open(struct net_device * return -1; } - INIT_DELAYED_WORK(alb_work, (void *)&bond_alb_monitor); + INIT_DELAYED_WORK(alb_work, bond_alb_monitor); queue_delayed_work(bond_wq, alb_work, 1); } @@ -3545,7 +3542,7 @@ static int bond_open(struct net_device * if (bond->params.mode == BOND_MODE_8023AD) { struct delayed_work *ad_work = &(BOND_AD_INFO(bond).ad_work); - INIT_DELAYED_WORK(ad_work, (void *)&bond_3ad_state_machine_handler); + INIT_DELAYED_WORK(ad_work, bond_3ad_state_machine_handler); queue_delayed_work(bond_wq, ad_work, 1); /* register to receive LACPDUs */ @@ -4250,12 +4247,11 @@ static int bond_init(struct net_device * rwlock_init(&bond->curr_slave_lock); /* initialize work */ - INIT_DELAYED_WORK(&bond->mii_work, (void *)&bond_mii_monitor); - if (params->mode == BOND_MODE_ACTIVEBACKUP) { - INIT_DELAYED_WORK(&bond->arp_work, (void *)&bond_activebackup_arp_mon); - } else { - INIT_DELAYED_WORK(&bond->arp_work, (void *)&bond_loadbalance_arp_mon); - } + INIT_DELAYED_WORK(&bond->mii_work, bond_mii_monitor); + if (params->mode == BOND_MODE_ACTIVEBACKUP) + INIT_DELAYED_WORK(&bond->arp_work, bond_activebackup_arp_mon); + else + INIT_DELAYED_WORK(&bond->arp_work, bond_loadbalance_arp_mon); bond->params = *params; /* copy params struct */ diff -puN drivers/net/bonding/bond_sysfs.c~bonding-replace-system-timer-with-work-queue-tidy drivers/net/bonding/bond_sysfs.c --- a/drivers/net/bonding/bond_sysfs.c~bonding-replace-system-timer-with-work-queue-tidy +++ a/drivers/net/bonding/bond_sysfs.c @@ -433,11 +433,12 @@ static ssize_t bonding_store_mode(struct if (bond->params.mode == BOND_MODE_ALB) bond_unset_master_alb_flags(bond); - if (new_value == BOND_MODE_ACTIVEBACKUP) { - INIT_DELAYED_WORK(&bond->arp_work, (void *)&bond_activebackup_arp_mon); - } else { - INIT_DELAYED_WORK(&bond->arp_work, (void *)&bond_loadbalance_arp_mon); - } + if (new_value == BOND_MODE_ACTIVEBACKUP) + INIT_DELAYED_WORK(&bond->arp_work, + bond_activebackup_arp_mon); + else + INIT_DELAYED_WORK(&bond->arp_work, + bond_loadbalance_arp_mon); bond->params.mode = new_value; bond_set_mode_ops(bond, bond->params.mode); _