From: Ulrich Drepper This patch just extends the anon_inode_getfd interface to take an additional parameter with a flag value. The flag value is passed on to get_unused_fd_flags in anticipation for a use with the O_CLOEXEC flag. No actual semantic changes here, the changed callers all pass 0 for now. Signed-off-by: Ulrich Drepper Acked-by: Davide Libenzi Cc: Michael Kerrisk Signed-off-by: Andrew Morton --- fs/anon_inodes.c | 9 +++++---- fs/eventfd.c | 2 +- fs/eventpoll.c | 2 +- fs/signalfd.c | 3 ++- fs/timerfd.c | 2 +- include/linux/anon_inodes.h | 2 +- 6 files changed, 11 insertions(+), 9 deletions(-) diff -puN fs/anon_inodes.c~flag-parameters-anon_inode_getfd-extension fs/anon_inodes.c --- a/fs/anon_inodes.c~flag-parameters-anon_inode_getfd-extension +++ a/fs/anon_inodes.c @@ -58,8 +58,9 @@ static struct dentry_operations anon_ino * of the file * * @name: [in] name of the "class" of the new file - * @fops [in] file operations for the new file - * @priv [in] private data for the new file (will be file's private_data) + * @fops: [in] file operations for the new file + * @priv: [in] private data for the new file (will be file's private_data) + * @flags: [in] flags * * Creates a new file by hooking it on a single inode. This is useful for files * that do not need to have a full-fledged inode in order to operate correctly. @@ -68,7 +69,7 @@ static struct dentry_operations anon_ino * setup. Returns new descriptor or -error. */ int anon_inode_getfd(const char *name, const struct file_operations *fops, - void *priv) + void *priv, int flags) { struct qstr this; struct dentry *dentry; @@ -78,7 +79,7 @@ int anon_inode_getfd(const char *name, c if (IS_ERR(anon_inode_inode)) return -ENODEV; - error = get_unused_fd(); + error = get_unused_fd_flags(flags); if (error < 0) return error; fd = error; diff -puN fs/eventfd.c~flag-parameters-anon_inode_getfd-extension fs/eventfd.c --- a/fs/eventfd.c~flag-parameters-anon_inode_getfd-extension +++ a/fs/eventfd.c @@ -214,7 +214,7 @@ asmlinkage long sys_eventfd(unsigned int * When we call this, the initialization must be complete, since * anon_inode_getfd() will install the fd. */ - fd = anon_inode_getfd("[eventfd]", &eventfd_fops, ctx); + fd = anon_inode_getfd("[eventfd]", &eventfd_fops, ctx, 0); if (fd < 0) kfree(ctx); return fd; diff -puN fs/eventpoll.c~flag-parameters-anon_inode_getfd-extension fs/eventpoll.c --- a/fs/eventpoll.c~flag-parameters-anon_inode_getfd-extension +++ a/fs/eventpoll.c @@ -1068,7 +1068,7 @@ asmlinkage long sys_epoll_create(int siz * Creates all the items needed to setup an eventpoll file. That is, * a file structure and a free file descriptor. */ - fd = anon_inode_getfd("[eventpoll]", &eventpoll_fops, ep); + fd = anon_inode_getfd("[eventpoll]", &eventpoll_fops, ep, 0); if (fd < 0) ep_free(ep); diff -puN fs/signalfd.c~flag-parameters-anon_inode_getfd-extension fs/signalfd.c --- a/fs/signalfd.c~flag-parameters-anon_inode_getfd-extension +++ a/fs/signalfd.c @@ -227,7 +227,8 @@ asmlinkage long sys_signalfd(int ufd, si * When we call this, the initialization must be complete, since * anon_inode_getfd() will install the fd. */ - ufd = anon_inode_getfd("[signalfd]", &signalfd_fops, ctx); + ufd = anon_inode_getfd("[signalfd]", &signalfd_fops, ctx, + 0); if (ufd < 0) kfree(ctx); } else { diff -puN fs/timerfd.c~flag-parameters-anon_inode_getfd-extension fs/timerfd.c --- a/fs/timerfd.c~flag-parameters-anon_inode_getfd-extension +++ a/fs/timerfd.c @@ -198,7 +198,7 @@ asmlinkage long sys_timerfd_create(int c ctx->clockid = clockid; hrtimer_init(&ctx->tmr, clockid, HRTIMER_MODE_ABS); - ufd = anon_inode_getfd("[timerfd]", &timerfd_fops, ctx); + ufd = anon_inode_getfd("[timerfd]", &timerfd_fops, ctx, 0); if (ufd < 0) kfree(ctx); diff -puN include/linux/anon_inodes.h~flag-parameters-anon_inode_getfd-extension include/linux/anon_inodes.h --- a/include/linux/anon_inodes.h~flag-parameters-anon_inode_getfd-extension +++ a/include/linux/anon_inodes.h @@ -9,7 +9,7 @@ #define _LINUX_ANON_INODES_H int anon_inode_getfd(const char *name, const struct file_operations *fops, - void *priv); + void *priv, int flags); #endif /* _LINUX_ANON_INODES_H */ _