 rtnl_lock(); 
static int __init bonding_init(void){	struct bond_params params;	int i;	int res;	printk(KERN_INFO "%s", version);	res = bond_check_params(&params);	if (res) {		return res;	}	rtnl_lock();#ifdef CONFIG_PROC_FS	bond_create_proc_dir();#endif	for (i = 0; i < max_bonds; i++) {		struct net_device *bond_dev;		bond_dev = alloc_netdev(sizeof(struct bonding), "", ether_setup);		if (!bond_dev) {			res = -ENOMEM;			goto out_err;		}		res = dev_alloc_name(bond_dev, "bond%d");		if (res < 0) {			free_netdev(bond_dev);			goto out_err;		}		/* bond_init() must be called after dev_alloc_name() (for the		 * /proc files), but before register_netdevice(), because we		 * need to set function pointers.		 */		res = bond_init(bond_dev, &params);		if (res < 0) {			free_netdev(bond_dev);			goto out_err;		}		SET_MODULE_OWNER(bond_dev);		res = register_netdevice(bond_dev);		if (res < 0) {			bond_deinit(bond_dev);			free_netdev(bond_dev);			goto out_err;		}	}	rtnl_unlock();	register_netdevice_notifier(&bond_netdev_notifier);	register_inetaddr_notifier(&bond_inetaddr_notifier);	return 0;out_err:	/*	 * rtnl_unlock() will run netdev_run_todo(), putting the	 * thus-far-registered bonding devices into a state which	 * unregigister_netdevice() will accept	 */	rtnl_unlock();	rtnl_lock();	/* free and unregister all bonds that were successfully added */	bond_free_all();	rtnl_unlock();	return res;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/dfe60397a62b1a5ebc7f05fd65463d3e29397677/bond_main.c/clean/drivers/net/bonding/bond_main.c