As a companion to fget_task implement fcheck_task for use for querying a process about a specific file. Signed-off-by: "Eric W. Biederman" <ebiederm@xxxxxxxxxxxx> --- fs/file.c | 13 +++++++++++++ include/linux/fdtable.h | 1 + 2 files changed, 14 insertions(+) diff --git a/fs/file.c b/fs/file.c index c585dbaf31a3..8d4b385055e9 100644 --- a/fs/file.c +++ b/fs/file.c @@ -863,6 +863,19 @@ struct file *fget_task(struct task_struct *task, unsigned int fd) return file; } +struct file *fcheck_task(struct task_struct *task, unsigned int fd) +{ + /* Must be called with rcu_read_lock held */ + struct file *file = NULL; + + task_lock(task); + if (task->files) + file = fcheck_files(task->files, fd); + task_unlock(task); + + return file; +} + /* * Lightweight file lookup - no refcnt increment if fd table isn't shared. * diff --git a/include/linux/fdtable.h b/include/linux/fdtable.h index 7cc9885044d9..def9debd2ce2 100644 --- a/include/linux/fdtable.h +++ b/include/linux/fdtable.h @@ -103,6 +103,7 @@ static inline struct file *fcheck_files(struct files_struct *files, unsigned int * Check whether the specified fd has an open file. */ #define fcheck(fd) fcheck_files(current->files, fd) +struct file *fcheck_task(struct task_struct *task, unsigned int fd); struct task_struct; -- 2.25.0