[1/6] fanotify: Fold dequeue_event() into process_access_response()
diff mbox series

Message ID 20190213145443.26836-2-jack@suse.cz
State New
Headers show
Series
  • fanotify: Make wait for permission event response interruptible
Related show

Commit Message

Jan Kara Feb. 13, 2019, 2:54 p.m. UTC
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(-)

Comments

Amir Goldstein Feb. 13, 2019, 7:42 p.m. UTC | #1
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
>

Patch
diff mbox series

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,