Split do_close_range() from the close_range syscall wrapper and make ksys_dup3() available to in-kernel callers. Later spawn-template fd actions use these helpers instead of duplicating close and dup logic. Signed-off-by: Li Chen --- fs/file.c | 11 ++++++++--- include/linux/fdtable.h | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/fs/file.c b/fs/file.c index e5c75b22e0c7c..a9f4b4e2dcd45 100644 --- a/fs/file.c +++ b/fs/file.c @@ -815,8 +815,7 @@ static inline void __range_close(struct files_struct *files, unsigned int fd, * from @fd up to and including @max_fd are closed. * Currently, errors to close a given file descriptor are ignored. */ -SYSCALL_DEFINE3(close_range, unsigned int, fd, unsigned int, max_fd, - unsigned int, flags) +int do_close_range(unsigned int fd, unsigned int max_fd, unsigned int flags) { struct task_struct *me = current; struct files_struct *cur_fds = me->files, *fds = NULL; @@ -867,6 +866,12 @@ SYSCALL_DEFINE3(close_range, unsigned int, fd, unsigned int, max_fd, return 0; } +SYSCALL_DEFINE3(close_range, unsigned int, fd, unsigned int, max_fd, + unsigned int, flags) +{ + return do_close_range(fd, max_fd, flags); +} + /** * file_close_fd - return file associated with fd * @fd: file descriptor to retrieve file for @@ -1421,7 +1426,7 @@ int receive_fd_replace(int new_fd, struct file *file, unsigned int o_flags) return new_fd; } -static int ksys_dup3(unsigned int oldfd, unsigned int newfd, int flags) +int ksys_dup3(unsigned int oldfd, unsigned int newfd, int flags) { int err = -EBADF; struct file *file; diff --git a/include/linux/fdtable.h b/include/linux/fdtable.h index c45306a9f0072..7f852fcc082a4 100644 --- a/include/linux/fdtable.h +++ b/include/linux/fdtable.h @@ -112,6 +112,8 @@ int iterate_fd(struct files_struct *, unsigned, extern int close_fd(unsigned int fd); extern struct file *file_close_fd(unsigned int fd); +int do_close_range(unsigned int fd, unsigned int max_fd, unsigned int flags); +int ksys_dup3(unsigned int oldfd, unsigned int newfd, int flags); extern struct kmem_cache *files_cachep; -- 2.52.0