Introduce proc_statfs() to replace simple_statfs(), so that f_bsize queried from statfs() can be consistent w/ the value we set in s_blocksize. stat -f /proc/ Before: ID: 0 Namelen: 255 Type: proc Block size: 4096 Fundamental block size: 4096 Blocks: Total: 0 Free: 0 Available: 0 Inodes: Total: 0 Free: 0 After: ID: 0 Namelen: 255 Type: proc Block size: 1024 Fundamental block size: 1024 Blocks: Total: 0 Free: 0 Available: 0 Inodes: Total: 0 Free: 0 Signed-off-by: Chao Yu <chao@xxxxxxxxxx> --- fs/proc/inode.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/fs/proc/inode.c b/fs/proc/inode.c index f495fdb39151..d39e3b9b3135 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c @@ -25,6 +25,7 @@ #include <linux/slab.h> #include <linux/mount.h> #include <linux/bug.h> +#include <linux/statfs.h> #include "internal.h" @@ -176,6 +177,14 @@ static inline const char *hidepid2str(enum proc_hidepid v) return "unknown"; } +static int proc_statfs(struct dentry *dentry, struct kstatfs *buf) +{ + buf->f_type = dentry->d_sb->s_magic; + buf->f_bsize = dentry->d_sb->s_blocksize; + buf->f_namelen = PROC_NAME_LEN; + return 0; +} + static int proc_show_options(struct seq_file *seq, struct dentry *root) { struct proc_fs_info *fs_info = proc_sb_info(root->d_sb); @@ -195,7 +204,7 @@ const struct super_operations proc_sops = { .free_inode = proc_free_inode, .drop_inode = generic_delete_inode, .evict_inode = proc_evict_inode, - .statfs = simple_statfs, + .statfs = proc_statfs, .show_options = proc_show_options, }; -- 2.25.1