Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 207626
b: refs/heads/master
c: b4e4e14
h: refs/heads/master
v: v3
  • Loading branch information
Eric Paris committed Jul 28, 2010
1 parent 86a3e99 commit f638c12
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 74766bbfa99adf8cb8119df6121851edba21c9d9
refs/heads/master: b4e4e1407312ae5a267ed7d716e6d4e7120a8430
29 changes: 25 additions & 4 deletions trunk/fs/notify/notification.c
Original file line number Diff line number Diff line change
Expand Up @@ -284,11 +284,33 @@ static void initialize_event(struct fsnotify_event *event)

spin_lock_init(&event->lock);

event->data_type = FSNOTIFY_EVENT_NONE;

INIT_LIST_HEAD(&event->private_data_list);
}

struct fsnotify_event *fsnotify_clone_event(struct fsnotify_event *old_event)
{
struct fsnotify_event *event;

event = kmem_cache_alloc(fsnotify_event_cachep, GFP_KERNEL);
if (!event)
return NULL;

memcpy(event, old_event, sizeof(*event));
initialize_event(event);

if (event->name_len) {
event->file_name = kstrdup(old_event->file_name, GFP_KERNEL);
if (!event->file_name) {
kmem_cache_free(fsnotify_event_cachep, event);
return NULL;
}
}
if (event->data_type == FSNOTIFY_EVENT_PATH)
path_get(&event->path);

return event;
}

/*
* fsnotify_create_event - Allocate a new event which will be sent to each
* group's handle_event function if the group was interested in this
Expand Down Expand Up @@ -324,6 +346,7 @@ struct fsnotify_event *fsnotify_create_event(struct inode *to_tell, __u32 mask,

event->sync_cookie = cookie;
event->to_tell = to_tell;
event->data_type = data_type;

switch (data_type) {
case FSNOTIFY_EVENT_FILE: {
Expand All @@ -340,12 +363,10 @@ struct fsnotify_event *fsnotify_create_event(struct inode *to_tell, __u32 mask,
event->path.dentry = path->dentry;
event->path.mnt = path->mnt;
path_get(&event->path);
event->data_type = FSNOTIFY_EVENT_PATH;
break;
}
case FSNOTIFY_EVENT_INODE:
event->inode = data;
event->data_type = FSNOTIFY_EVENT_INODE;
break;
case FSNOTIFY_EVENT_NONE:
event->inode = NULL;
Expand Down
3 changes: 3 additions & 0 deletions trunk/include/linux/fsnotify_backend.h
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,9 @@ extern struct fsnotify_event *fsnotify_create_event(struct inode *to_tell, __u32
void *data, int data_is, const char *name,
u32 cookie, gfp_t gfp);

/* fanotify likes to change events after they are on lists... */
extern struct fsnotify_event *fsnotify_clone_event(struct fsnotify_event *old_event);

#else

static inline void fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is,
Expand Down

0 comments on commit f638c12

Please sign in to comment.