The patch titled Subject: proc-report-open-files-as-size-in-stat-for-proc-pid-fd-v4 has been added to the -mm mm-nonmm-unstable branch. Its filename is proc-report-open-files-as-size-in-stat-for-proc-pid-fd-v4.patch This patch will shortly appear at https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/proc-report-open-files-as-size-in-stat-for-proc-pid-fd-v4.patch This patch will later appear in the mm-nonmm-unstable branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next via the mm-everything branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm and is updated there every 2-3 working days ------------------------------------------------------ From: Ivan Babrou <ivan@xxxxxxxxxxxxxx> Subject: proc-report-open-files-as-size-in-stat-for-proc-pid-fd-v4 Date: Mon, 24 Oct 2022 10:31:40 -0700 return errno from proc_fd_getattr() instead of setting negative size Link: https://lkml.kernel.org/r/20221024173140.30673-1-ivan@xxxxxxxxxxxxxx Signed-off-by: Ivan Babrou <ivan@xxxxxxxxxxxxxx> Cc: Alexey Dobriyan <adobriyan@xxxxxxxxx> Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx> Cc: Christoph Anton Mitterer <mail@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx> Cc: David Hildenbrand <david@xxxxxxxxxx> Cc: David Laight <David.Laight@xxxxxxxxxx> Cc: Johannes Weiner <hannes@xxxxxxxxxxx> Cc: Jonathan Corbet <corbet@xxxxxxx> Cc: Kalesh Singh <kaleshsingh@xxxxxxxxxx> Cc: Mike Rapoport <rppt@xxxxxxxxxx> Cc: Paul Gortmaker <paul.gortmaker@xxxxxxxxxxxxx> Cc: Theodore Ts'o <tytso@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/proc/fd.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) --- a/fs/proc/fd.c~proc-report-open-files-as-size-in-stat-for-proc-pid-fd-v4 +++ a/fs/proc/fd.c @@ -280,11 +280,10 @@ out: return 0; } -static int proc_readfd_count(struct inode *inode) +static int proc_readfd_count(struct inode *inode, loff_t *count) { struct task_struct *p = get_proc_task(inode); struct fdtable *fdt; - unsigned int open_fds = 0; if (!p) return -ENOENT; @@ -294,7 +293,7 @@ static int proc_readfd_count(struct inod rcu_read_lock(); fdt = files_fdtable(p->files); - open_fds = bitmap_weight(fdt->open_fds, fdt->max_fds); + *count = bitmap_weight(fdt->open_fds, fdt->max_fds); rcu_read_unlock(); } @@ -302,7 +301,7 @@ static int proc_readfd_count(struct inod put_task_struct(p); - return open_fds; + return 0; } static int proc_readfd(struct file *file, struct dir_context *ctx) @@ -350,14 +349,18 @@ static int proc_fd_getattr(struct user_n u32 request_mask, unsigned int query_flags) { struct inode *inode = d_inode(path->dentry); + int rv = 0; generic_fillattr(&init_user_ns, inode, stat); /* If it's a directory, put the number of open fds there */ - if (S_ISDIR(inode->i_mode)) - stat->size = proc_readfd_count(inode); + if (S_ISDIR(inode->i_mode)) { + rv = proc_readfd_count(inode, &stat->size); + if (rv < 0) + return rv; + } - return 0; + return rv; } const struct inode_operations proc_fd_inode_operations = { _ Patches currently in -mm which might be from ivan@xxxxxxxxxxxxxx are proc-report-open-files-as-size-in-stat-for-proc-pid-fd.patch proc-report-open-files-as-size-in-stat-for-proc-pid-fd-v3.patch proc-report-open-files-as-size-in-stat-for-proc-pid-fd-v4.patch