|  |  | 
  
    |  |  | 
 
  |   |  | 
  
    |  |  | 
  
    |  |  | 
  
    |   xen-bugs
[Xen-bugs] [Bug 90] Oops on vif teardown 
| http://bugzilla.xensource.com/bugzilla/show_bug.cgi?id=90
------- Additional Comments From ryanh@xxxxxxxxxx  2005-08-18 20:44 -------
Created an attachment (id=43)
 --> (http://bugzilla.xensource.com/bugzilla/attachment.cgi?id=43&action=view)
Workaround for double call to br_del_if()
There appears to be a race between when the first br_del_if() call sets port
state to disabled, and then when the dev->br_port pointer is set to NULL. 
Every so often when unregister_netdevice() triggers the notify call change,
br_device_event() routine gets NETDEV_UNREGISTER event, but device->br_port
isn't NULL yet.  br_port is set to NULL after br_del_if() call del_npb() which
calls 
destroy_npb().  
So, good sequence:
br_del_if()
  del_nbp()
     // port state set to disabled, but dev->br_port is not NULL
     br_stp_disable_port()
     destroy_nbp_rcu()
        // set dev->br_port = NULL, among other things
        destroy_nbp()
notify_call_chain()
  br_device_event()
     dev->br_port == NULL, bail.
-----------------------------------------
bad sequence:
br_del_if()
  del_nbp()
     // port state set to disabled, but dev->br_port is not NULL
     br_stp_disable_port()
// notify call chain gets scheduled 
notify_call_chain()
  br_device_event()
     dev->br_port != NULL
     br_del_if()
       BOOM!
-- 
Configure bugmail: 
http://bugzilla.xensource.com/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
_______________________________________________
Xen-bugs mailing list
Xen-bugs@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-bugs
 | 
 |  | 
  
    |  |  |