Currently there are three possible returns from fsnotify_add_event(). We will be adding a fourth one. Let's change magic numbers to enum to make things clearer. Signed-off-by: Jan Kara <jack@xxxxxxx> --- fs/notify/fanotify/fanotify.c | 7 ++++--- fs/notify/inotify/inotify_fsnotify.c | 4 ++-- fs/notify/notification.c | 20 +++++++++++--------- include/linux/fsnotify_backend.h | 14 ++++++++++---- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c index d2f97ecca6a5..3c6c81e0c2c8 100644 --- a/fs/notify/fanotify/fanotify.c +++ b/fs/notify/fanotify/fanotify.c @@ -192,6 +192,7 @@ static int fanotify_handle_event(struct fsnotify_group *group, const unsigned char *file_name, u32 cookie) { int ret = 0; + enum fsn_add_event_ret ae_ret; struct fanotify_event_info *event; struct fsnotify_event *fsn_event; @@ -218,10 +219,10 @@ static int fanotify_handle_event(struct fsnotify_group *group, return -ENOMEM; fsn_event = &event->fse; - ret = fsnotify_add_event(group, fsn_event, fanotify_merge); - if (ret) { + ae_ret = fsnotify_add_event(group, fsn_event, fanotify_merge); + if (ae_ret != AE_INSERTED) { /* Permission events shouldn't be merged */ - BUG_ON(ret == 1 && mask & FAN_ALL_PERM_EVENTS); + BUG_ON(ae_ret == AE_MERGED && mask & FAN_ALL_PERM_EVENTS); /* Our event wasn't used in the end. Free it. */ fsnotify_destroy_event(group, fsn_event); diff --git a/fs/notify/inotify/inotify_fsnotify.c b/fs/notify/inotify/inotify_fsnotify.c index 2cd900c2c737..ac37192c59c5 100644 --- a/fs/notify/inotify/inotify_fsnotify.c +++ b/fs/notify/inotify/inotify_fsnotify.c @@ -72,7 +72,7 @@ int inotify_handle_event(struct fsnotify_group *group, struct inotify_inode_mark *i_mark; struct inotify_event_info *event; struct fsnotify_event *fsn_event; - int ret; + enum fsn_add_event_ret ret; int len = 0; int alloc_len = sizeof(struct inotify_event_info); @@ -109,7 +109,7 @@ int inotify_handle_event(struct fsnotify_group *group, strcpy(event->name, file_name); ret = fsnotify_add_event(group, fsn_event, inotify_merge); - if (ret) { + if (ret != AE_INSERTED) { /* Our event wasn't used in the end. Free it. */ fsnotify_destroy_event(group, fsn_event); } diff --git a/fs/notify/notification.c b/fs/notify/notification.c index a95d8e037aeb..12bfd6790fc4 100644 --- a/fs/notify/notification.c +++ b/fs/notify/notification.c @@ -84,12 +84,12 @@ void fsnotify_destroy_event(struct fsnotify_group *group, * added to the queue, 1 if the event was merged with some other queued event, * 2 if the queue of events has overflown. */ -int fsnotify_add_event(struct fsnotify_group *group, - struct fsnotify_event *event, - int (*merge)(struct list_head *, - struct fsnotify_event *)) +enum fsn_add_event_ret fsnotify_add_event( + struct fsnotify_group *group, + struct fsnotify_event *event, + int (*merge)(struct list_head *, struct fsnotify_event *)) { - int ret = 0; + enum fsn_add_event_ret ret = AE_INSERTED; struct list_head *list = &group->notification_list; pr_debug("%s: group=%p event=%p\n", __func__, group, event); @@ -97,7 +97,7 @@ int fsnotify_add_event(struct fsnotify_group *group, mutex_lock(&group->notification_mutex); if (group->q_len >= group->max_events) { - ret = 2; + ret = AE_OVERFLOW; /* Queue overflow event only if it isn't already queued */ if (!list_empty(&group->overflow_event->list)) { mutex_unlock(&group->notification_mutex); @@ -108,10 +108,12 @@ int fsnotify_add_event(struct fsnotify_group *group, } if (!list_empty(list) && merge) { - ret = merge(list, event); - if (ret) { + int merge_ret; + + merge_ret = merge(list, event); + if (merge_ret) { mutex_unlock(&group->notification_mutex); - return ret; + return AE_MERGED; } } diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h index 58205f33af02..b948a52ce65f 100644 --- a/include/linux/fsnotify_backend.h +++ b/include/linux/fsnotify_backend.h @@ -299,11 +299,17 @@ extern int fsnotify_fasync(int fd, struct file *file, int on); /* Free event from memory */ extern void fsnotify_destroy_event(struct fsnotify_group *group, struct fsnotify_event *event); +/* Return values of fsnotify_add_event() */ +enum fsn_add_event_ret { + AE_INSERTED, /* Event was added in the queue */ + AE_MERGED, /* Event was merged with another event, passed event unused */ + AE_OVERFLOW, /* Queue overflow, passed event unused */ +}; /* attach the event to the group notification queue */ -extern int fsnotify_add_event(struct fsnotify_group *group, - struct fsnotify_event *event, - int (*merge)(struct list_head *, - struct fsnotify_event *)); +extern enum fsn_add_event_ret fsnotify_add_event( + struct fsnotify_group *group, + struct fsnotify_event *event, + int (*merge)(struct list_head *, struct fsnotify_event *)); /* Remove passed event from groups notification queue */ extern void fsnotify_remove_event(struct fsnotify_group *group, struct fsnotify_event *event); /* true if the group notification queue is empty */ -- 2.6.6 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html