diff options
-rw-r--r-- | fs/eventfd.c | 4 | ||||
-rw-r--r-- | include/linux/eventfd.h | 3 |
2 files changed, 4 insertions, 3 deletions
diff --git a/fs/eventfd.c b/fs/eventfd.c index bd420e6478ad..3ed4466177a7 100644 --- a/fs/eventfd.c +++ b/fs/eventfd.c | |||
@@ -203,7 +203,7 @@ asmlinkage long sys_eventfd2(unsigned int count, int flags) | |||
203 | int fd; | 203 | int fd; |
204 | struct eventfd_ctx *ctx; | 204 | struct eventfd_ctx *ctx; |
205 | 205 | ||
206 | if (flags & ~EFD_CLOEXEC) | 206 | if (flags & ~(EFD_CLOEXEC | EFD_NONBLOCK)) |
207 | return -EINVAL; | 207 | return -EINVAL; |
208 | 208 | ||
209 | ctx = kmalloc(sizeof(*ctx), GFP_KERNEL); | 209 | ctx = kmalloc(sizeof(*ctx), GFP_KERNEL); |
@@ -218,7 +218,7 @@ asmlinkage long sys_eventfd2(unsigned int count, int flags) | |||
218 | * anon_inode_getfd() will install the fd. | 218 | * anon_inode_getfd() will install the fd. |
219 | */ | 219 | */ |
220 | fd = anon_inode_getfd("[eventfd]", &eventfd_fops, ctx, | 220 | fd = anon_inode_getfd("[eventfd]", &eventfd_fops, ctx, |
221 | flags & O_CLOEXEC); | 221 | flags & (O_CLOEXEC | O_NONBLOCK)); |
222 | if (fd < 0) | 222 | if (fd < 0) |
223 | kfree(ctx); | 223 | kfree(ctx); |
224 | return fd; | 224 | return fd; |
diff --git a/include/linux/eventfd.h b/include/linux/eventfd.h index a6c0eaedb1b0..a667637b54e3 100644 --- a/include/linux/eventfd.h +++ b/include/linux/eventfd.h | |||
@@ -10,11 +10,12 @@ | |||
10 | 10 | ||
11 | #ifdef CONFIG_EVENTFD | 11 | #ifdef CONFIG_EVENTFD |
12 | 12 | ||
13 | /* For O_CLOEXEC */ | 13 | /* For O_CLOEXEC and O_NONBLOCK */ |
14 | #include <linux/fcntl.h> | 14 | #include <linux/fcntl.h> |
15 | 15 | ||
16 | /* Flags for eventfd2. */ | 16 | /* Flags for eventfd2. */ |
17 | #define EFD_CLOEXEC O_CLOEXEC | 17 | #define EFD_CLOEXEC O_CLOEXEC |
18 | #define EFD_NONBLOCK O_NONBLOCK | ||
18 | 19 | ||
19 | struct file *eventfd_fget(int fd); | 20 | struct file *eventfd_fget(int fd); |
20 | int eventfd_signal(struct file *file, int n); | 21 | int eventfd_signal(struct file *file, int n); |