OSDN Git Service

ARM: compat: remove KERNEL_DS usage in sys_oabi_epoll_ctl()
authorRussell King <rmk+kernel@armlinux.org.uk>
Fri, 3 Apr 2020 10:06:47 +0000 (11:06 +0100)
committerRussell King <rmk+kernel@armlinux.org.uk>
Tue, 21 Apr 2020 16:49:30 +0000 (17:49 +0100)
We no longer need to switch to KERNEL_DS mode in sys_oabi_epoll_ctl()
as we can use do_epoll_ctl() to avoid the additional copy.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
arch/arm/kernel/sys_oabi-compat.c

index 17bd32b..0203e54 100644 (file)
@@ -253,20 +253,15 @@ asmlinkage long sys_oabi_epoll_ctl(int epfd, int op, int fd,
 {
        struct oabi_epoll_event user;
        struct epoll_event kernel;
-       mm_segment_t fs;
-       long ret;
 
-       if (op == EPOLL_CTL_DEL)
-               return sys_epoll_ctl(epfd, op, fd, NULL);
-       if (copy_from_user(&user, event, sizeof(user)))
+       if (ep_op_has_event(op) &&
+           copy_from_user(&user, event, sizeof(user)))
                return -EFAULT;
+
        kernel.events = user.events;
        kernel.data   = user.data;
-       fs = get_fs();
-       set_fs(KERNEL_DS);
-       ret = sys_epoll_ctl(epfd, op, fd, &kernel);
-       set_fs(fs);
-       return ret;
+
+       return do_epoll_ctl(epfd, op, fd, &kernel, false);
 }
 
 asmlinkage long sys_oabi_epoll_wait(int epfd,