Subject: Re: [ofa-general] Re: [PATCH V4 10/10] net/bonding: Destroy bonding master when last slave is gone

From: Moni Shoua <[email-masked]>
Date: Wed, 29 Aug 2007 17:06:21 +0300

Jay Vosburgh wrote:
> Moni Shoua <[email-masked]> wrote:
> 
>> When bonding enslaves non Ethernet devices it takes pointers to functions 
>> in the module that owns the slaves. In this case it becomes unsafe
>> to keep the bonding master registered after last slave was unenslaved 
>> because we don't know if the pointers are still valid.  Destroying the bond when slave_cnt is zero
>> ensures that these functions be used anymore.
> 
> 	Would it not be simpler to run the bonding master through
> ether_setup() again when the final slave is released (to reset all of
> the pointers to their "ethernet" values)?  I'm presuming here the
> pointers of questionable validity are the ones set in the
> bond_setup_by_slave() copied from the slave_dev->hard_header, et al.
> 
> 	Having the bonding master disappear (but only sometimes) after
> the last slave is removed is a semantic change I'd rather not introduce
> if it's not necessary.

Thanks for the comments.

Having the master disappear is one way I could think of to solve the problem of leaving
the bonding module with pointers to illegal addresses.
The other way is to increase the usage count, with try_module_get(), of the module which owns of the slave.
To do that I  have to restore the field  owner in structure net_device (it was removed in 2.6).
Do you prefer the second approach? I wasn't sure about that.