|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] [patch] fix xenbus race
Hi,
Watch events may get lost, the xenstored response races against the new
watch being added to the watch list in register_xenbus_watch(). Fixed
by adding the watch to the list unconditionally, and remove it in the
error case.
That one fixes the network issues I'm seeing. Due to the race the
"online" hotplug event for the vif backend was lost sometimes.
please apply,
Gerd
diff -r 43676a509982 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_xs.c
--- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_xs.c Sun Oct 30
18:23:36 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_xs.c Mon Oct 31
15:08:14 2005
@@ -682,14 +682,15 @@
spin_lock(&watches_lock);
BUG_ON(find_watch(token));
+ list_add(&watch->list, &watches);
spin_unlock(&watches_lock);
err = xs_watch(watch->node, token);
/* Ignore errors due to multiple registration. */
- if ((err == 0) || (err == -EEXIST)) {
+ if ((err != 0) && (err != -EEXIST)) {
spin_lock(&watches_lock);
- list_add(&watch->list, &watches);
+ list_del(&watch->list);
spin_unlock(&watches_lock);
}
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [Xen-devel] [patch] fix xenbus race,
Gerd Knorr <=
|
|
|
|
|