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-changelog

[Xen-changelog] Modify to assume transactions

# HG changeset patch
# User cl349@xxxxxxxxxxxxxxxxxxxx
# Node ID c352c388aaecad70730737757533ba9840c0417f
# Parent  aa8776c44b6548a9d9c0363879e04bf127f0d7ae
Modify to assume transactions
Signed-off-by: Rusty Russel <rusty@xxxxxxxxxxxxxxx>
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>

diff -r aa8776c44b65 -r c352c388aaec 
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c
--- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c    Tue Jul 26 
17:16:55 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c    Tue Jul 26 
17:18:11 2005
@@ -220,8 +220,16 @@
        return err;
 }
 
-/* FIXME: When all tools use transactions, we can ignore events on
- * subpaths. */
+static unsigned int char_count(const char *str, char c)
+{
+       unsigned int i, ret = 0;
+
+       for (i = 0; str[i]; i++)
+               if (str[i] == c)
+                       ret++;
+       return ret;
+}
+
 static void dev_changed(struct xenbus_watch *watch, const char *node)
 {
        char busid[BUS_ID_SIZE];
@@ -231,28 +239,26 @@
        char *type;
 
        /* Node is of form device/<type>/<identifier>[/...] */
+       if (char_count(node, '/') != 3)
+               return;
+
        type = strchr(node, '/');
-       if (!type)
-               return;
        type++;
-
        typelen = strcspn(type, "/");
-       if (!typelen)
-               return;
        idlen = strcspn(type + typelen + 1, "/");
-       if (!idlen)
-               return;
        if (typelen + strlen("-") + idlen + 1 > BUS_ID_SIZE) {
                printk("Device for node %s is too big!\n", node);
                return;
        }
 
+       /* Does it exist? */
+       exists = xenbus_exists(node, "");
+
        /* Create it with a / so we can see if it exists. */
-       sprintf(busid, "%.*s/%.*s", typelen, type, idlen, type + typelen + 1);
-       exists = xenbus_exists("device", busid);
-       busid[typelen] = '-';
+       sprintf(busid, "%.*s-%.*s", typelen, type, idlen, type + typelen + 1);
 
        dev = xenbus_device_find(busid);
+       printk("xenbus: device %s %s\n", busid, dev ? "exists" : "new");
        if (dev && !exists) {
                printk("xenbus: Unregistering device %s\n", busid);
                /* FIXME: free? */

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Modify to assume transactions, Xen patchbot -unstable <=