proc: decouple proc from VFS with "struct proc_ops"
authorAlexey Dobriyan <adobriyan@gmail.com>
Tue, 4 Feb 2020 01:37:14 +0000 (17:37 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 4 Feb 2020 03:05:26 +0000 (03:05 +0000)
commitd56c0d45f0e27f814e87a1676b6bdccccbc252e9
treeb567e075139c68c63f1866df23aebe0e86522899
parent0d6e24d430ef23280d8dea0ba1faeefc66c26a57
proc: decouple proc from VFS with "struct proc_ops"

Currently core /proc code uses "struct file_operations" for custom hooks,
however, VFS doesn't directly call them.  Every time VFS expands
file_operations hook set, /proc code bloats for no reason.

Introduce "struct proc_ops" which contains only those hooks which /proc
allows to call into (open, release, read, write, ioctl, mmap, poll).  It
doesn't contain module pointer as well.

Save ~184 bytes per usage:

add/remove: 26/26 grow/shrink: 1/4 up/down: 1922/-6674 (-4752)
Function                                     old     new   delta
sysvipc_proc_ops                               -      72     +72
...
config_gz_proc_ops                             -      72     +72
proc_get_inode                               289     339     +50
proc_reg_get_unmapped_area                   110     107      -3
close_pdeo                                   227     224      -3
proc_reg_open                                289     284      -5
proc_create_data                              60      53      -7
rt_cpu_seq_fops                              256       -    -256
...
default_affinity_proc_fops                   256       -    -256
Total: Before=5430095, After=5425343, chg -0.09%

Link: http://lkml.kernel.org/r/20191225172228.GA13378@avx2
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/proc/generic.c
fs/proc/inode.c
fs/proc/internal.h
fs/proc/proc_net.c
fs/proc/proc_sysctl.c
fs/proc/root.c
include/linux/proc_fs.h