]> Pileus Git - ~andy/linux/blobdiff - drivers/xen/grant-table.c
xen-gnt: prevent adding duplicate gnt callbacks
[~andy/linux] / drivers / xen / grant-table.c
index 04cdeb8e371944a12237da0191648e31f5a44c2f..c4d2298893b189f61b75da4ed9aa555a90d8878a 100644 (file)
@@ -730,9 +730,18 @@ void gnttab_request_free_callback(struct gnttab_free_callback *callback,
                                  void (*fn)(void *), void *arg, u16 count)
 {
        unsigned long flags;
+       struct gnttab_free_callback *cb;
+
        spin_lock_irqsave(&gnttab_list_lock, flags);
-       if (callback->next)
-               goto out;
+
+       /* Check if the callback is already on the list */
+       cb = gnttab_free_callback_list;
+       while (cb) {
+               if (cb == callback)
+                       goto out;
+               cb = cb->next;
+       }
+
        callback->fn = fn;
        callback->arg = arg;
        callback->count = count;