return false;
 }
 
-static int fanotify_merge(struct list_head *list, struct fsnotify_event *event)
+static int fanotify_merge(struct list_head *list,
+                         struct fsnotify_event *event,
+                         void **arg)
 {
        struct fsnotify_event_holder *test_holder;
        struct fsnotify_event *test_event;
 
        pr_debug("%s: group=%p event=%p\n", __func__, group, event);
 
-       ret = fsnotify_add_notify_event(group, event, NULL, fanotify_merge);
+       ret = fsnotify_add_notify_event(group, event, NULL, fanotify_merge, NULL);
        /* -EEXIST means this event was merged with another, not that it was an error */
        if (ret == -EEXIST)
                ret = 0;
 
        return false;
 }
 
-static int inotify_merge(struct list_head *list, struct fsnotify_event *event)
+static int inotify_merge(struct list_head *list,
+                        struct fsnotify_event *event,
+                        void **arg)
 {
        struct fsnotify_event_holder *last_holder;
        struct fsnotify_event *last_event;
        fsn_event_priv->group = group;
        event_priv->wd = wd;
 
-       ret = fsnotify_add_notify_event(group, event, fsn_event_priv, inotify_merge);
+       ret = fsnotify_add_notify_event(group, event, fsn_event_priv, inotify_merge, NULL);
        if (ret) {
                inotify_free_event_priv(fsn_event_priv);
                /* EEXIST says we tail matched, EOVERFLOW isn't something
 
        fsn_event_priv->group = group;
        event_priv->wd = i_mark->wd;
 
-       ret = fsnotify_add_notify_event(group, ignored_event, fsn_event_priv, NULL);
+       ret = fsnotify_add_notify_event(group, ignored_event, fsn_event_priv, NULL, NULL);
        if (ret)
                inotify_free_event_priv(fsn_event_priv);
 
 
  */
 int fsnotify_add_notify_event(struct fsnotify_group *group, struct fsnotify_event *event,
                              struct fsnotify_event_private_data *priv,
-                             int (*merge)(struct list_head *, struct fsnotify_event *))
+                             int (*merge)(struct list_head *,
+                                          struct fsnotify_event *,
+                                          void **arg),
+                             void **arg)
 {
        struct fsnotify_event_holder *holder = NULL;
        struct list_head *list = &group->notification_list;
        if (!list_empty(list) && merge) {
                int ret;
 
-               ret = merge(list, event);
+               ret = merge(list, event, arg);
                if (ret) {
                        mutex_unlock(&group->notification_mutex);
                        if (holder != &event->holder)
 
 extern int fsnotify_add_notify_event(struct fsnotify_group *group,
                                     struct fsnotify_event *event,
                                     struct fsnotify_event_private_data *priv,
-                                    int (*merge)(struct list_head *, struct fsnotify_event *));
+                                    int (*merge)(struct list_head *,
+                                                 struct fsnotify_event *,
+                                                 void **),
+                                    void **arg);
 /* true if the group notification queue is empty */
 extern bool fsnotify_notify_queue_is_empty(struct fsnotify_group *group);
 /* return, but do not dequeue the first event on the notification queue */