WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

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

<Prev in Thread] Current Thread [Next in Thread>