Xen 
 
Home About Xen.org Xen Xen Summit Wiki Mailing List Bug Tracker Xen Downloads
 
   
 

xen-devel

[Xen-devel] [patch] fix xenbus race

To: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [patch] fix xenbus race
From: Gerd Knorr <kraxel@xxxxxxx>
Date: Mon, 31 Oct 2005 15:16:05 +0100
Delivery-date: Mon, 31 Oct 2005 14:13:15 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mozilla Thunderbird 1.0.6 (X11/20050715)
  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>