": Warning: clearing HW address of %s while it " 
": %s: Warning: clearing HW address of %s while it " 
static int bond_release(struct net_device *bond_dev, struct net_device *slave_dev){	struct bonding *bond = bond_dev->priv;	struct slave *slave, *oldcurrent;	struct sockaddr addr;	int mac_addr_differ;	/* slave is not a slave or master is not master of this slave */	if (!(slave_dev->flags & IFF_SLAVE) ||	    (slave_dev->master != bond_dev)) {		printk(KERN_ERR DRV_NAME		       ": Error: %s: cannot release %s.\n",		       bond_dev->name, slave_dev->name);		return -EINVAL;	}	write_lock_bh(&bond->lock);	slave = bond_get_slave_by_dev(bond, slave_dev);	if (!slave) {		/* not a slave of this bond */		printk(KERN_INFO DRV_NAME		       ": %s: %s not enslaved\n",		       bond_dev->name, slave_dev->name);		return -EINVAL;	}	mac_addr_differ = memcmp(bond_dev->dev_addr,				 slave->perm_hwaddr,				 ETH_ALEN);	if (!mac_addr_differ && (bond->slave_cnt > 1)) {		printk(KERN_WARNING DRV_NAME		       ": Warning: the permanent HWaddr of %s "		       "- %02X:%02X:%02X:%02X:%02X:%02X - is "		       "still in use by %s. Set the HWaddr of "		       "%s to a different address to avoid "		       "conflicts.\n",		       slave_dev->name,		       slave->perm_hwaddr[0],		       slave->perm_hwaddr[1],		       slave->perm_hwaddr[2],		       slave->perm_hwaddr[3],		       slave->perm_hwaddr[4],		       slave->perm_hwaddr[5],		       bond_dev->name,		       slave_dev->name);	}	/* Inform AD package of unbinding of slave. */	if (bond->params.mode == BOND_MODE_8023AD) {		/* must be called before the slave is		 * detached from the list		 */		bond_3ad_unbind_slave(slave);	}	printk(KERN_INFO DRV_NAME	       ": %s: releasing %s interface %s\n",	       bond_dev->name,	       (slave->state == BOND_STATE_ACTIVE)	       ? "active" : "backup",	       slave_dev->name);	oldcurrent = bond->curr_active_slave;	bond->current_arp_slave = NULL;	/* release the slave from its bond */	bond_detach_slave(bond, slave);	bond_compute_features(bond);	if (bond->primary_slave == slave) {		bond->primary_slave = NULL;	}	if (oldcurrent == slave) {		bond_change_active_slave(bond, NULL);	}	if ((bond->params.mode == BOND_MODE_TLB) ||	    (bond->params.mode == BOND_MODE_ALB)) {		/* Must be called only after the slave has been		 * detached from the list and the curr_active_slave		 * has been cleared (if our_slave == old_current),		 * but before a new active slave is selected.		 */		bond_alb_deinit_slave(bond, slave);	}	if (oldcurrent == slave) {		bond_select_active_slave(bond);		if (!bond->curr_active_slave) {			printk(KERN_INFO DRV_NAME			       ": %s: now running without any active "			       "interface !\n",			       bond_dev->name);		}	}	if (bond->slave_cnt == 0) {		/* if the last slave was removed, zero the mac address		 * of the master so it will be set by the application		 * to the mac address of the first slave		 */		memset(bond_dev->dev_addr, 0, bond_dev->addr_len);		if (list_empty(&bond->vlan_list)) {			bond_dev->features |= NETIF_F_VLAN_CHALLENGED;		} else {			printk(KERN_WARNING DRV_NAME			       ": Warning: clearing HW address of %s while it "			       "still has VLANs.\n",			       bond_dev->name);			printk(KERN_WARNING DRV_NAME			       ": When re-adding slaves, make sure the bond's "			       "HW address matches its VLANs'.\n");		}	} else if ((bond_dev->features & NETIF_F_VLAN_CHALLENGED) &&		   !bond_has_challenged_slaves(bond)) {		printk(KERN_INFO DRV_NAME		       ": last VLAN challenged slave %s "		       "left bond %s. VLAN blocking is removed\n",		       slave_dev->name, bond_dev->name);		bond_dev->features &= ~NETIF_F_VLAN_CHALLENGED;	}	write_unlock_bh(&bond->lock);	bond_del_vlans_from_slave(bond, slave_dev);	/* If the mode USES_PRIMARY, then we should only remove its	 * promisc and mc settings if it was the curr_active_slave, but that was	 * already taken care of above when we detached the slave	 */	if (!USES_PRIMARY(bond->params.mode)) {		/* unset promiscuity level from slave */		if (bond_dev->flags & IFF_PROMISC) {			dev_set_promiscuity(slave_dev, -1);		}		/* unset allmulti level from slave */		if (bond_dev->flags & IFF_ALLMULTI) {			dev_set_allmulti(slave_dev, -1);		}		/* flush master's mc_list from slave */		bond_mc_list_flush(bond_dev, slave_dev);	}	netdev_set_master(slave_dev, NULL);	/* close slave before restoring its mac address */	dev_close(slave_dev);	/* restore original ("permanent") mac address */	memcpy(addr.sa_data, slave->perm_hwaddr, ETH_ALEN);	addr.sa_family = slave_dev->type;	dev_set_mac_address(slave_dev, &addr);	/* restore the original state of the	 * IFF_NOARP flag that might have been	 * set by bond_set_slave_inactive_flags()	 */	if ((slave->original_flags & IFF_NOARP) == 0) {		slave_dev->flags &= ~IFF_NOARP;	}	kfree(slave);	return 0;  /* deletion OK */}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/4e0952c74ee450ded86e8946ce58ea8dfd05b007/bond_main.c/clean/drivers/net/bonding/bond_main.c