diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-08-14 06:19:59 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-08-14 06:19:59 -0400 |
commit | 8d7ccaa545490cdffdfaff0842436a8dd85cf47b (patch) | |
tree | 8129b5907161bc6ae26deb3645ce1e280c5e1f51 /fs/signalfd.c | |
parent | b2139aa0eec330c711c5a279db361e5ef1178e78 (diff) | |
parent | 30a2f3c60a84092c8084dfe788b710f8d0768cd4 (diff) |
Merge commit 'v2.6.27-rc3' into x86/prototypes
Conflicts:
include/asm-x86/dma-mapping.h
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'fs/signalfd.c')
-rw-r--r-- | fs/signalfd.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/fs/signalfd.c b/fs/signalfd.c index 619725644c75..9c39bc7f8431 100644 --- a/fs/signalfd.c +++ b/fs/signalfd.c | |||
@@ -205,11 +205,19 @@ static const struct file_operations signalfd_fops = { | |||
205 | .read = signalfd_read, | 205 | .read = signalfd_read, |
206 | }; | 206 | }; |
207 | 207 | ||
208 | asmlinkage long sys_signalfd(int ufd, sigset_t __user *user_mask, size_t sizemask) | 208 | asmlinkage long sys_signalfd4(int ufd, sigset_t __user *user_mask, |
209 | size_t sizemask, int flags) | ||
209 | { | 210 | { |
210 | sigset_t sigmask; | 211 | sigset_t sigmask; |
211 | struct signalfd_ctx *ctx; | 212 | struct signalfd_ctx *ctx; |
212 | 213 | ||
214 | /* Check the SFD_* constants for consistency. */ | ||
215 | BUILD_BUG_ON(SFD_CLOEXEC != O_CLOEXEC); | ||
216 | BUILD_BUG_ON(SFD_NONBLOCK != O_NONBLOCK); | ||
217 | |||
218 | if (flags & ~(SFD_CLOEXEC | SFD_NONBLOCK)) | ||
219 | return -EINVAL; | ||
220 | |||
213 | if (sizemask != sizeof(sigset_t) || | 221 | if (sizemask != sizeof(sigset_t) || |
214 | copy_from_user(&sigmask, user_mask, sizeof(sigmask))) | 222 | copy_from_user(&sigmask, user_mask, sizeof(sigmask))) |
215 | return -EINVAL; | 223 | return -EINVAL; |
@@ -227,7 +235,8 @@ asmlinkage long sys_signalfd(int ufd, sigset_t __user *user_mask, size_t sizemas | |||
227 | * When we call this, the initialization must be complete, since | 235 | * When we call this, the initialization must be complete, since |
228 | * anon_inode_getfd() will install the fd. | 236 | * anon_inode_getfd() will install the fd. |
229 | */ | 237 | */ |
230 | ufd = anon_inode_getfd("[signalfd]", &signalfd_fops, ctx); | 238 | ufd = anon_inode_getfd("[signalfd]", &signalfd_fops, ctx, |
239 | flags & (O_CLOEXEC | O_NONBLOCK)); | ||
231 | if (ufd < 0) | 240 | if (ufd < 0) |
232 | kfree(ctx); | 241 | kfree(ctx); |
233 | } else { | 242 | } else { |
@@ -249,3 +258,9 @@ asmlinkage long sys_signalfd(int ufd, sigset_t __user *user_mask, size_t sizemas | |||
249 | 258 | ||
250 | return ufd; | 259 | return ufd; |
251 | } | 260 | } |
261 | |||
262 | asmlinkage long sys_signalfd(int ufd, sigset_t __user *user_mask, | ||
263 | size_t sizemask) | ||
264 | { | ||
265 | return sys_signalfd4(ufd, user_mask, sizemask, 0); | ||
266 | } | ||