[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [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-19 18:58 ------- The real race is between when a call_rcu() callback runs and when the netif_destroy() calls unregister_netdev(). When we get an oops, the brctl delif IOCTL has run, and br_del_if() has been called setting the port state to DISABLED, and then queues up an rcu callback, destroy_npb(), which will set dev->br_port = NULL. add_del_if() // IOCTL handler from brctl delif // xen-br0 $VIF br_del_if() del_nbp() br_stp_disable_port() // Set port->state = BR_STATE_DISABLED call_rcu(destroy_nbp_rcu) // setup rcu callback to run // destory_nbp() which will set // dev->br_port = NULL After the xen scripts have called the brctl command, xend sends the disconnect and destroy control messages, which trigger: netif_destroy() unregister_netdev() unregister_netdevice() notify_call_chain(NETDEV_UNREGISTER) br_device_event() // The first thing done here is to check // the device's br_port to see if it is // NULL If the destory_nbp_rcu() callback isn't fired before br_device_event() checks dev->br_port, then the NULL check fails and a second call to br_del_if() is invoked and we blow up in sysfs/kobject BUG_ON() for ref counts of dentrys. [2] -- 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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |