xen/xenbus: Add 'will_handle' callback support in xenbus_watch_path()
[linux-2.6-microblaze.git] / drivers / xen / xenbus / xenbus_client.c
index 0a21a12..0cd7289 100644 (file)
@@ -127,19 +127,22 @@ EXPORT_SYMBOL_GPL(xenbus_strstate);
  */
 int xenbus_watch_path(struct xenbus_device *dev, const char *path,
                      struct xenbus_watch *watch,
+                     bool (*will_handle)(struct xenbus_watch *,
+                                         const char *, const char *),
                      void (*callback)(struct xenbus_watch *,
                                       const char *, const char *))
 {
        int err;
 
        watch->node = path;
-       watch->will_handle = NULL;
+       watch->will_handle = will_handle;
        watch->callback = callback;
 
        err = register_xenbus_watch(watch);
 
        if (err) {
                watch->node = NULL;
+               watch->will_handle = NULL;
                watch->callback = NULL;
                xenbus_dev_fatal(dev, err, "adding watch on %s", path);
        }
@@ -166,6 +169,8 @@ EXPORT_SYMBOL_GPL(xenbus_watch_path);
  */
 int xenbus_watch_pathfmt(struct xenbus_device *dev,
                         struct xenbus_watch *watch,
+                        bool (*will_handle)(struct xenbus_watch *,
+                                       const char *, const char *),
                         void (*callback)(struct xenbus_watch *,
                                          const char *, const char *),
                         const char *pathfmt, ...)
@@ -182,7 +187,7 @@ int xenbus_watch_pathfmt(struct xenbus_device *dev,
                xenbus_dev_fatal(dev, -ENOMEM, "allocating path for watch");
                return -ENOMEM;
        }
-       err = xenbus_watch_path(dev, path, watch, callback);
+       err = xenbus_watch_path(dev, path, watch, will_handle, callback);
 
        if (err)
                kfree(path);