switch epoll_wait(2) to fget_light()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 27 Aug 2012 01:27:40 +0000 (21:27 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 27 Sep 2012 01:10:07 +0000 (21:10 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/eventpoll.c

index eedec84c1809173eb4c627815ad70122de66eeb3..567ae72e155d8cf132eb91bfd0222514b5ec57b7 100644 (file)
@@ -1809,7 +1809,7 @@ error_return:
 SYSCALL_DEFINE4(epoll_wait, int, epfd, struct epoll_event __user *, events,
                int, maxevents, int, timeout)
 {
-       int error;
+       int error, fput_needed;
        struct file *file;
        struct eventpoll *ep;
 
@@ -1825,7 +1825,7 @@ SYSCALL_DEFINE4(epoll_wait, int, epfd, struct epoll_event __user *, events,
 
        /* Get the "struct file *" for the eventpoll file */
        error = -EBADF;
-       file = fget(epfd);
+       file = fget_light(epfd, &fput_needed);
        if (!file)
                goto error_return;
 
@@ -1847,7 +1847,7 @@ SYSCALL_DEFINE4(epoll_wait, int, epfd, struct epoll_event __user *, events,
        error = ep_poll(ep, events, maxevents, timeout);
 
 error_fput:
-       fput(file);
+       fput_light(file, fput_needed);
 error_return:
 
        return error;