|
@@ -1046,11 +1046,14 @@ retry:
|
|
* RB tree. With the current implementation, the "size" parameter is ignored
|
|
* RB tree. With the current implementation, the "size" parameter is ignored
|
|
* (besides sanity checks).
|
|
* (besides sanity checks).
|
|
*/
|
|
*/
|
|
-asmlinkage long sys_epoll_create(int size)
|
|
|
|
|
|
+asmlinkage long sys_epoll_create2(int size, int flags)
|
|
{
|
|
{
|
|
int error, fd = -1;
|
|
int error, fd = -1;
|
|
struct eventpoll *ep;
|
|
struct eventpoll *ep;
|
|
|
|
|
|
|
|
+ if (flags & ~EPOLL_CLOEXEC)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+
|
|
DNPRINTK(3, (KERN_INFO "[%p] eventpoll: sys_epoll_create(%d)\n",
|
|
DNPRINTK(3, (KERN_INFO "[%p] eventpoll: sys_epoll_create(%d)\n",
|
|
current, size));
|
|
current, size));
|
|
|
|
|
|
@@ -1068,7 +1071,8 @@ asmlinkage long sys_epoll_create(int size)
|
|
* Creates all the items needed to setup an eventpoll file. That is,
|
|
* Creates all the items needed to setup an eventpoll file. That is,
|
|
* a file structure and a free file descriptor.
|
|
* a file structure and a free file descriptor.
|
|
*/
|
|
*/
|
|
- fd = anon_inode_getfd("[eventpoll]", &eventpoll_fops, ep, 0);
|
|
|
|
|
|
+ fd = anon_inode_getfd("[eventpoll]", &eventpoll_fops, ep,
|
|
|
|
+ flags & O_CLOEXEC);
|
|
if (fd < 0)
|
|
if (fd < 0)
|
|
ep_free(ep);
|
|
ep_free(ep);
|
|
|
|
|
|
@@ -1079,6 +1083,11 @@ error_return:
|
|
return fd;
|
|
return fd;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+asmlinkage long sys_epoll_create(int size)
|
|
|
|
+{
|
|
|
|
+ return sys_epoll_create2(size, 0);
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* The following function implements the controller interface for
|
|
* The following function implements the controller interface for
|
|
* the eventpoll file that enables the insertion/removal/change of
|
|
* the eventpoll file that enables the insertion/removal/change of
|