Message ID | 20190213145443.26836-2-jack@suse.cz (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | fanotify: Make wait for permission event response interruptible | expand |
On Wed, Feb 13, 2019 at 4:54 PM Jan Kara <jack@suse.cz> wrote: > > Fold dequeue_event() into process_access_response(). This will make > changes to use of ->response field easier. > > Signed-off-by: Jan Kara <jack@suse.cz> Reviewed-by: Amir Goldstein <amir73il@gmail.com> > --- > fs/notify/fanotify/fanotify_user.c | 41 ++++++++++++-------------------------- > 1 file changed, 13 insertions(+), 28 deletions(-) > > diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c > index 9c870b0d2b56..908ebc421d15 100644 > --- a/fs/notify/fanotify/fanotify_user.c > +++ b/fs/notify/fanotify/fanotify_user.c > @@ -144,28 +144,6 @@ static int fill_event_metadata(struct fsnotify_group *group, > return ret; > } > > -static struct fanotify_perm_event_info *dequeue_event( > - struct fsnotify_group *group, int fd) > -{ > - struct fanotify_perm_event_info *event, *return_e = NULL; > - > - spin_lock(&group->notification_lock); > - list_for_each_entry(event, &group->fanotify_data.access_list, > - fae.fse.list) { > - if (event->fd != fd) > - continue; > - > - list_del_init(&event->fae.fse.list); > - return_e = event; > - break; > - } > - spin_unlock(&group->notification_lock); > - > - pr_debug("%s: found return_re=%p\n", __func__, return_e); > - > - return return_e; > -} > - > static int process_access_response(struct fsnotify_group *group, > struct fanotify_response *response_struct) > { > @@ -194,14 +172,21 @@ static int process_access_response(struct fsnotify_group *group, > if ((response & FAN_AUDIT) && !FAN_GROUP_FLAG(group, FAN_ENABLE_AUDIT)) > return -EINVAL; > > - event = dequeue_event(group, fd); > - if (!event) > - return -ENOENT; > + spin_lock(&group->notification_lock); > + list_for_each_entry(event, &group->fanotify_data.access_list, > + fae.fse.list) { > + if (event->fd != fd) > + continue; > > - event->response = response; > - wake_up(&group->fanotify_data.access_waitq); > + list_del_init(&event->fae.fse.list); > + event->response = response; > + spin_unlock(&group->notification_lock); > + wake_up(&group->fanotify_data.access_waitq); > + return 0; > + } > + spin_unlock(&group->notification_lock); > > - return 0; > + return -ENOENT; > } > > static ssize_t copy_event_to_user(struct fsnotify_group *group, > -- > 2.16.4 >
diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index 9c870b0d2b56..908ebc421d15 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c @@ -144,28 +144,6 @@ static int fill_event_metadata(struct fsnotify_group *group, return ret; } -static struct fanotify_perm_event_info *dequeue_event( - struct fsnotify_group *group, int fd) -{ - struct fanotify_perm_event_info *event, *return_e = NULL; - - spin_lock(&group->notification_lock); - list_for_each_entry(event, &group->fanotify_data.access_list, - fae.fse.list) { - if (event->fd != fd) - continue; - - list_del_init(&event->fae.fse.list); - return_e = event; - break; - } - spin_unlock(&group->notification_lock); - - pr_debug("%s: found return_re=%p\n", __func__, return_e); - - return return_e; -} - static int process_access_response(struct fsnotify_group *group, struct fanotify_response *response_struct) { @@ -194,14 +172,21 @@ static int process_access_response(struct fsnotify_group *group, if ((response & FAN_AUDIT) && !FAN_GROUP_FLAG(group, FAN_ENABLE_AUDIT)) return -EINVAL; - event = dequeue_event(group, fd); - if (!event) - return -ENOENT; + spin_lock(&group->notification_lock); + list_for_each_entry(event, &group->fanotify_data.access_list, + fae.fse.list) { + if (event->fd != fd) + continue; - event->response = response; - wake_up(&group->fanotify_data.access_waitq); + list_del_init(&event->fae.fse.list); + event->response = response; + spin_unlock(&group->notification_lock); + wake_up(&group->fanotify_data.access_waitq); + return 0; + } + spin_unlock(&group->notification_lock); - return 0; + return -ENOENT; } static ssize_t copy_event_to_user(struct fsnotify_group *group,
Fold dequeue_event() into process_access_response(). This will make changes to use of ->response field easier. Signed-off-by: Jan Kara <jack@suse.cz> --- fs/notify/fanotify/fanotify_user.c | 41 ++++++++++++-------------------------- 1 file changed, 13 insertions(+), 28 deletions(-)