Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

flag parameters add-on: remove epoll_create size param

Remove the size parameter from the new epoll_create syscall and renames the
syscall itself. The updated test program follows.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <fcntl.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <sys/syscall.h>

#ifndef __NR_epoll_create2
# ifdef __x86_64__
# define __NR_epoll_create2 291
# elif defined __i386__
# define __NR_epoll_create2 329
# else
# error "need __NR_epoll_create2"
# endif
#endif

#define EPOLL_CLOEXEC O_CLOEXEC

int
main (void)
{
int fd = syscall (__NR_epoll_create2, 0);
if (fd == -1)
{
puts ("epoll_create2(0) failed");
return 1;
}
int coe = fcntl (fd, F_GETFD);
if (coe == -1)
{
puts ("fcntl failed");
return 1;
}
if (coe & FD_CLOEXEC)
{
puts ("epoll_create2(0) set close-on-exec flag");
return 1;
}
close (fd);

fd = syscall (__NR_epoll_create2, EPOLL_CLOEXEC);
if (fd == -1)
{
puts ("epoll_create2(EPOLL_CLOEXEC) failed");
return 1;
}
coe = fcntl (fd, F_GETFD);
if (coe == -1)
{
puts ("fcntl failed");
return 1;
}
if ((coe & FD_CLOEXEC) == 0)
{
puts ("epoll_create2(EPOLL_CLOEXEC) set close-on-exec flag");
return 1;
}
close (fd);

puts ("OK");

return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Signed-off-by: Ulrich Drepper <drepper@redhat.com>
Acked-by: Davide Libenzi <davidel@xmailserver.org>
Cc: Michael Kerrisk <mtk.manpages@googlemail.com>
Cc: <linux-arch@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Ulrich Drepper and committed by
Linus Torvalds
9fe5ad9c e38b36f3

+17 -15
+1 -1
arch/x86/ia32/ia32entry.S
··· 828 828 .quad compat_sys_timerfd_gettime 829 829 .quad compat_sys_signalfd4 830 830 .quad sys_eventfd2 831 - .quad sys_epoll_create2 831 + .quad sys_epoll_create1 832 832 .quad sys_dup3 /* 330 */ 833 833 .quad sys_pipe2 834 834 .quad sys_inotify_init1
+1 -1
arch/x86/kernel/syscall_table_32.S
··· 328 328 .long sys_timerfd_gettime 329 329 .long sys_signalfd4 330 330 .long sys_eventfd2 331 - .long sys_epoll_create2 331 + .long sys_epoll_create1 332 332 .long sys_dup3 /* 330 */ 333 333 .long sys_pipe2 334 334 .long sys_inotify_init1
+10 -8
fs/eventpoll.c
··· 1046 1046 * RB tree. With the current implementation, the "size" parameter is ignored 1047 1047 * (besides sanity checks). 1048 1048 */ 1049 - asmlinkage long sys_epoll_create2(int size, int flags) 1049 + asmlinkage long sys_epoll_create1(int flags) 1050 1050 { 1051 1051 int error, fd = -1; 1052 1052 struct eventpoll *ep; ··· 1058 1058 return -EINVAL; 1059 1059 1060 1060 DNPRINTK(3, (KERN_INFO "[%p] eventpoll: sys_epoll_create(%d)\n", 1061 - current, size)); 1061 + current, flags)); 1062 1062 1063 1063 /* 1064 - * Sanity check on the size parameter, and create the internal data 1065 - * structure ( "struct eventpoll" ). 1064 + * Create the internal data structure ( "struct eventpoll" ). 1066 1065 */ 1067 - error = -EINVAL; 1068 - if (size <= 0 || (error = ep_alloc(&ep)) < 0) { 1066 + error = ep_alloc(&ep); 1067 + if (error < 0) { 1069 1068 fd = error; 1070 1069 goto error_return; 1071 1070 } ··· 1080 1081 1081 1082 error_return: 1082 1083 DNPRINTK(3, (KERN_INFO "[%p] eventpoll: sys_epoll_create(%d) = %d\n", 1083 - current, size, fd)); 1084 + current, flags, fd)); 1084 1085 1085 1086 return fd; 1086 1087 } 1087 1088 1088 1089 asmlinkage long sys_epoll_create(int size) 1089 1090 { 1090 - return sys_epoll_create2(size, 0); 1091 + if (size < 0) 1092 + return -EINVAL; 1093 + 1094 + return sys_epoll_create1(0); 1091 1095 } 1092 1096 1093 1097 /*
+1 -1
include/asm-x86/unistd_32.h
··· 334 334 #define __NR_timerfd_gettime 326 335 335 #define __NR_signalfd4 327 336 336 #define __NR_eventfd2 328 337 - #define __NR_epoll_create2 329 337 + #define __NR_epoll_create1 329 338 338 #define __NR_dup3 330 339 339 #define __NR_pipe2 331 340 340 #define __NR_inotify_init1 332
+2 -2
include/asm-x86/unistd_64.h
··· 645 645 __SYSCALL(__NR_signalfd4, sys_signalfd4) 646 646 #define __NR_eventfd2 290 647 647 __SYSCALL(__NR_eventfd2, sys_eventfd2) 648 - #define __NR_epoll_create2 291 649 - __SYSCALL(__NR_epoll_create2, sys_epoll_create2) 648 + #define __NR_epoll_create1 291 649 + __SYSCALL(__NR_epoll_create1, sys_epoll_create1) 650 650 #define __NR_dup3 292 651 651 __SYSCALL(__NR_dup3, sys_dup3) 652 652 #define __NR_pipe2 293
+1 -1
include/linux/eventpoll.h
··· 18 18 #include <linux/fcntl.h> 19 19 #include <linux/types.h> 20 20 21 - /* Flags for epoll_create2. */ 21 + /* Flags for epoll_create1. */ 22 22 #define EPOLL_CLOEXEC O_CLOEXEC 23 23 24 24 /* Valid opcodes to issue to sys_epoll_ctl() */
+1 -1
include/linux/syscalls.h
··· 431 431 asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp, 432 432 fd_set __user *exp, struct timeval __user *tvp); 433 433 asmlinkage long sys_epoll_create(int size); 434 - asmlinkage long sys_epoll_create2(int size, int flags); 434 + asmlinkage long sys_epoll_create1(int flags); 435 435 asmlinkage long sys_epoll_ctl(int epfd, int op, int fd, 436 436 struct epoll_event __user *event); 437 437 asmlinkage long sys_epoll_wait(int epfd, struct epoll_event __user *events,