Skip to content

Commit

Permalink
fanotify: reorganize loop in fanotify_read()
Browse files Browse the repository at this point in the history
Swap the error / "read ok" branches in the main loop of fanotify_read().
We will grow the "read ok" part in the next patch and this makes the
indentation easier.  Also it is more common to have error conditions
inside an 'if' instead of the fast path.

Signed-off-by: Jan Kara <[email protected]>
Cc: Eric Paris <[email protected]>
Cc: Al Viro <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
jankara authored and torvalds committed Apr 3, 2014
1 parent 9573f79 commit d8aaab4
Showing 1 changed file with 24 additions and 22 deletions.
46 changes: 24 additions & 22 deletions fs/notify/fanotify/fanotify_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -275,35 +275,37 @@ static ssize_t fanotify_read(struct file *file, char __user *buf,
kevent = get_one_event(group, count);
mutex_unlock(&group->notification_mutex);

if (kevent) {
if (IS_ERR(kevent)) {
ret = PTR_ERR(kevent);
if (IS_ERR(kevent))
break;
}

if (!kevent) {
ret = -EAGAIN;
if (file->f_flags & O_NONBLOCK)
break;
ret = copy_event_to_user(group, kevent, buf);
/*
* Permission events get queued to wait for response.
* Other events can be destroyed now.
*/
if (!(kevent->mask & FAN_ALL_PERM_EVENTS))
fsnotify_destroy_event(group, kevent);
if (ret < 0)

ret = -ERESTARTSYS;
if (signal_pending(current))
break;

if (start != buf)
break;
buf += ret;
count -= ret;
schedule();
continue;
}

ret = -EAGAIN;
if (file->f_flags & O_NONBLOCK)
break;
ret = -ERESTARTSYS;
if (signal_pending(current))
break;

if (start != buf)
ret = copy_event_to_user(group, kevent, buf);
/*
* Permission events get queued to wait for response. Other
* events can be destroyed now.
*/
if (!(kevent->mask & FAN_ALL_PERM_EVENTS))
fsnotify_destroy_event(group, kevent);
if (ret < 0)
break;

schedule();
buf += ret;
count -= ret;
}

finish_wait(&group->notification_waitq, &wait);
Expand Down

0 comments on commit d8aaab4

Please sign in to comment.