simplify procfs code for seq_file instances
Subsystems (101)
We currently have hundreds of proc files that implement plain, read-only seq_file based interfaces. This series consolidates them using new procfs helpers that take the seq_operations or simple show callback directly.
A git tree is available at:
git://git.infradead.org/users/hch/misc.git proc_create
Gitweb:
http://git.infradead.org/users/hch/misc.git/shortlog/refs/heads/proc_create
Diffstat: 268 files changed, 1193 insertions(+), 6194 deletions(-)
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 1/39 net/can: single_open_net needs to be paired with single_release_net
Otherwise we will leak a reference to the network namespace.
--- net/can/bcm.c | 2 +- net/can/proc.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-)
net/can/bcm.c +1 -1
@@ -249,7 +249,7 @@ static const struct file_operations bcm_proc_fops = { .open = bcm_proc_open, .read = seq_read, .llseek = seq_lseek, - .release = single_release, + .release = single_release_net, };#endif /* CONFIG_PROC_FS */
net/can/proc.c +3 -3
@@ -279,7 +279,7 @@ static const struct file_operations can_stats_proc_fops = { .open = can_stats_proc_open, .read = seq_read, .llseek = seq_lseek, - .release = single_release, + .release = single_release_net, };static int can_reset_stats_proc_show (struct seq_file *m,void *v)
@@ -449,7 +449,7 @@ static const struct file_operations can_rcvlist_sff_proc_fops = { .open = can_rcvlist_sff_proc_open, .read = seq_read, .llseek = seq_lseek, - .release = single_release, + .release = single_release_net, };
@@ -492,7 +492,7 @@ static const struct file_operations can_rcvlist_eff_proc_fops = { .open = can_rcvlist_eff_proc_open, .read = seq_read, .llseek = seq_lseek, - .release = single_release, + .release = single_release_net, };/*
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 2/39 proc: introduce proc_create_seq{,_data}
In reply to Christoph HellwigVariants of proc_create{,_data} that directly take a struct seq_operations argument and drastically reduces the boilerplate code in the callers.
All trivial callers converted over.
--- arch/ia64/hp/common/sba_iommu.c | 15 +----- arch/ia64/kernel/perfmon.c | 16 +------ arch/s390/kernel/sysinfo.c | 14 +----- block/genhd.c | 28 +---------- crypto/proc.c | 14 +----- drivers/char/misc.c | 15 +----- drivers/isdn/capi/kcapi_proc.c | 80 ++------------------------------ drivers/net/hamradio/bpqether.c | 16 +------ drivers/net/hamradio/scc.c | 17 +------ drivers/net/hamradio/yam.c | 16 +------ drivers/pci/proc.c | 17 +------ drivers/s390/block/dasd_proc.c | 17 +------ drivers/s390/char/tape_proc.c | 19 +------- drivers/staging/ipx/ipx_proc.c | 45 ++---------------- drivers/tty/tty_ldisc.c | 15 +----- drivers/video/fbdev/core/fbmem.c | 15 +----- drivers/zorro/proc.c | 17 +------ fs/cachefiles/proc.c | 19 +------- fs/fscache/histogram.c | 17 +------ fs/fscache/internal.h | 3 +- fs/fscache/proc.c | 4 +- fs/proc/consoles.c | 14 +----- fs/proc/devices.c | 14 +----- fs/proc/generic.c | 28 +++++++++++ fs/proc/internal.h | 1 + fs/proc/interrupts.c | 14 +----- fs/proc/nommu.c | 14 +----- fs/proc/proc_tty.c | 16 +------ include/linux/proc_fs.h | 9 ++++ include/linux/tty.h | 3 +- include/net/ax25.h | 5 +- include/net/netrom.h | 5 +- include/net/rose.h | 6 +-- kernel/locking/lockdep_proc.c | 29 +----------- kernel/sched/debug.c | 28 +---------- kernel/sched/stats.c | 15 +----- mm/vmalloc.c | 11 +++-- mm/vmstat.c | 56 ++-------------------- net/appletalk/atalk_proc.c | 48 +++---------------- net/atm/br2684.c | 14 +----- net/ax25/af_ax25.c | 21 ++------- net/ax25/ax25_route.c | 15 +----- net/ax25/ax25_uid.c | 15 +----- net/core/net-procfs.c | 16 +------ net/decnet/dn_dev.c | 15 +----- net/llc/llc_proc.c | 28 +---------- net/netrom/af_netrom.c | 18 ++----- net/netrom/nr_route.c | 29 +----------- net/rose/af_rose.c | 26 +++-------- net/rose/rose_route.c | 44 ++---------------- net/sctp/objcnt.c | 16 +------ net/x25/x25_proc.c | 48 +++---------------- security/keys/proc.c | 34 +------------- 53 files changed, 149 insertions(+), 925 deletions(-)
arch/ia64/hp/common/sba_iommu.c +1 -14
@@ -1942,19 +1942,6 @@ static const struct seq_operations ioc_seq_ops = { .show = ioc_show }; -static int -ioc_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &ioc_seq_ops); -} - -static const struct file_operations ioc_fops = { - .open = ioc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release -}; -static void __init ioc_proc_init (void ) {
@@ -1964,7 +1951,7 @@ ioc_proc_init(void)if (!dir)return ; - proc_create(ioc_list->name, 0, dir, &ioc_fops); + proc_create_seq(ioc_list->name, 0, dir, &ioc_seq_ops); }#endif
arch/ia64/kernel/perfmon.c +1 -15
@@ -5708,13 +5708,6 @@ const struct seq_operations pfm_seq_ops = { .show = pfm_proc_show }; -static int -pfm_proc_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &pfm_seq_ops); -} - -/* * we come here as soon as local_cpu_data->pfm_syst_wide is set. this happens * during pfm_enable() hence before pfm_start(). We cannot assume monitoring
@@ -6537,13 +6530,6 @@ pfm_probe_pmu(void)return 0 ; } -static const struct file_operations pfm_proc_fops = { - .open = pfm_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -int __init pfm_init (void ) {
@@ -6615,7 +6601,7 @@ pfm_init(void)/* * create /proc/perfmon (mostly for debugging purposes) */ - perfmon_dir =proc_create ("perfmon" ,S_IRUGO ,NULL , &pfm_proc_fops); + perfmon_dir =proc_create_seq ("perfmon" ,S_IRUGO ,NULL , &pfm_seq_ops);if (perfmon_dir ==NULL ) {printk (KERN_ERR "perfmon: cannot create /proc entry, perfmon disabled\n" ); pmu_conf =NULL ;
arch/s390/kernel/sysinfo.c +1 -13
@@ -386,18 +386,6 @@ static const struct seq_operations service_level_seq_ops = { .show = service_level_show }; -static int service_level_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &service_level_seq_ops); -} - -static const struct file_operations service_level_ops = { - .open = service_level_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release -}; -static void service_level_vm_print (struct seq_file *m,struct service_level *slr) {
@@ -420,7 +408,7 @@ static struct service_level service_level_vm = {static __init int create_proc_service_level (void ) { -proc_create ("service_levels" ,0 ,NULL , &service_level_ops); +proc_create_seq ("service_levels" ,0 ,NULL , &service_level_seq_ops);if (MACHINE_IS_VM )register_service_level (&service_level_vm);return 0 ;
block/genhd.c +2 -26
@@ -1015,18 +1015,6 @@ static const struct seq_operations partitions_op = { .stop = disk_seqf_stop, .show = show_partition }; - -static int partitions_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &partitions_op); -} - -static const struct file_operations proc_partitions_operations = { - .open = partitions_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -};#endif
@@ -1365,22 +1353,10 @@ static const struct seq_operations diskstats_op = { .show = diskstats_show }; -static int diskstats_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &diskstats_op); -} - -static const struct file_operations proc_diskstats_operations = { - .open = diskstats_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static int __init proc_genhd_init (void ) { -proc_create ("diskstats" ,0 ,NULL , &proc_diskstats_operations); -proc_create ("partitions" ,0 ,NULL , &proc_partitions_operations); +proc_create_seq ("diskstats" ,0 ,NULL , &diskstats_op); +proc_create_seq ("partitions" ,0 ,NULL , &partitions_op);return 0 ; }module_init (proc_genhd_init);
crypto/proc.c +1 -13
@@ -94,21 +94,9 @@ static const struct seq_operations crypto_seq_ops = { .show = c_show }; -static int crypto_info_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &crypto_seq_ops); -} - -static const struct file_operations proc_crypto_ops = { - .open = crypto_info_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release -}; -void __init crypto_init_proc (void ) { -proc_create ("crypto" ,0 ,NULL , &proc_crypto_ops); +proc_create_seq ("crypto" ,0 ,NULL , &crypto_seq_ops); } void __exit crypto_exit_proc(void)
drivers/char/misc.c +1 -14
@@ -95,19 +95,6 @@ static const struct seq_operations misc_seq_ops = { .stop = misc_seq_stop, .show = misc_seq_show, }; - -static int misc_seq_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &misc_seq_ops); -} - -static const struct file_operations misc_proc_fops = { - .owner =THIS_MODULE , - .open = misc_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -};#endif static int misc_open (struct inode *inode,struct file *file)
@@ -282,7 +269,7 @@ static int __init misc_init(void)int err;struct proc_dir_entry *ret; - ret =proc_create ("misc" ,0 ,NULL , &misc_proc_fops); + ret =proc_create_seq ("misc" ,0 ,NULL , &misc_seq_ops); misc_class =class_create (THIS_MODULE ,"misc" ); err =PTR_ERR (misc_class);if (IS_ERR (misc_class))
drivers/isdn/capi/kcapi_proc.c +5 -75
104 lines not on this page · raw message
drivers/net/hamradio/bpqether.c +1 -15
@@ -449,20 +449,6 @@ static const struct seq_operations bpq_seqops = { .show = bpq_seq_show, }; -static int bpq_info_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &bpq_seqops); -} - -static const struct file_operations bpq_info_fops = { - .owner =THIS_MODULE , - .open = bpq_info_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; - -/* ------------------------------------------------------------------------ */ static const struct net_device_ops bpq_netdev_ops = {
@@ -590,7 +576,7 @@ static int bpq_device_event(struct notifier_block *this,static int __init bpq_init_driver (void ) {#ifdef CONFIG_PROC_FS -if (!proc_create ("bpqether" ,0444 , init_net.proc_net, &bpq_info_fops)) { +if (!proc_create_seq ("bpqether" ,0444 , init_net.proc_net, &bpq_seqops)) {printk (KERN_ERR "bpq: cannot create /proc/net/bpqether entry.\n" );return -ENOENT ;
drivers/net/hamradio/scc.c +1 -16
@@ -2084,21 +2084,6 @@ static const struct seq_operations scc_net_seq_ops = { .stop = scc_net_seq_stop, .show = scc_net_seq_show, }; - - -static int scc_net_seq_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &scc_net_seq_ops); -} - -static const struct file_operations scc_net_seq_fops = { - .owner =THIS_MODULE , - .open = scc_net_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, -}; -#endif /* CONFIG_PROC_FS */
@@ -2122,7 +2107,7 @@ static int __init scc_init_driver (void) }rtnl_unlock (); -proc_create ("z8530drv" ,0 , init_net.proc_net, &scc_net_seq_fops); +proc_create_seq ("z8530drv" ,0 , init_net.proc_net, &scc_net_seq_ops);return 0 ; }
drivers/net/hamradio/yam.c +1 -15
@@ -841,20 +841,6 @@ static const struct seq_operations yam_seqops = { .stop = yam_seq_stop, .show = yam_seq_show, }; - -static int yam_info_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &yam_seqops); -} - -static const struct file_operations yam_info_fops = { - .owner =THIS_MODULE , - .open = yam_info_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -#endif
@@ -1168,7 +1154,7 @@ static int __init yam_init_driver(void) yam_timer.expires = jiffies +HZ /100 ;add_timer (&yam_timer); -proc_create ("yam" ,0444 , init_net.proc_net, &yam_info_fops); +proc_create_seq ("yam" ,0444 , init_net.proc_net, &yam_seqops);return 0 ; error:while (--i >=0 ) {
drivers/pci/proc.c +2 -15
@@ -435,25 +435,12 @@ int pci_proc_detach_bus(struct pci_bus *bus)return 0 ; } -static int proc_bus_pci_dev_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &proc_bus_pci_devices_op); -} - -static const struct file_operations proc_bus_pci_dev_operations = { - .owner =THIS_MODULE , - .open = proc_bus_pci_dev_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static int __init pci_proc_init (void ) {struct pci_dev *dev =NULL ; proc_bus_pci_dir =proc_mkdir ("bus/pci" ,NULL ); -proc_create ("devices" ,0 , proc_bus_pci_dir, - &proc_bus_pci_dev_operations); +proc_create_seq ("devices" ,0 , proc_bus_pci_dir, + &proc_bus_pci_devices_op); proc_initialized =1 ;for_each_pci_dev (dev)pci_proc_attach_device (dev);
drivers/s390/block/dasd_proc.c +2 -15
@@ -131,19 +131,6 @@ static const struct seq_operations dasd_devices_seq_ops = { .show = dasd_devices_show, }; -static int dasd_devices_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &dasd_devices_seq_ops); -} - -static const struct file_operations dasd_devices_file_ops = { - .owner =THIS_MODULE , - .open = dasd_devices_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -#ifdef CONFIG_DASD_PROFILE static int dasd_stats_all_block_on (void ) {
@@ -352,10 +339,10 @@ dasd_proc_init(void) dasd_proc_root_entry =proc_mkdir ("dasd" ,NULL );if (!dasd_proc_root_entry) goto out_nodasd; - dasd_devices_entry =proc_create ("devices" , + dasd_devices_entry =proc_create_seq ("devices" ,S_IFREG |S_IRUGO |S_IWUSR , dasd_proc_root_entry, - &dasd_devices_file_ops); + &dasd_devices_seq_ops);if (!dasd_devices_entry) goto out_nodevices; dasd_statistics_entry = proc_create("statistics",
drivers/s390/char/tape_proc.c +2 -17
@@ -105,29 +105,14 @@ static const struct seq_operations tape_proc_seq = { .show = tape_proc_show, }; -static int tape_proc_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &tape_proc_seq); -} - -static const struct file_operations tape_proc_ops = -{ - .owner =THIS_MODULE , - .open = tape_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -/* * Initialize procfs stuff on startup */ void tape_proc_init (void ) { - tape_proc_devices = -proc_create ("tapedevices" ,S_IFREG |S_IRUGO |S_IWUSR ,NULL , - &tape_proc_ops); + tape_proc_devices =proc_create_seq ("tapedevices" , +S_IFREG |S_IRUGO |S_IWUSR ,NULL , &tape_proc_seq);if (tape_proc_devices ==NULL ) {return ; }
drivers/staging/ipx/ipx_proc.c +5 -40
63 lines not on this page · raw message
drivers/tty/tty_ldisc.c +1 -14
@@ -230,26 +230,13 @@ static int tty_ldiscs_seq_show(struct seq_file *m, void *v)return 0 ; } -static const struct seq_operations tty_ldiscs_seq_ops = { +const struct seq_operations tty_ldiscs_seq_ops = { .start = tty_ldiscs_seq_start, .next = tty_ldiscs_seq_next, .stop = tty_ldiscs_seq_stop, .show = tty_ldiscs_seq_show, }; -static int proc_tty_ldiscs_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &tty_ldiscs_seq_ops); -} - -const struct file_operations tty_ldiscs_proc_fops = { - .owner =THIS_MODULE , - .open = proc_tty_ldiscs_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -/** * tty_ldisc_ref_wait - wait for the tty ldisc * @tty: tty device
drivers/video/fbdev/core/fbmem.c +1 -14
@@ -713,19 +713,6 @@ static const struct seq_operations proc_fb_seq_ops = { .show = fb_seq_show, }; -static int proc_fb_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &proc_fb_seq_ops); -} - -static const struct file_operations fb_proc_fops = { - .owner =THIS_MODULE , - .open = proc_fb_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -/* * We hold a reference to the fb_info in file->private_data, * but if the current registered fb has changed, we don't
@@ -1877,7 +1864,7 @@ fbmem_init(void) {int ret; -if (!proc_create ("fb" ,0 ,NULL , &fb_proc_fops)) +if (!proc_create_seq ("fb" ,0 ,NULL , &proc_fb_seq_ops))return -ENOMEM ; ret =register_chrdev (FB_MAJOR ,"fb" , &fb_fops);
drivers/zorro/proc.c +2 -15
@@ -96,19 +96,6 @@ static const struct seq_operations zorro_devices_seq_ops = { .show = zorro_seq_show, }; -static int zorro_devices_proc_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &zorro_devices_seq_ops); -} - -static const struct file_operations zorro_devices_proc_fops = { - .owner =THIS_MODULE , - .open = zorro_devices_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static struct proc_dir_entry *proc_bus_zorro_dir;static int __init zorro_proc_attach_device (unsigned int slot)
@@ -132,8 +119,8 @@ static int __init zorro_proc_init(void)if (MACH_IS_AMIGA &&AMIGAHW_PRESENT (ZORRO )) { proc_bus_zorro_dir =proc_mkdir ("bus/zorro" ,NULL ); -proc_create ("devices" ,0 , proc_bus_zorro_dir, - &zorro_devices_proc_fops); +proc_create_seq ("devices" ,0 , proc_bus_zorro_dir, + &zorro_devices_seq_ops);for (slot =0 ; slot < zorro_num_autocon; slot++)zorro_proc_attach_device (slot); }
fs/cachefiles/proc.c +2 -17
@@ -84,21 +84,6 @@ static const struct seq_operations cachefiles_histogram_ops = { .show = cachefiles_histogram_show, }; -/* -* open "/proc/fs/cachefiles/XXX" which provide statistics summaries -*/ -static int cachefiles_histogram_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &cachefiles_histogram_ops); -} - -static const struct file_operations cachefiles_histogram_fops = { - .open = cachefiles_histogram_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -/* * initialise the /proc/fs/cachefiles/ directory */
@@ -109,8 +94,8 @@ int __init cachefiles_proc_init(void)if (!proc_mkdir ("fs/cachefiles" ,NULL )) goto error_dir; -if (!proc_create ("fs/cachefiles/histogram" ,S_IFREG |0444 ,NULL , - &cachefiles_histogram_fops)) +if (!proc_create_seq ("fs/cachefiles/histogram" ,S_IFREG |0444 ,NULL , + &cachefiles_histogram_ops)) goto error_histogram;_leave (" = 0" );
fs/fscache/histogram.c +1 -16
@@ -83,24 +83,9 @@ static void fscache_histogram_stop(struct seq_file *m, void *v) { } -static const struct seq_operations fscache_histogram_ops = { +const struct seq_operations fscache_histogram_ops = { .start = fscache_histogram_start, .stop = fscache_histogram_stop, .next = fscache_histogram_next, .show = fscache_histogram_show, }; - -/* -* open "/proc/fs/fscache/histogram" to provide latency data -*/ -static int fscache_histogram_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &fscache_histogram_ops); -} - -const struct file_operations fscache_histogram_fops = { - .open = fscache_histogram_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -};
fs/fscache/internal.h +2 -1
@@ -31,6 +31,7 @@#include <linux/fscache-cache.h> #include <trace/events/fscache.h> #include <linux/sched.h> +#include <linux/seq_file.h> #define FSCACHE_MIN_THREADS 4#define FSCACHE_MAX_THREADS 32
@@ -84,7 +85,7 @@ static inline void fscache_hist(atomic_t histogram[], unsigned long start_jif) atomic_inc(&histogram[jif]); } -extern const struct file_operations fscache_histogram_fops; +extern const struct seq_operations fscache_histogram_ops;#else #define fscache_hist (hist, start_jif) do {} while (0)
fs/fscache/proc.c +2 -2
@@ -32,8 +32,8 @@ int __init fscache_proc_init(void)#endif #ifdef CONFIG_FSCACHE_HISTOGRAM -if (!proc_create ("fs/fscache/histogram" ,S_IFREG |0444 ,NULL , - &fscache_histogram_fops)) +if (!proc_create_seq ("fs/fscache/histogram" ,S_IFREG |0444 ,NULL , + &fscache_histogram_ops)) goto error_histogram;#endif
fs/proc/consoles.c +1 -13
@@ -91,21 +91,9 @@ static const struct seq_operations consoles_op = { .show = show_console_dev }; -static int consoles_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &consoles_op); -} - -static const struct file_operations proc_consoles_operations = { - .open = consoles_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static int __init proc_consoles_init (void ) { -proc_create ("consoles" ,0 ,NULL , &proc_consoles_operations); +proc_create_seq ("consoles" ,0 ,NULL , &consoles_op);return 0 ; }fs_initcall (proc_consoles_init);
fs/proc/devices.c +1 -13
@@ -51,21 +51,9 @@ static const struct seq_operations devinfo_ops = { .show = devinfo_show }; -static int devinfo_open (struct inode *inode,struct file *filp) -{ -return seq_open (filp, &devinfo_ops); -} - -static const struct file_operations proc_devinfo_operations = { - .open = devinfo_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static int __init proc_devices_init (void ) { -proc_create ("devices" ,0 ,NULL , &proc_devinfo_operations); +proc_create_seq ("devices" ,0 ,NULL , &devinfo_ops);return 0 ; }fs_initcall (proc_devices_init);
fs/proc/generic.c +28 -0
@@ -25,6 +25,7 @@#include <linux/spinlock.h> #include <linux/completion.h> #include <linux/uaccess.h> +#include <linux/seq_file.h> #include "internal.h"
@@ -548,6 +549,33 @@ struct proc_dir_entry *proc_create_data(const char *name, umode_t mode,return NULL ; }EXPORT_SYMBOL (proc_create_data); + +static int proc_seq_open (struct inode *inode,struct file *file) +{ +struct proc_dir_entry *de =PDE (inode); + +return seq_open (file, de->seq_ops); +} + +static const struct file_operations proc_seq_fops = { + .open = proc_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +struct proc_dir_entry *proc_create_seq_data (const char *name,umode_t mode, +struct proc_dir_entry *parent,const struct seq_operations *ops, +void *data) +{ +struct proc_dir_entry *p; + + p =proc_create_data (name, mode, parent, &proc_seq_fops, data); +if (p) + p->seq_ops = ops; +return p; +} +EXPORT_SYMBOL (proc_create_seq_data); struct proc_dir_entry *proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent,
fs/proc/internal.h +1 -0
@@ -44,6 +44,7 @@ struct proc_dir_entry {struct completion *pde_unload_completion;const struct inode_operations *proc_iops;const struct file_operations *proc_fops; +const struct seq_operations *seq_ops;void *data;unsigned int low_ino;nlink_t nlink;
fs/proc/interrupts.c +1 -13
@@ -34,21 +34,9 @@ static const struct seq_operations int_seq_ops = { .show = show_interrupts }; -static int interrupts_open (struct inode *inode,struct file *filp) -{ -return seq_open (filp, &int_seq_ops); -} - -static const struct file_operations proc_interrupts_operations = { - .open = interrupts_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static int __init proc_interrupts_init (void ) { -proc_create ("interrupts" ,0 ,NULL , &proc_interrupts_operations); +proc_create_seq ("interrupts" ,0 ,NULL , &int_seq_ops);return 0 ; }fs_initcall (proc_interrupts_init);
fs/proc/nommu.c +1 -13
@@ -113,21 +113,9 @@ static const struct seq_operations proc_nommu_region_list_seqop = { .show = nommu_region_list_show }; -static int proc_nommu_region_list_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &proc_nommu_region_list_seqop); -} - -static const struct file_operations proc_nommu_region_list_operations = { - .open = proc_nommu_region_list_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static int __init proc_nommu_init (void ) { -proc_create ("maps" ,S_IRUGO ,NULL , &proc_nommu_region_list_operations); +proc_create_seq ("maps" ,S_IRUGO ,NULL , &proc_nommu_region_list_seqop);return 0 ; }
fs/proc/proc_tty.c +2 -14
@@ -126,18 +126,6 @@ static const struct seq_operations tty_drivers_op = { .show = show_tty_driver }; -static int tty_drivers_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &tty_drivers_op); -} - -static const struct file_operations proc_tty_drivers_operations = { - .open = tty_drivers_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -/* * This function is called by tty_register_driver() to handle * registering the driver's /proc handler into /proc/tty/driver/<foo>
@@ -186,6 +174,6 @@ void __init proc_tty_init(void)* entry. */ proc_tty_driver =proc_mkdir_mode ("tty/driver" ,S_IRUSR |S_IXUSR ,NULL ); -proc_create ("tty/ldiscs" ,0 ,NULL , &tty_ldiscs_proc_fops); -proc_create ("tty/drivers" ,0 ,NULL , &proc_tty_drivers_operations); +proc_create_seq ("tty/ldiscs" ,0 ,NULL , &tty_ldiscs_seq_ops); +proc_create_seq ("tty/drivers" ,0 ,NULL , &tty_drivers_op); }
include/linux/proc_fs.h +9 -0
@@ -9,6 +9,7 @@#include <linux/fs.h> struct proc_dir_entry ; +struct seq_operations ;#ifdef CONFIG_PROC_FS
@@ -23,6 +24,12 @@ extern struct proc_dir_entry *proc_mkdir_data(const char *, umode_t,extern struct proc_dir_entry *proc_mkdir_mode (const char *,umode_t ,struct proc_dir_entry *);struct proc_dir_entry *proc_create_mount_point (const char *name); + +struct proc_dir_entry *proc_create_seq_data (const char *name,umode_t mode, +struct proc_dir_entry *parent,const struct seq_operations *ops, +void *data); +#define proc_create_seq (name, mode, parent, ops) \ + proc_create_seq_data(name, mode, parent, ops, NULL) extern struct proc_dir_entry *proc_create_data(const char *, umode_t, struct proc_dir_entry *,
@@ -57,6 +64,8 @@ static inline struct proc_dir_entry *proc_mkdir_data(const char *name, umode_t mode, struct proc_dir_entry *parent, void *data) { return NULL; }static inline struct proc_dir_entry *proc_mkdir_mode (const char *name,umode_t mode,struct proc_dir_entry *parent) {return NULL ; } +#define proc_create_seq_data (name, mode, parent, ops, data) ({NULL;}) +#define proc_create_seq (name, mode, parent, ops) ({NULL;})#define proc_create (name, mode, parent, proc_fops) ({NULL;})#define proc_create_data (name, mode, parent, proc_fops, data) ({NULL;})
include/linux/tty.h +2 -1
@@ -10,6 +10,7 @@#include <linux/tty_ldisc.h> #include <linux/mutex.h> #include <linux/tty_flags.h> +#include <linux/seq_file.h> #include <uapi/linux/tty.h> #include <linux/rwsem.h> #include <linux/llist.h>
@@ -535,7 +536,7 @@ extern void tty_ldisc_deref(struct tty_ldisc *);extern struct tty_ldisc *tty_ldisc_ref_wait (struct tty_struct *);extern void tty_ldisc_hangup (struct tty_struct *tty,bool reset);extern int tty_ldisc_reinit (struct tty_struct *tty,int disc); -extern const struct file_operations tty_ldiscs_proc_fops; +extern const struct seq_operations tty_ldiscs_seq_ops;extern void tty_wakeup (struct tty_struct *tty);extern void tty_ldisc_flush (struct tty_struct *tty);
include/net/ax25.h +3 -2
@@ -15,6 +15,7 @@#include <linux/refcount.h> #include <net/neighbour.h> #include <net/sock.h> +#include <linux/seq_file.h> #define AX25_T1CLAMPLO 1#define AX25_T1CLAMPHI (30 * HZ)
@@ -399,7 +400,7 @@ int ax25_check_iframes_acked(ax25_cb *, unsigned short);/* ax25_route.c */ void ax25_rt_device_down (struct net_device *);int ax25_rt_ioctl (unsigned int ,void __user *); -extern const struct file_operations ax25_route_fops; +extern const struct seq_operations ax25_rt_seqops;ax25_route *ax25_get_route (ax25_address *addr,struct net_device *dev);int ax25_rt_autobind (ax25_cb *,ax25_address *); struct sk_buff *ax25_rt_build_path(struct sk_buff *, ax25_address *,
@@ -455,7 +456,7 @@ unsigned long ax25_display_timer(struct timer_list *);extern int ax25_uid_policy;ax25_uid_assoc *ax25_findbyuid (kuid_t );int __must_check ax25_uid_ioctl (int ,struct sockaddr_ax25 *); -extern const struct file_operations ax25_uid_fops; +extern const struct seq_operations ax25_uid_seqops;void ax25_uid_free (void );/* sysctl_net_ax25.c */
include/net/netrom.h +3 -2
@@ -13,6 +13,7 @@#include <linux/slab.h> #include <net/sock.h> #include <linux/refcount.h> +#include <linux/seq_file.h> #define NR_NETWORK_LEN 15#define NR_TRANSPORT_LEN 5
@@ -216,8 +217,8 @@ struct net_device *nr_dev_get(ax25_address *);int nr_rt_ioctl (unsigned int ,void __user *);void nr_link_failed (ax25_cb *,int );int nr_route_frame (struct sk_buff *,ax25_cb *); -extern const struct file_operations nr_nodes_fops; -extern const struct file_operations nr_neigh_fops; +extern const struct seq_operations nr_node_seqops; +extern const struct seq_operations nr_neigh_seqops;void nr_rt_free (void );/* nr_subr.c */
include/net/rose.h +3 -3
@@ -200,9 +200,9 @@ void rose_enquiry_response(struct sock *);/* rose_route.c */ extern struct rose_neigh *rose_loopback_neigh; -extern const struct file_operations rose_neigh_fops; -extern const struct file_operations rose_nodes_fops; -extern const struct file_operations rose_routes_fops; +extern const struct seq_operations rose_neigh_seqops; +extern const struct seq_operations rose_node_seqops; +extern struct seq_operations rose_route_seqops;void rose_add_loopback_neigh (void );int __must_check rose_add_loopback_node (rose_address *);
kernel/locking/lockdep_proc.c +2 -27
@@ -101,18 +101,6 @@ static const struct seq_operations lockdep_ops = { .show = l_show, }; -static int lockdep_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &lockdep_ops); -} - -static const struct file_operations proc_lockdep_operations = { - .open = lockdep_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -#ifdef CONFIG_PROVE_LOCKING static void *lc_start (struct seq_file *m,loff_t *pos) {
@@ -170,18 +158,6 @@ static const struct seq_operations lockdep_chains_ops = { .stop = lc_stop, .show = lc_show, }; - -static int lockdep_chains_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &lockdep_chains_ops); -} - -static const struct file_operations proc_lockdep_chains_operations = { - .open = lockdep_chains_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -};#endif /* CONFIG_PROVE_LOCKING */ static void lockdep_stats_debug_show (struct seq_file *m)
@@ -682,10 +658,9 @@ static const struct file_operations proc_lock_stat_operations = {static int __init lockdep_proc_init (void ) { -proc_create ("lockdep" ,S_IRUSR ,NULL , &proc_lockdep_operations); +proc_create_seq ("lockdep" ,S_IRUSR ,NULL , &lockdep_ops);#ifdef CONFIG_PROVE_LOCKING -proc_create ("lockdep_chains" ,S_IRUSR ,NULL , - &proc_lockdep_chains_operations); +proc_create_seq ("lockdep_chains" ,S_IRUSR ,NULL , &lockdep_chains_ops);#endif proc_create ("lockdep_stats" ,S_IRUSR ,NULL , &proc_lockdep_stats_operations);
kernel/sched/debug.c +1 -27
@@ -823,35 +823,9 @@ static const struct seq_operations sched_debug_sops = { .show = sched_debug_show, }; -static int sched_debug_release (struct inode *inode,struct file *file) -{ -seq_release (inode, file); - -return 0 ; -} - -static int sched_debug_open (struct inode *inode,struct file *filp) -{ -int ret =0 ; - - ret =seq_open (filp, &sched_debug_sops); - -return ret; -} - -static const struct file_operations sched_debug_fops = { - .open = sched_debug_open, - .read = seq_read, - .llseek = seq_lseek, - .release = sched_debug_release, -}; -static int __init init_sched_debug_procfs (void ) { -struct proc_dir_entry *pe; - - pe =proc_create ("sched_debug" ,0444 ,NULL , &sched_debug_fops); -if (!pe) +if (!proc_create_seq ("sched_debug" ,0444 ,NULL , &sched_debug_sops))return -ENOMEM ;return 0 ; }
kernel/sched/stats.c +1 -14
@@ -120,22 +120,9 @@ static const struct seq_operations schedstat_sops = { .show = show_schedstat, }; -static int schedstat_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &schedstat_sops); -} - -static const struct file_operations proc_schedstat_operations = { - .open = schedstat_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static int __init proc_schedstat_init (void ) { -proc_create ("schedstat" ,0 ,NULL , &proc_schedstat_operations); - +proc_create_seq ("schedstat" ,0 ,NULL , &schedstat_sops);return 0 ; }subsys_initcall (proc_schedstat_init);
mm/vmalloc.c +6 -5
@@ -2753,11 +2753,8 @@ static const struct seq_operations vmalloc_op = {static int vmalloc_open (struct inode *inode,struct file *file) { -if (IS_ENABLED (CONFIG_NUMA )) -return seq_open_private (file, &vmalloc_op, +return seq_open_private (file, &vmalloc_op, nr_node_ids *sizeof (unsigned int )); -else -return seq_open (file, &vmalloc_op); }static const struct file_operations proc_vmalloc_operations = {
@@ -2769,7 +2766,11 @@ static const struct file_operations proc_vmalloc_operations = {static int __init proc_vmalloc_init (void ) { -proc_create ("vmallocinfo" ,S_IRUSR ,NULL , &proc_vmalloc_operations); +if (IS_ENABLED (CONFIG_NUMA )) +proc_create ("vmallocinfo" ,S_IRUSR ,NULL , + &proc_vmalloc_operations); +else +proc_create_seq ("vmallocinfo" ,S_IRUSR ,NULL , &vmalloc_op);return 0 ; }module_init (proc_vmalloc_init);
mm/vmstat.c +4 -52
86 lines not on this page · raw message
net/appletalk/atalk_proc.c +6 -42
66 lines not on this page · raw message
net/atm/br2684.c +1 -13
@@ -818,18 +818,6 @@ static const struct seq_operations br2684_seq_ops = { .show = br2684_seq_show, }; -static int br2684_proc_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &br2684_seq_ops); -} - -static const struct file_operations br2684_proc_ops = { - .open = br2684_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -extern struct proc_dir_entry *atm_proc_root;/* from proc.c */ #endif /* CONFIG_PROC_FS */
@@ -837,7 +825,7 @@ static int __init br2684_init(void) {#ifdef CONFIG_PROC_FS struct proc_dir_entry *p; - p =proc_create ("br2684" ,0 , atm_proc_root, &br2684_proc_ops); + p =proc_create_seq ("br2684" ,0 , atm_proc_root, &br2684_seq_ops);if (p ==NULL )return -ENOMEM ;#endif
net/ax25/af_ax25.c +4 -17
@@ -1924,19 +1924,6 @@ static const struct seq_operations ax25_info_seqops = { .stop = ax25_info_stop, .show = ax25_info_show, }; - -static int ax25_info_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &ax25_info_seqops); -} - -static const struct file_operations ax25_info_fops = { - .open = ax25_info_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -#endif static const struct net_proto_family ax25_family_ops = {
@@ -1989,10 +1976,10 @@ static int __init ax25_init(void)dev_add_pack (&ax25_packet_type);register_netdevice_notifier (&ax25_dev_notifier); -proc_create ("ax25_route" ,0444 , init_net.proc_net, - &ax25_route_fops); -proc_create ("ax25" ,0444 , init_net.proc_net, &ax25_info_fops); -proc_create ("ax25_calls" ,0444 , init_net.proc_net, &ax25_uid_fops); +proc_create_seq ("ax25_route" ,0444 , init_net.proc_net, &ax25_rt_seqops); +proc_create_seq ("ax25" ,0444 , init_net.proc_net, &ax25_info_seqops); +proc_create_seq ("ax25_calls" ,0444 , init_net.proc_net, + &ax25_uid_seqops); out:return rc; }
net/ax25/ax25_route.c +1 -14
@@ -323,25 +323,12 @@ static int ax25_rt_seq_show(struct seq_file *seq, void *v) return 0; } -static const struct seq_operations ax25_rt_seqops = { +const struct seq_operations ax25_rt_seqops = { .start = ax25_rt_seq_start, .next = ax25_rt_seq_next, .stop = ax25_rt_seq_stop, .show = ax25_rt_seq_show, }; - -static int ax25_rt_info_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &ax25_rt_seqops); -} - -const struct file_operations ax25_route_fops = { - .open = ax25_rt_info_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -#endif /*
net/ax25/ax25_uid.c +1 -14
@@ -181,25 +181,12 @@ static int ax25_uid_seq_show(struct seq_file *seq, void *v) return 0; } -static const struct seq_operations ax25_uid_seqops = { +const struct seq_operations ax25_uid_seqops = { .start = ax25_uid_seq_start, .next = ax25_uid_seq_next, .stop = ax25_uid_seq_stop, .show = ax25_uid_seq_show, }; - -static int ax25_uid_info_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &ax25_uid_seqops); -} - -const struct file_operations ax25_uid_fops = { - .open = ax25_uid_info_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -#endif /*
net/core/net-procfs.c +2 -14
@@ -195,18 +195,6 @@ static const struct seq_operations softnet_seq_ops = { .show = softnet_seq_show, }; -static int softnet_seq_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &softnet_seq_ops); -} - -static const struct file_operations softnet_seq_fops = { - .open = softnet_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static void *ptype_get_idx (loff_t pos) {struct packet_type *pt =NULL ;
@@ -317,8 +305,8 @@ static int __net_init dev_proc_net_init(struct net *net)if (!proc_create ("dev" ,0444 , net->proc_net, &dev_seq_fops)) goto out; -if (!proc_create ("softnet_stat" ,0444 , net->proc_net, - &softnet_seq_fops)) +if (!proc_create_seq ("softnet_stat" ,0444 , net->proc_net, + &softnet_seq_ops)) goto out_dev;if (!proc_create ("ptype" ,0444 , net->proc_net, &ptype_seq_fops)) goto out_softnet;
net/decnet/dn_dev.c +1 -14
@@ -1382,19 +1382,6 @@ static const struct seq_operations dn_dev_seq_ops = { .stop = dn_dev_seq_stop, .show = dn_dev_seq_show, }; - -static int dn_dev_seq_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &dn_dev_seq_ops); -} - -static const struct file_operations dn_dev_seq_fops = { - .open = dn_dev_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -#endif /* CONFIG_PROC_FS */ static int addr[2 ];
@@ -1424,7 +1411,7 @@ void __init dn_dev_init(void)rtnl_register_module (THIS_MODULE , PF_DECnet,RTM_GETADDR ,NULL , dn_nl_dump_ifaddr,0 ); -proc_create ("decnet_dev" ,0444 , init_net.proc_net, &dn_dev_seq_fops); +proc_create_seq ("decnet_dev" ,0444 , init_net.proc_net, &dn_dev_seq_ops);#ifdef CONFIG_SYSCTL {
net/llc/llc_proc.c +2 -26
@@ -214,30 +214,6 @@ static const struct seq_operations llc_seq_core_ops = { .show = llc_seq_core_show, }; -static int llc_seq_socket_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &llc_seq_socket_ops); -} - -static int llc_seq_core_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &llc_seq_core_ops); -} - -static const struct file_operations llc_seq_socket_fops = { - .open = llc_seq_socket_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; - -static const struct file_operations llc_seq_core_fops = { - .open = llc_seq_core_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static struct proc_dir_entry *llc_proc_dir;int __init llc_proc_init (void )
@@ -249,11 +225,11 @@ int __init llc_proc_init(void)if (!llc_proc_dir) goto out; - p =proc_create ("socket" ,0444 , llc_proc_dir, &llc_seq_socket_fops); + p =proc_create_seq ("socket" ,0444 , llc_proc_dir, &llc_seq_socket_ops);if (!p) goto out_socket; - p =proc_create ("core" ,0444 , llc_proc_dir, &llc_seq_core_fops); + p =proc_create_seq ("core" ,0444 , llc_proc_dir, &llc_seq_core_ops);if (!p) goto out_core;
net/netrom/af_netrom.c +3 -15
@@ -1338,18 +1338,6 @@ static const struct seq_operations nr_info_seqops = { .stop = nr_info_stop, .show = nr_info_show, }; - -static int nr_info_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &nr_info_seqops); -} - -static const struct file_operations nr_info_fops = { - .open = nr_info_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -};#endif /* CONFIG_PROC_FS */ static const struct net_proto_family nr_family_ops = {
@@ -1450,9 +1438,9 @@ static int __init nr_proto_init(void)nr_loopback_init (); -proc_create ("nr" ,0444 , init_net.proc_net, &nr_info_fops); -proc_create ("nr_neigh" ,0444 , init_net.proc_net, &nr_neigh_fops); -proc_create ("nr_nodes" ,0444 , init_net.proc_net, &nr_nodes_fops); +proc_create_seq ("nr" ,0444 , init_net.proc_net, &nr_info_seqops); +proc_create_seq ("nr_neigh" ,0444 , init_net.proc_net, &nr_neigh_seqops); +proc_create_seq ("nr_nodes" ,0444 , init_net.proc_net, &nr_node_seqops); out:return rc; fail:
net/netrom/nr_route.c +2 -27
@@ -888,25 +888,13 @@ static int nr_node_show(struct seq_file *seq, void *v)return 0 ; } -static const struct seq_operations nr_node_seqops = { +const struct seq_operations nr_node_seqops = { .start = nr_node_start, .next = nr_node_next, .stop = nr_node_stop, .show = nr_node_show, }; -static int nr_node_info_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &nr_node_seqops); -} - -const struct file_operations nr_nodes_fops = { - .open = nr_node_info_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static void *nr_neigh_start (struct seq_file *seq,loff_t *pos) {spin_lock_bh (&nr_neigh_list_lock);
@@ -954,25 +942,12 @@ static int nr_neigh_show(struct seq_file *seq, void *v) return 0; } -static const struct seq_operations nr_neigh_seqops = { +const struct seq_operations nr_neigh_seqops = { .start = nr_neigh_start, .next = nr_neigh_next, .stop = nr_neigh_stop, .show = nr_neigh_show, }; - -static int nr_neigh_info_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &nr_neigh_seqops); -} - -const struct file_operations nr_neigh_fops = { - .open = nr_neigh_info_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -#endif /*
net/rose/af_rose.c +7 -19
@@ -1453,18 +1453,6 @@ static const struct seq_operations rose_info_seqops = { .stop = rose_info_stop, .show = rose_info_show, }; - -static int rose_info_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &rose_info_seqops); -} - -static const struct file_operations rose_info_fops = { - .open = rose_info_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -};#endif /* CONFIG_PROC_FS */ static const struct net_proto_family rose_family_ops = {
@@ -1567,13 +1555,13 @@ static int __init rose_proto_init(void)rose_add_loopback_neigh (); -proc_create ("rose" ,0444 , init_net.proc_net, &rose_info_fops); -proc_create ("rose_neigh" ,0444 , init_net.proc_net, - &rose_neigh_fops); -proc_create ("rose_nodes" ,0444 , init_net.proc_net, - &rose_nodes_fops); -proc_create ("rose_routes" ,0444 , init_net.proc_net, - &rose_routes_fops); +proc_create_seq ("rose" ,0444 , init_net.proc_net, &rose_info_seqops); +proc_create_seq ("rose_neigh" ,0444 , init_net.proc_net, + &rose_neigh_seqops); +proc_create_seq ("rose_nodes" ,0444 , init_net.proc_net, + &rose_node_seqops); +proc_create_seq ("rose_routes" ,0444 , init_net.proc_net, + &rose_route_seqops); out:return rc; fail:
net/rose/rose_route.c +3 -41
79 lines not on this page · raw message
net/sctp/objcnt.c +2 -14
@@ -108,25 +108,13 @@ static const struct seq_operations sctp_objcnt_seq_ops = { .show = sctp_objcnt_seq_show, }; -static int sctp_objcnt_seq_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &sctp_objcnt_seq_ops); -} - -static const struct file_operations sctp_objcnt_ops = { - .open = sctp_objcnt_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -/* Initialize the objcount in the proc filesystem. */ void sctp_dbg_objcnt_init (struct net *net) {struct proc_dir_entry *ent; - ent =proc_create ("sctp_dbg_objcnt" ,0 , - net->sctp.proc_net_sctp, &sctp_objcnt_ops); + ent =proc_create_seq ("sctp_dbg_objcnt" ,0 , + net->sctp.proc_net_sctp, &sctp_objcnt_seq_ops);if (!ent)pr_warn ("sctp_dbg_objcnt: Unable to create /proc entry.\n" ); }
net/x25/x25_proc.c +6 -42
63 lines not on this page · raw message
security/keys/proc.c +2 -32
@@ -18,7 +18,6 @@#include <asm/errno.h> #include "internal.h" -static int proc_keys_open (struct inode *inode,struct file *file);static void *proc_keys_start (struct seq_file *p,loff_t *_pos);static void *proc_keys_next (struct seq_file *p,void *v,loff_t *_pos);static void proc_keys_stop (struct seq_file *p,void *v);
@@ -31,14 +30,6 @@ static const struct seq_operations proc_keys_ops = { .show = proc_keys_show, }; -static const struct file_operations proc_keys_fops = { - .open = proc_keys_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; - -static int proc_key_users_open (struct inode *inode,struct file *file);static void *proc_key_users_start (struct seq_file *p,loff_t *_pos);static void *proc_key_users_next (struct seq_file *p,void *v,loff_t *_pos);static void proc_key_users_stop (struct seq_file *p,void *v);
@@ -51,13 +42,6 @@ static const struct seq_operations proc_key_users_ops = { .show = proc_key_users_show, }; -static const struct file_operations proc_key_users_fops = { - .open = proc_key_users_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -/* * Declare the /proc files. */
@@ -65,11 +49,11 @@ static int __init key_proc_init(void) {struct proc_dir_entry *p; - p =proc_create ("keys" ,0 ,NULL , &proc_keys_fops); + p =proc_create_seq ("keys" ,0 ,NULL , &proc_keys_ops);if (!p)panic ("Cannot create /proc/keys\n" ); - p =proc_create ("key-users" ,0 ,NULL , &proc_key_users_fops); + p =proc_create_seq ("key-users" ,0 ,NULL , &proc_key_users_ops);if (!p)panic ("Cannot create /proc/key-users\n" );
@@ -96,11 +80,6 @@ static struct rb_node *key_serial_next(struct seq_file *p, struct rb_node *n)return n; } -static int proc_keys_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &proc_keys_ops); -} -static struct key *find_ge_key (struct seq_file *p,key_serial_t id) {struct user_namespace *user_ns =seq_user_ns (p);
@@ -293,15 +272,6 @@ static struct rb_node *key_user_first(struct user_namespace *user_ns, struct rb_return __key_user_next (user_ns, n); } -/* -* Implement "/proc/key-users" to provides a list of the key users and their -* quotas. -*/ -static int proc_key_users_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &proc_key_users_ops); -} -static void *proc_key_users_start (struct seq_file *p,loff_t *_pos)__acquires (key_user_lock) {
Signature · 1 line
2.17.0
Re: [PATCH 02/39] proc: introduce proc_create_seq{,_data}
Quoted 18 lines · Christoph Hellwig
Variants of proc_create{,_data} that directly take a struct
seq_operationsargument and drastically reduces the boilerplate code in the callers.fs/proc/generic.c +15
-0+static int proc_seq_open (struct inode *inode,struct file *file) +{ +struct proc_dir_entry *de =PDE (inode); + +return seq_open (file, de->seq_ops); +} + +static const struct file_operations proc_seq_fops = { + .open = proc_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +struct proc_dir_entry *proc_create_seq_data(const char *name, umode_t mode,
fs/proc/generic.c struct proc_dir_entry *proc_create_data(const char *name, umode_t mode, · line 577
Quoted 10 lines
fs/proc/generic.c +10
-0+ struct proc_dir_entry *parent, const struct seq_operations *ops, + void *data) +{ + struct proc_dir_entry *p; + + p =proc_create_data (name, mode, parent, &proc_seq_fops, data); +if (p) + p->seq_ops = ops; +return p; +}
Should be oopsable.
Once proc_create_data() returns, entry is live, ->open can be called.
fs/proc/internal.h struct proc_dir_entry { · line 50
Quoted 10 lines
fs/proc/internal.h +1
-0@@ -44,6 +44,7 @@ struct proc_dir_entry {struct completion *pde_unload_completion;const struct inode_operations *proc_iops;const struct file_operations *proc_fops; +const struct seq_operations *seq_ops;void *data;unsigned int low_ino;nlink_t nlink;
"struct proc_dir_entry is 192/128 bytes now.
If someone knows how to pad array to certain size without union please tell.
Re: [PATCH 02/39] proc: introduce proc_create_seq{,_data}
Quoted 2 lines · Alexey Dobriyan
Should be oopsable.
Onceproc_create_data()returns, entry is live, ->open can be called.
Ok, switching to opencoding proc_create_data instead.
PATCH 3/39 proc: introduce proc_create_seq_private
In reply to Christoph HellwigVariant of proc_create_data that directly take a struct seq_operations argument + a private state size and drastically reduces the boilerplate code in the callers.
All trivial callers converted over.
--- drivers/s390/cio/blacklist.c | 21 ++++----------------- fs/locks.c | 16 ++-------------- fs/proc/generic.c | 13 +++++++++---- fs/proc/internal.h | 1 + include/linux/atalk.h | 7 ++++++- include/linux/proc_fs.h | 9 ++++++--- kernel/time/timer_list.c | 16 ++-------------- mm/vmalloc.c | 18 +++--------------- net/appletalk/aarp.c | 20 +------------------- net/appletalk/atalk_proc.c | 3 ++- net/atm/lec.c | 15 ++------------- net/decnet/af_decnet.c | 17 +++-------------- net/decnet/dn_route.c | 19 +++---------------- 13 files changed, 44 insertions(+), 131 deletions(-)
drivers/s390/cio/blacklist.c +4 -17
@@ -391,28 +391,15 @@ static const struct seq_operations cio_ignore_proc_seq_ops = { .show = cio_ignore_proc_seq_show, }; -static int -cio_ignore_proc_open (struct inode *inode,struct file *file) -{ -return seq_open_private (file, &cio_ignore_proc_seq_ops, -sizeof (struct ccwdev_iter )); -} - -static const struct file_operations cio_ignore_proc_fops = { - .open = cio_ignore_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, - .write = cio_ignore_write, -}; -static int cio_ignore_proc_init (void ) {struct proc_dir_entry *entry; - entry =proc_create ("cio_ignore" ,S_IFREG |S_IRUGO |S_IWUSR ,NULL , - &cio_ignore_proc_fops); + entry =proc_create_seq_private ("cio_ignore" , +S_IFREG |S_IRUGO |S_IWUSR ,NULL , + &cio_ignore_proc_seq_ops,sizeof (struct ccwdev_iter ), +NULL );if (!entry)return -ENOENT ;return 0 ;
fs/locks.c +2 -14
@@ -2788,22 +2788,10 @@ static const struct seq_operations locks_seq_operations = { .show = locks_show, }; -static int locks_open (struct inode *inode,struct file *filp) -{ -return seq_open_private (filp, &locks_seq_operations, -sizeof (struct locks_iterator )); -} - -static const struct file_operations proc_locks_operations = { - .open = locks_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, -}; -static int __init proc_locks_init (void ) { -proc_create ("locks" ,0 ,NULL , &proc_locks_operations); +proc_create_seq_private ("locks" ,0 ,NULL , &locks_seq_operations, +sizeof (struct locks_iterator ),NULL );return 0 ; }fs_initcall (proc_locks_init);
fs/proc/generic.c +9 -4
@@ -554,6 +554,8 @@ static int proc_seq_open(struct inode *inode, struct file *file) {struct proc_dir_entry *de =PDE (inode); +if (de->state_size) +return seq_open_private (file, de->seq_ops, de->state_size);return seq_open (file, de->seq_ops); }
@@ -564,18 +566,21 @@ static const struct file_operations proc_seq_fops = { .release = seq_release, }; -struct proc_dir_entry *proc_create_seq_data (const char *name,umode_t mode, +struct proc_dir_entry *proc_create_seq_private (const char *name,umode_t mode,struct proc_dir_entry *parent,const struct seq_operations *ops, -void *data) +size_t state_size,void *data) {struct proc_dir_entry *p; p =proc_create_data (name, mode, parent, &proc_seq_fops, data); -if (p) +if (p) { p->seq_ops = ops; + p->state_size = state_size; + } +return p; } -EXPORT_SYMBOL (proc_create_seq_data); +EXPORT_SYMBOL (proc_create_seq_private); struct proc_dir_entry *proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent,
fs/proc/internal.h +1 -0
@@ -45,6 +45,7 @@ struct proc_dir_entry {const struct inode_operations *proc_iops;const struct file_operations *proc_fops;const struct seq_operations *seq_ops; +size_t state_size;void *data;unsigned int low_ino;nlink_t nlink;
include/linux/atalk.h +6 -1
@@ -145,7 +145,12 @@ extern rwlock_t atalk_interfaces_lock;extern struct atalk_route atrtr_default; -extern const struct file_operations atalk_seq_arp_fops; +struct aarp_iter_state { +int bucket; +struct aarp_entry **table; +}; + +extern const struct seq_operations aarp_seq_ops;extern int sysctl_aarp_expiry_time;extern int sysctl_aarp_tick_time;
include/linux/proc_fs.h +6 -3
@@ -25,11 +25,13 @@ extern struct proc_dir_entry *proc_mkdir_mode(const char *, umode_t, struct proc_dir_entry *);struct proc_dir_entry *proc_create_mount_point (const char *name); -struct proc_dir_entry *proc_create_seq_data (const char *name,umode_t mode, +struct proc_dir_entry *proc_create_seq_private (const char *name,umode_t mode,struct proc_dir_entry *parent,const struct seq_operations *ops, -void *data); +size_t state_size,void *data); +#define proc_create_seq_data (name, mode, parent, ops, data) \ + proc_create_seq_private(name, mode, parent, ops, 0, data)#define proc_create_seq (name, mode, parent, ops) \ - proc_create_seq_data(name, mode, parent, ops, NULL) + proc_create_seq_private(name, mode, parent, ops, 0, NULL) extern struct proc_dir_entry *proc_create_data(const char *, umode_t, struct proc_dir_entry *,
@@ -64,6 +66,7 @@ static inline struct proc_dir_entry *proc_mkdir_data(const char *name, umode_t mode, struct proc_dir_entry *parent, void *data) { return NULL; }static inline struct proc_dir_entry *proc_mkdir_mode (const char *name,umode_t mode,struct proc_dir_entry *parent) {return NULL ; } +#define proc_create_seq_private(name, mode, parent, ops, 0, data) ({NULL;})#define proc_create_seq_data (name, mode, parent, ops, data) ({NULL;})#define proc_create_seq (name, mode, parent, ops) ({NULL;})#define proc_create (name, mode, parent, proc_fops) ({NULL;})
kernel/time/timer_list.c +2 -14
@@ -372,24 +372,12 @@ static const struct seq_operations timer_list_sops = { .show = timer_list_show, }; -static int timer_list_open (struct inode *inode,struct file *filp) -{ -return seq_open_private (filp, &timer_list_sops, -sizeof (struct timer_list_iter )); -} - -static const struct file_operations timer_list_fops = { - .open = timer_list_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, -}; -static int __init init_timer_list_procfs (void ) {struct proc_dir_entry *pe; - pe =proc_create ("timer_list" ,0400 ,NULL , &timer_list_fops); + pe =proc_create_seq_private ("timer_list" ,0400 ,NULL , &timer_list_sops, +sizeof (struct timer_list_iter ),NULL );if (!pe)return -ENOMEM ;return 0 ;
mm/vmalloc.c +3 -15
@@ -2751,24 +2751,12 @@ static const struct seq_operations vmalloc_op = { .show = s_show, }; -static int vmalloc_open (struct inode *inode,struct file *file) -{ -return seq_open_private (file, &vmalloc_op, - nr_node_ids *sizeof (unsigned int )); -} - -static const struct file_operations proc_vmalloc_operations = { - .open = vmalloc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, -}; -static int __init proc_vmalloc_init (void ) {if (IS_ENABLED (CONFIG_NUMA )) -proc_create ("vmallocinfo" ,S_IRUSR ,NULL , - &proc_vmalloc_operations); +proc_create_seq_private ("vmallocinfo" ,S_IRUSR ,NULL , + &vmalloc_op, + nr_node_ids *sizeof (unsigned int ),NULL );else proc_create_seq ("vmallocinfo" ,S_IRUSR ,NULL , &vmalloc_op);return 0 ;
net/appletalk/aarp.c +1 -19
@@ -907,11 +907,6 @@ void aarp_device_down(struct net_device *dev) }#ifdef CONFIG_PROC_FS -struct aarp_iter_state { -int bucket; -struct aarp_entry **table; -}; -/* * Get the aarp entry that is in the chain described * by the iterator.
@@ -1033,25 +1028,12 @@ static int aarp_seq_show(struct seq_file *seq, void *v) return 0; } -static const struct seq_operations aarp_seq_ops = { +const struct seq_operations aarp_seq_ops = { .start = aarp_seq_start, .next = aarp_seq_next, .stop = aarp_seq_stop, .show = aarp_seq_show, }; - -static int aarp_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_private (file, &aarp_seq_ops, -sizeof (struct aarp_iter_state )); -} - -const struct file_operations atalk_seq_arp_fops = { - .open = aarp_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, -};#endif /* General module cleanup. Called from cleanup_module() in ddp.c. */
net/appletalk/atalk_proc.c +2 -1
@@ -236,7 +236,8 @@ int __init atalk_proc_init(void)if (!p) goto out_socket; - p =proc_create ("arp" ,0444 , atalk_proc_dir, &atalk_seq_arp_fops); + p =proc_create_seq_private ("arp" ,0444 , atalk_proc_dir, &aarp_seq_ops, +sizeof (struct aarp_iter_state ),NULL );if (!p) goto out_arp;
net/atm/lec.c +2 -13
@@ -985,18 +985,6 @@ static const struct seq_operations lec_seq_ops = { .stop = lec_seq_stop, .show = lec_seq_show, }; - -static int lec_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_private (file, &lec_seq_ops,sizeof (struct lec_state )); -} - -static const struct file_operations lec_seq_fops = { - .open = lec_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, -};#endif static int lane_ioctl (struct socket *sock,unsigned int cmd,unsigned long arg)
@@ -1042,7 +1030,8 @@ static int __init lane_module_init(void)#ifdef CONFIG_PROC_FS struct proc_dir_entry *p; - p =proc_create ("lec" ,0444 , atm_proc_root, &lec_seq_fops); + p =proc_create_seq_private ("lec" ,0444 , atm_proc_root, &lec_seq_ops, +sizeof (struct lec_state ),NULL );if (!p) {pr_err ("Unable to initialize /proc/net/atm/lec\n" );return -ENOMEM ;
net/decnet/af_decnet.c +3 -14
@@ -2314,19 +2314,6 @@ static const struct seq_operations dn_socket_seq_ops = { .stop = dn_socket_seq_stop, .show = dn_socket_seq_show, }; - -static int dn_socket_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_private (file, &dn_socket_seq_ops, -sizeof (struct dn_iter_state )); -} - -static const struct file_operations dn_socket_seq_fops = { - .open = dn_socket_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, -};#endif static const struct net_proto_family dn_family_ops = {
@@ -2383,7 +2370,9 @@ static int __init decnet_init(void)dev_add_pack (&dn_dix_packet_type);register_netdevice_notifier (&dn_dev_notifier); -proc_create ("decnet" ,0444 , init_net.proc_net, &dn_socket_seq_fops); +proc_create_seq_private ("decnet" ,0444 , init_net.proc_net, + &dn_socket_seq_ops,sizeof (struct dn_iter_state ), +NULL );dn_register_sysctl (); out:return rc;
net/decnet/dn_route.c +3 -16
@@ -1852,20 +1852,6 @@ static const struct seq_operations dn_rt_cache_seq_ops = { .stop = dn_rt_cache_seq_stop, .show = dn_rt_cache_seq_show, }; - -static int dn_rt_cache_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_private (file, &dn_rt_cache_seq_ops, -sizeof (struct dn_rt_cache_iter_state )); -} - -static const struct file_operations dn_rt_cache_seq_fops = { - .open = dn_rt_cache_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, -}; -#endif /* CONFIG_PROC_FS */ void __init dn_route_init (void )
@@ -1918,8 +1904,9 @@ void __init dn_route_init(void) dn_dst_ops.gc_thresh = (dn_rt_hash_mask +1 ); -proc_create ("decnet_cache" ,0444 , init_net.proc_net, - &dn_rt_cache_seq_fops); +proc_create_seq_private ("decnet_cache" ,0444 , init_net.proc_net, + &dn_rt_cache_seq_ops, +sizeof (struct dn_rt_cache_iter_state ),NULL );#ifdef CONFIG_DECNET_ROUTER rtnl_register_module(THIS_MODULE, PF_DECnet, RTM_GETROUTE,
Signature · 1 line
2.17.0
Re: [PATCH 03/39] proc: introduce proc_create_seq_private
Quoted 11 lines · Christoph Hellwig
drivers/s390/cio/blacklist.c +0
-3@@ -391,28 +391,15 @@ static const struct seq_operations cio_ignore_proc_seq_ops = { .show = cio_ignore_proc_seq_show, }; -static int -cio_ignore_proc_open (struct inode *inode,struct file *file) -{
drivers/s390/cio/blacklist.c static const struct seq_operations cio_ignore_proc_seq_ops = { · line 406
Quoted 10 lines
drivers/s390/cio/blacklist.c +0
-10-return seq_open_private (file, &cio_ignore_proc_seq_ops, -sizeof (struct ccwdev_iter )); -} - -static const struct file_operations cio_ignore_proc_fops = { - .open = cio_ignore_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, - .write = cio_ignore_write,
^^^^^^^^^^^^^^^^
The cio_ignore_write() function isn't used any more so compilers will complain.
Quoted 6 lines
drivers/s390/cio/blacklist.c +0
-2-}; -static int cio_ignore_proc_init (void ) {struct proc_dir_entry *entry;
drivers/s390/cio/blacklist.c static const struct seq_operations cio_ignore_proc_seq_ops = { · line 405
Quoted 10 lines
drivers/s390/cio/blacklist.c +4
-2- entry =proc_create ("cio_ignore" ,S_IFREG |S_IRUGO |S_IWUSR ,NULL , - &cio_ignore_proc_fops); + entry =proc_create_seq_private ("cio_ignore" , +S_IFREG |S_IRUGO |S_IWUSR ,NULL , + &cio_ignore_proc_seq_ops,sizeof (struct ccwdev_iter ), +NULL );if (!entry)return -ENOENT ;return 0 ;
regards,
dan carpenter
Re: [PATCH 03/39] proc: introduce proc_create_seq_private
Quoted 9 lines · Dan Carpenter
drivers/s390/cio/blacklist.c static const struct seq_operations cio_ignore_proc_seq_ops = { · line 406
Quoted 6 lines
drivers/s390/cio/blacklist.c +0
-6-static const struct file_operations cio_ignore_proc_fops = { - .open = cio_ignore_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, - .write = cio_ignore_write,^^^^^^^^^^^^^^^^The
cio_ignore_write()function isn't used any more so compilers will complain.
No compiler in the buildboot farm complained, but neverless this
Re: [PATCH 03/39] proc: introduce proc_create_seq_private
In reply to Christoph Hellwigfs/proc/internal.h struct proc_dir_entry { · line 48
Quoted 9 lines · Christoph Hellwig
Variant of
proc_create_datathat directly take a structseq_operationsfs/proc/internal.h +1
-0@@ -45,6 +45,7 @@ struct proc_dir_entry {const struct inode_operations *proc_iops;const struct file_operations *proc_fops;const struct seq_operations *seq_ops; +size_t state_size;
"unsigned int" please.
Where have you seen 4GB priv states?
Re: [PATCH 03/39] proc: introduce proc_create_seq_private
Quoted 13 lines · Alexey Dobriyan
fs/proc/internal.h struct proc_dir_entry { · line 48
Quoted 9 lines · Christoph Hellwig
Variant of
proc_create_datathat directly take a structseq_operationsfs/proc/internal.h +1
-0@@ -45,6 +45,7 @@ struct proc_dir_entry {const struct inode_operations *proc_iops;const struct file_operations *proc_fops;const struct seq_operations *seq_ops; +size_t state_size;"unsigned int" please.
Quoted 1 line
Where have you seen 4GB priv states?
We're passing the result of sizeof, which happens to be a size_t. But if it makes you happy I can switch to unsigned int.
PATCH 4/39 proc: introduce proc_create_single{,_data}
In reply to Christoph HellwigVariants of proc_create{,_data} that directly take a seq_file show callback and drastically reduces the boilerplate code in the callers.
All trivial callers converted over.
--- arch/arm/kernel/dma.c | 14 +--- arch/arm/kernel/swp_emulate.c | 15 +--- arch/arm/mach-rpc/ecard.c | 16 +--- arch/ia64/kernel/palinfo.c | 16 +--- arch/ia64/kernel/salinfo.c | 42 ++++------ arch/ia64/sn/kernel/sn2/prominfo_proc.c | 32 +------- arch/ia64/sn/kernel/sn2/sn_proc_fs.c | 62 ++------------ arch/m68k/kernel/setup_mm.c | 14 +--- arch/mips/pci/ops-pmcmsp.c | 28 +------ arch/mips/sibyte/common/bus_watcher.c | 16 +--- arch/parisc/kernel/pci-dma.c | 17 +--- arch/parisc/kernel/pdc_chassis.c | 14 +--- arch/powerpc/kernel/eeh.c | 14 +--- arch/powerpc/kernel/rtas-proc.c | 32 +------- arch/powerpc/platforms/cell/spufs/sched.c | 14 +--- arch/s390/kernel/sysinfo.c | 14 +--- arch/sh/drivers/dma/dma-api.c | 14 +--- arch/sparc/kernel/ioport.c | 19 +---- arch/um/drivers/ubd_kern.c | 16 +--- arch/x86/kernel/apm_32.c | 15 +--- drivers/acpi/ac.c | 21 +---- drivers/acpi/button.c | 19 +---- drivers/block/DAC960.c | 49 ++--------- drivers/block/pktcdvd.c | 14 +--- drivers/block/ps3vram.c | 17 +--- drivers/char/apm-emulation.c | 15 +--- drivers/char/ds1620.c | 14 +--- drivers/char/efirtc.c | 15 +--- drivers/char/nvram.c | 15 +--- drivers/char/rtc.c | 19 +---- drivers/char/toshiba.c | 15 +--- drivers/connector/connector.c | 15 +--- drivers/input/misc/hp_sdc_rtc.c | 14 +--- drivers/isdn/capi/capi.c | 30 +------ drivers/isdn/capi/capidrv.c | 15 +--- drivers/isdn/hardware/eicon/diva_didd.c | 17 +--- drivers/isdn/hardware/eicon/divasi.c | 17 +--- drivers/macintosh/via-pmu.c | 57 +++---------- drivers/media/pci/saa7164/saa7164-core.c | 14 +--- drivers/media/pci/zoran/videocodec.c | 16 +--- drivers/message/fusion/mptbase.c | 57 +++---------- drivers/mtd/mtdcore.c | 14 +--- drivers/net/wireless/atmel/atmel.c | 15 +--- .../net/wireless/intersil/hostap/hostap_ap.c | 16 +--- drivers/net/wireless/ray_cs.c | 15 +--- drivers/nubus/proc.c | 55 ++----------- drivers/parisc/ccio-dma.c | 34 +------- drivers/parisc/sba_iommu.c | 32 +------- drivers/platform/x86/toshiba_acpi.c | 17 +--- drivers/pnp/pnpbios/proc.c | 78 ++---------------- drivers/staging/comedi/proc.c | 18 +--- drivers/usb/gadget/udc/at91_udc.c | 16 +--- drivers/usb/gadget/udc/fsl_udc_core.c | 18 +--- drivers/usb/gadget/udc/goku_udc.c | 18 +--- drivers/usb/gadget/udc/omap_udc.c | 15 +--- drivers/video/fbdev/via/viafbdev.c | 17 +--- fs/cifs/cifs_debug.c | 15 +--- fs/f2fs/sysfs.c | 29 ++----- fs/filesystems.c | 14 +--- fs/fscache/internal.h | 2 +- fs/fscache/proc.c | 4 +- fs/fscache/stats.c | 17 +--- fs/proc/cmdline.c | 14 +--- fs/proc/generic.c | 27 ++++++ fs/proc/internal.h | 5 +- fs/proc/loadavg.c | 14 +--- fs/proc/meminfo.c | 14 +--- fs/proc/softirqs.c | 14 +--- fs/proc/uptime.c | 14 +--- fs/proc/version.c | 14 +--- fs/reiserfs/procfs.c | 16 +--- fs/xfs/xfs_stats.c | 31 +------ include/linux/proc_fs.h | 10 ++- kernel/cgroup/cgroup-internal.h | 2 +- kernel/cgroup/cgroup-v1.c | 14 +--- kernel/cgroup/cgroup.c | 2 +- kernel/dma.c | 14 +--- kernel/exec_domain.c | 14 +--- kernel/irq/proc.c | 82 +++---------------- kernel/locking/lockdep_proc.c | 16 +--- net/8021q/vlanproc.c | 21 +---- net/ipv4/ipconfig.c | 14 +--- net/ipv4/route.c | 15 +--- net/ipv6/proc.c | 17 +--- net/sched/sch_api.c | 14 +--- 85 files changed, 233 insertions(+), 1513 deletions(-)
arch/arm/kernel/dma.c +1 -13
@@ -276,21 +276,9 @@ static int proc_dma_show(struct seq_file *m, void *v)return 0 ; } -static int proc_dma_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_dma_show,NULL ); -} - -static const struct file_operations proc_dma_operations = { - .open = proc_dma_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init proc_dma_init (void ) { -proc_create ("dma" ,0 ,NULL , &proc_dma_operations); +proc_create_single ("dma" ,0 ,NULL , proc_dma_show);return 0 ; }
arch/arm/kernel/swp_emulate.c +2 -13
@@ -91,18 +91,6 @@ static int proc_status_show(struct seq_file *m, void *v)seq_printf (m,"Last process:\t\t%d\n" , previous_pid); return 0; } - -static int proc_status_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_status_show,PDE_DATA (inode)); -} - -static const struct file_operations proc_status_fops = { - .open = proc_status_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif /*
@@ -260,7 +248,8 @@ static int __init swp_emulation_init(void)return 0 ;#ifdef CONFIG_PROC_FS -if (!proc_create ("cpu/swp_emulation" ,S_IRUGO ,NULL , &proc_status_fops)) +if (!proc_create_single ("cpu/swp_emulation" ,S_IRUGO ,NULL , + proc_status_show))return -ENOMEM ;#endif /* CONFIG_PROC_FS */
arch/arm/mach-rpc/ecard.c +2 -14
@@ -657,25 +657,13 @@ static int ecard_devices_proc_show(struct seq_file *m, void *v)return 0 ; } -static int ecard_devices_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, ecard_devices_proc_show,NULL ); -} - -static const struct file_operations bus_ecard_proc_fops = { - .owner =THIS_MODULE , - .open = ecard_devices_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static struct proc_dir_entry *proc_bus_ecard_dir =NULL ;static void ecard_proc_init (void ) { proc_bus_ecard_dir =proc_mkdir ("bus/ecard" ,NULL ); -proc_create ("devices" ,0 , proc_bus_ecard_dir, &bus_ecard_proc_fops); +proc_create_single ("devices" ,0 , proc_bus_ecard_dir, + ecard_devices_proc_show); }#define ec_set_resource (ec,nr,st,sz) \
arch/ia64/kernel/palinfo.c +2 -14
@@ -920,18 +920,6 @@ static int proc_palinfo_show(struct seq_file *m, void *v)return 0 ; } -static int proc_palinfo_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_palinfo_show,PDE_DATA (inode)); -} - -static const struct file_operations proc_palinfo_fops = { - .open = proc_palinfo_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int palinfo_add_proc (unsigned int cpu) {pal_func_cpu_u_t f;
@@ -948,8 +936,8 @@ static int palinfo_add_proc(unsigned int cpu)for (j=0 ; j <NR_PALINFO_ENTRIES ; j++) { f.func_id = j; -proc_create_data (palinfo_entries[j].name,0 , cpu_dir, - &proc_palinfo_fops, (void *)f.value); +proc_create_single_data (palinfo_entries[j].name,0 , cpu_dir, + proc_palinfo_show, (void *)f.value); }return 0 ; }
arch/ia64/kernel/salinfo.c +14 -28
64 lines not on this page · raw message
arch/ia64/sn/kernel/sn2/prominfo_proc.c +4 -28
@@ -140,18 +140,6 @@ static int proc_fit_show(struct seq_file *m, void *v)return 0 ; } -static int proc_fit_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_fit_show,PDE_DATA (inode)); -} - -static const struct file_operations proc_fit_fops = { - .open = proc_fit_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int proc_version_show (struct seq_file *m,void *v) {unsigned long nasid = (unsigned long )m->private;
@@ -174,18 +162,6 @@ static int proc_version_show(struct seq_file *m, void *v)return 0 ; } -static int proc_version_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_version_show,PDE_DATA (inode)); -} - -static const struct file_operations proc_version_fops = { - .open = proc_version_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/* module entry points */ int __init prominfo_init (void ); void __exit prominfo_exit(void);
@@ -217,10 +193,10 @@ int __init prominfo_init(void)if (!dir)continue ; nasid =cnodeid_to_nasid (cnodeid); -proc_create_data ("fit" ,0 , dir, - &proc_fit_fops, (void *)nasid); -proc_create_data ("version" ,0 , dir, - &proc_version_fops, (void *)nasid); +proc_create_single_data ("fit" ,0 , dir, proc_fit_show, + (void *)nasid); +proc_create_single_data ("version" ,0 , dir, proc_version_show, + (void *)nasid); }return 0 ; }
arch/ia64/sn/kernel/sn2/sn_proc_fs.c +7 -55
96 lines not on this page · raw message
arch/m68k/kernel/setup_mm.c +1 -13
@@ -527,21 +527,9 @@ static int hardware_proc_show(struct seq_file *m, void *v)return 0 ; } -static int hardware_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, hardware_proc_show,NULL ); -} - -static const struct file_operations hardware_proc_fops = { - .open = hardware_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init proc_hardware_init (void ) { -proc_create ("hardware" ,0 ,NULL , &hardware_proc_fops); +proc_create_single ("hardware" ,0 ,NULL , hardware_proc_show);return 0 ; }module_init (proc_hardware_init);
arch/mips/pci/ops-pmcmsp.c +2 -26
@@ -83,18 +83,6 @@ static int show_msp_pci_counts(struct seq_file *m, void *v)return 0 ; } -static int msp_pci_rd_cnt_open (struct inode *inode,struct file *file) -{ -return single_open (file, show_msp_pci_counts,NULL ); -} - -static const struct file_operations msp_pci_rd_cnt_fops = { - .open = msp_pci_rd_cnt_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/***************************************************************************** * * FUNCTION: gen_pci_cfg_wr_show
@@ -160,18 +148,6 @@ static int gen_pci_cfg_wr_show(struct seq_file *m, void *v)return 0 ; } -static int gen_pci_cfg_wr_open (struct inode *inode,struct file *file) -{ -return single_open (file, gen_pci_cfg_wr_show,NULL ); -} - -static const struct file_operations gen_pci_cfg_wr_fops = { - .open = gen_pci_cfg_wr_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/***************************************************************************** * * FUNCTION: pci_proc_init
@@ -188,8 +164,8 @@ static const struct file_operations gen_pci_cfg_wr_fops = {****************************************************************************/ static void pci_proc_init (void ) { -proc_create ("pmc_msp_pci_rd_cnt" ,0 ,NULL , &msp_pci_rd_cnt_fops); -proc_create ("pmc_msp_pci_cfg_wr" ,0 ,NULL , &gen_pci_cfg_wr_fops); +proc_create_single ("pmc_msp_pci_rd_cnt" ,0 ,NULL , show_msp_pci_counts); +proc_create_single ("pmc_msp_pci_cfg_wr" ,0 ,NULL , gen_pci_cfg_wr_show); }#endif /* CONFIG_PROC_FS && PCI_COUNTERS */
arch/mips/sibyte/common/bus_watcher.c +2 -14
@@ -142,24 +142,12 @@ static int bw_proc_show(struct seq_file *m, void *v)return 0 ; } -static int bw_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, bw_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations bw_proc_fops = { - .open = bw_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static void create_proc_decoder (struct bw_stats_struct *stats) {struct proc_dir_entry *ent; - ent =proc_create_data ("bus_watcher" ,S_IWUSR |S_IRUGO ,NULL , - &bw_proc_fops, stats); + ent =proc_create_single_data ("bus_watcher" ,S_IWUSR |S_IRUGO ,NULL , + bw_proc_show, stats);if (!ent) {printk (KERN_INFO "Unable to initialize bus_watcher /proc entry\n" );return ;
arch/parisc/kernel/pci-dma.c +2 -15
@@ -367,19 +367,6 @@ static int proc_pcxl_dma_show(struct seq_file *m, void *v)return 0 ; } -static int proc_pcxl_dma_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_pcxl_dma_show,NULL ); -} - -static const struct file_operations proc_pcxl_dma_ops = { - .owner =THIS_MODULE , - .open = proc_pcxl_dma_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init pcxl_dma_init (void ) {
@@ -397,8 +384,8 @@ pcxl_dma_init(void) "pcxl_dma_init: Unable to create gsc /proc dir entry\n"); else {struct proc_dir_entry * ent; - ent =proc_create ("pcxl_dma" ,0 , proc_gsc_root, - &proc_pcxl_dma_ops); + ent =proc_create_single ("pcxl_dma" ,0 , proc_gsc_root, + proc_pcxl_dma_show);if (!ent)printk (KERN_WARNING "pci-dma.c: Unable to create pcxl_dma /proc entry.\n" );
arch/parisc/kernel/pdc_chassis.c +1 -13
@@ -266,18 +266,6 @@ static int pdc_chassis_warn_show(struct seq_file *m, void *v)return 0 ; } -static int pdc_chassis_warn_open (struct inode *inode,struct file *file) -{ -return single_open (file, pdc_chassis_warn_show,NULL ); -} - -static const struct file_operations pdc_chassis_warn_fops = { - .open = pdc_chassis_warn_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init pdc_chassis_create_procfs (void ) {unsigned long test;
@@ -292,7 +280,7 @@ static int __init pdc_chassis_create_procfs(void)printk (KERN_INFO "Enabling PDC chassis warnings support v%s\n" ,PDC_CHASSIS_VER ); -proc_create ("chassis" ,0400 ,NULL , &pdc_chassis_warn_fops); +proc_create_single ("chassis" ,0400 ,NULL , pdc_chassis_warn_show);return 0 ; }
arch/powerpc/kernel/eeh.c +1 -13
@@ -1775,18 +1775,6 @@ static int proc_eeh_show(struct seq_file *m, void *v)return 0 ; } -static int proc_eeh_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_eeh_show,NULL ); -} - -static const struct file_operations proc_eeh_operations = { - .open = proc_eeh_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -#ifdef CONFIG_DEBUG_FS static int eeh_enable_dbgfs_set (void *data,u64 val) {
@@ -1828,7 +1816,7 @@ DEFINE_SIMPLE_ATTRIBUTE(eeh_freeze_dbgfs_ops, eeh_freeze_dbgfs_get,static int __init eeh_init_proc (void ) {if (machine_is (pseries) ||machine_is (powernv)) { -proc_create ("powerpc/eeh" ,0 ,NULL , &proc_eeh_operations); +proc_create_single ("powerpc/eeh" ,0 ,NULL , proc_eeh_show);#ifdef CONFIG_DEBUG_FS debugfs_create_file("eeh_enable", 0600, powerpc_debugfs_root, NULL,
arch/powerpc/kernel/rtas-proc.c +4 -28
@@ -154,18 +154,6 @@ static ssize_t ppc_rtas_tone_volume_write(struct file *file,static int ppc_rtas_tone_volume_show (struct seq_file *m,void *v);static int ppc_rtas_rmo_buf_show (struct seq_file *m,void *v); -static int sensors_open (struct inode *inode,struct file *file) -{ -return single_open (file, ppc_rtas_sensors_show,NULL ); -} - -static const struct file_operations ppc_rtas_sensors_operations = { - .open = sensors_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int poweron_open (struct inode *inode,struct file *file) {return single_open (file, ppc_rtas_poweron_show,NULL );
@@ -231,18 +219,6 @@ static const struct file_operations ppc_rtas_tone_volume_operations = { .release = single_release, }; -static int rmo_buf_open (struct inode *inode,struct file *file) -{ -return single_open (file, ppc_rtas_rmo_buf_show,NULL ); -} - -static const struct file_operations ppc_rtas_rmo_buf_ops = { - .open = rmo_buf_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int ppc_rtas_find_all_sensors (void );static void ppc_rtas_process_sensor (struct seq_file *m,struct individual_sensor *s,int state,int error,const char *loc);
@@ -267,14 +243,14 @@ static int __init proc_rtas_init(void) &ppc_rtas_clock_operations);proc_create ("powerpc/rtas/poweron" ,0644 ,NULL , &ppc_rtas_poweron_operations); -proc_create ("powerpc/rtas/sensors" ,0444 ,NULL , - &ppc_rtas_sensors_operations); +proc_create_single ("powerpc/rtas/sensors" ,0444 ,NULL , + ppc_rtas_sensors_show);proc_create ("powerpc/rtas/frequency" ,0644 ,NULL , &ppc_rtas_tone_freq_operations);proc_create ("powerpc/rtas/volume" ,0644 ,NULL , &ppc_rtas_tone_volume_operations); -proc_create ("powerpc/rtas/rmo_buffer" ,0400 ,NULL , - &ppc_rtas_rmo_buf_ops); +proc_create_single ("powerpc/rtas/rmo_buffer" ,0400 ,NULL , + ppc_rtas_rmo_buf_show);return 0 ; }
arch/powerpc/platforms/cell/spufs/sched.c +1 -13
@@ -1095,18 +1095,6 @@ static int show_spu_loadavg(struct seq_file *s, void *private)atomic_read (&nr_spu_contexts), idr_get_cursor(&task_active_pid_ns(current)->idr));return 0 ; -} - -static int spu_loadavg_open (struct inode *inode,struct file *file) -{ -return single_open (file, show_spu_loadavg,NULL ); -} - -static const struct file_operations spu_loadavg_fops = { - .open = spu_loadavg_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, };int __init spu_sched_init (void )
@@ -1135,7 +1123,7 @@ int __init spu_sched_init(void)mod_timer (&spuloadavg_timer,0 ); - entry =proc_create ("spu_loadavg" ,0 ,NULL , &spu_loadavg_fops); + entry =proc_create_single ("spu_loadavg" ,0 ,NULL , show_spu_loadavg);if (!entry) goto out_stop_kthread;
arch/s390/kernel/sysinfo.c +1 -13
@@ -294,21 +294,9 @@ static int sysinfo_show(struct seq_file *m, void *v)return 0 ; } -static int sysinfo_open (struct inode *inode,struct file *file) -{ -return single_open (file, sysinfo_show,NULL ); -} - -static const struct file_operations sysinfo_fops = { - .open = sysinfo_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init sysinfo_create_proc (void ) { -proc_create ("sysinfo" ,0444 ,NULL , &sysinfo_fops); +proc_create_single ("sysinfo" ,0444 ,NULL , sysinfo_show);return 0 ; }device_initcall (sysinfo_create_proc);
arch/sh/drivers/dma/dma-api.c +1 -13
@@ -339,18 +339,6 @@ static int dma_proc_show(struct seq_file *m, void *v)return 0 ; } -static int dma_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, dma_proc_show,NULL ); -} - -static const struct file_operations dma_proc_fops = { - .open = dma_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -int register_dmac (struct dma_info *info) {unsigned int total_channels, i;
@@ -423,7 +411,7 @@ EXPORT_SYMBOL(unregister_dmac);static int __init dma_api_init (void ) {printk (KERN_NOTICE "DMA: Registering DMA API.\n" ); -return proc_create ("dma" ,0 ,NULL , &dma_proc_fops) ?0 : -ENOMEM ; +return proc_create_single ("dma" ,0 ,NULL , dma_proc_show) ?0 : -ENOMEM ; }subsys_initcall (dma_api_init);
arch/sparc/kernel/ioport.c +4 -15
@@ -678,25 +678,14 @@ static int sparc_io_proc_show(struct seq_file *m, void *v) return 0; } - -static int sparc_io_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, sparc_io_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations sparc_io_proc_fops = { - .owner =THIS_MODULE , - .open = sparc_io_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif /* CONFIG_PROC_FS */ static void register_proc_sparc_ioport (void ) {#ifdef CONFIG_PROC_FS -proc_create_data ("io_map" ,0 ,NULL , &sparc_io_proc_fops, &sparc_iomap); -proc_create_data ("dvma_map" ,0 ,NULL , &sparc_io_proc_fops, &_sparc_dvma); +proc_create_single_data ("io_map" ,0 ,NULL , sparc_io_proc_show, + &sparc_iomap); +proc_create_single_data ("dvma_map" ,0 ,NULL , sparc_io_proc_show, + &_sparc_dvma);#endif }
arch/um/drivers/ubd_kern.c +2 -14
@@ -208,19 +208,6 @@ static int fake_ide_media_proc_show(struct seq_file *m, void *v)return 0 ; } -static int fake_ide_media_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, fake_ide_media_proc_show,NULL ); -} - -static const struct file_operations fake_ide_media_proc_fops = { - .owner =THIS_MODULE , - .open = fake_ide_media_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static void make_ide_entries (const char *dev_name) {struct proc_dir_entry *dir, *ent;
@@ -231,7 +218,8 @@ static void make_ide_entries(const char *dev_name) dir =proc_mkdir (dev_name, proc_ide);if (!dir)return ; - ent =proc_create ("media" ,S_IRUGO , dir, &fake_ide_media_proc_fops); + ent =proc_create_single ("media" ,S_IRUGO , dir, + fake_ide_media_proc_show);if (!ent)return ;snprintf (name,sizeof (name),"ide0/%s" , dev_name);proc_symlink (dev_name, proc_ide_root, name);
arch/x86/kernel/apm_32.c +1 -14
@@ -1715,19 +1715,6 @@ static int proc_apm_show(struct seq_file *m, void *v)return 0 ; } -static int proc_apm_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_apm_show,NULL ); -} - -static const struct file_operations apm_file_ops = { - .owner =THIS_MODULE , - .open = proc_apm_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int apm (void *unused) {unsigned short bx;
@@ -2360,7 +2347,7 @@ static int __init apm_init(void)set_desc_base (&gdt[APM_DS >>3 ], (unsigned long )__va ((unsigned long )apm_info.bios.dseg <<4 )); -proc_create ("apm" ,0 ,NULL , &apm_file_ops); +proc_create_single ("apm" ,0 ,NULL , proc_apm_show); kapmd_task =kthread_create (apm,NULL ,"kapmd" );if (IS_ERR (kapmd_task)) {
drivers/acpi/ac.c +2 -19
@@ -82,7 +82,6 @@ static SIMPLE_DEV_PM_OPS(acpi_ac_pm, NULL, acpi_ac_resume);#ifdef CONFIG_ACPI_PROCFS_POWER extern struct proc_dir_entry *acpi_lock_ac_dir (void );extern void *acpi_unlock_ac_dir (struct proc_dir_entry *acpi_ac_dir); -static int acpi_ac_open_fs (struct inode *inode,struct file *file);#endif
@@ -111,16 +110,6 @@ struct acpi_ac {#define to_acpi_ac (x) power_supply_get_drvdata(x) -#ifdef CONFIG_ACPI_PROCFS_POWER -static const struct file_operations acpi_ac_fops = { - .owner =THIS_MODULE , - .open = acpi_ac_open_fs, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -#endif -/* -------------------------------------------------------------------------- AC Adapter Management -------------------------------------------------------------------------- */
@@ -209,11 +198,6 @@ static int acpi_ac_seq_show(struct seq_file *seq, void *offset)return 0 ; } -static int acpi_ac_open_fs (struct inode *inode,struct file *file) -{ -return single_open (file, acpi_ac_seq_show,PDE_DATA (inode)); -} -static int acpi_ac_add_fs (struct acpi_ac *ac) {struct proc_dir_entry *entry =NULL ;
@@ -228,9 +212,8 @@ static int acpi_ac_add_fs(struct acpi_ac *ac) }/* 'state' [R] */ - entry =proc_create_data (ACPI_AC_FILE_STATE , -S_IRUGO ,acpi_device_dir (ac->device), - &acpi_ac_fops, ac); + entry =proc_create_single_data (ACPI_AC_FILE_STATE ,S_IRUGO , +acpi_device_dir (ac->device), acpi_ac_seq_show, ac);if (!entry)return -ENODEV ;return 0 ;
drivers/acpi/button.c +3 -16
@@ -263,19 +263,6 @@ static int acpi_button_state_seq_show(struct seq_file *seq, void *offset)return 0 ; } -static int acpi_button_state_open_fs (struct inode *inode,struct file *file) -{ -return single_open (file, acpi_button_state_seq_show,PDE_DATA (inode)); -} - -static const struct file_operations acpi_button_state_fops = { - .owner =THIS_MODULE , - .open = acpi_button_state_open_fs, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int acpi_button_add_fs (struct acpi_device *device) {struct acpi_button *button =acpi_driver_data (device);
@@ -311,9 +298,9 @@ static int acpi_button_add_fs(struct acpi_device *device) }/* create /proc/acpi/button/lid/LID/state */ - entry =proc_create_data (ACPI_BUTTON_FILE_STATE , -S_IRUGO ,acpi_device_dir (device), - &acpi_button_state_fops, device); + entry =proc_create_single_data (ACPI_BUTTON_FILE_STATE ,S_IRUGO , +acpi_device_dir (device), acpi_button_state_seq_show, + device);if (!entry) { ret = -ENODEV ; goto remove_dev_dir;
drivers/block/DAC960.c +6 -43
79 lines not on this page · raw message
drivers/block/pktcdvd.c +1 -13
@@ -2538,18 +2538,6 @@ static int pkt_seq_show(struct seq_file *m, void *p)return 0 ; } -static int pkt_seq_open (struct inode *inode,struct file *file) -{ -return single_open (file, pkt_seq_show,PDE_DATA (inode)); -} - -static const struct file_operations pkt_proc_fops = { - .open = pkt_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release -}; -static int pkt_new_dev (struct pktcdvd_device *pd,dev_t dev) {int i;
@@ -2604,7 +2592,7 @@ static int pkt_new_dev(struct pktcdvd_device *pd, dev_t dev) goto out_mem; } -proc_create_data (pd->name,0 , pkt_proc, &pkt_proc_fops, pd); +proc_create_single_data (pd->name,0 , pkt_proc, pkt_seq_show, pd);pkt_dbg (1 , pd,"writer mapped to %s\n" ,bdevname (bdev, b));return 0 ;
drivers/block/ps3vram.c +2 -15
@@ -521,26 +521,13 @@ static int ps3vram_proc_show(struct seq_file *m, void *v)return 0 ; } -static int ps3vram_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, ps3vram_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations ps3vram_proc_fops = { - .owner =THIS_MODULE , - .open = ps3vram_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static void ps3vram_proc_init (struct ps3_system_bus_device *dev) {struct ps3vram_priv *priv =ps3_system_bus_get_drvdata (dev);struct proc_dir_entry *pde; - pde =proc_create_data (DEVICE_NAME ,0444 ,NULL , &ps3vram_proc_fops, - priv); + pde =proc_create_single_data (DEVICE_NAME ,0444 ,NULL , + ps3vram_proc_show, priv);if (!pde)dev_warn (&dev->core,"failed to create /proc entry\n" ); }
drivers/char/apm-emulation.c +1 -14
@@ -461,19 +461,6 @@ static int proc_apm_show(struct seq_file *m, void *v) return 0; } - -static int proc_apm_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_apm_show,NULL ); -} - -static const struct file_operations apm_proc_fops = { - .owner =THIS_MODULE , - .open = proc_apm_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif static int kapmd (void *arg)
@@ -657,7 +644,7 @@ static int __init apm_init(void)wake_up_process (kapmd_tsk);#ifdef CONFIG_PROC_FS -proc_create ("apm" ,0 ,NULL , &apm_proc_fops); +proc_create_single ("apm" ,0 ,NULL , proc_apm_show);#endif ret =misc_register (&apm_device);
drivers/char/ds1620.c +1 -13
@@ -345,18 +345,6 @@ static int ds1620_proc_therm_show(struct seq_file *m, void *v) fan_state[netwinder_get_fan()]);return 0 ; } - -static int ds1620_proc_therm_open (struct inode *inode,struct file *file) -{ -return single_open (file, ds1620_proc_therm_show,NULL ); -} - -static const struct file_operations ds1620_proc_therm_fops = { - .open = ds1620_proc_therm_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif static const struct file_operations ds1620_fops = {
@@ -404,7 +392,7 @@ static int __init ds1620_init(void)return ret;#ifdef THERM_USE_PROC -if (!proc_create ("therm" ,0 ,NULL , &ds1620_proc_therm_fops)) +if (!proc_create_single ("therm" ,0 ,NULL , ds1620_proc_therm_show))printk (KERN_ERR "therm: unable to register /proc/therm\n" );#endif
drivers/char/efirtc.c +1 -14
@@ -358,19 +358,6 @@ static int efi_rtc_proc_show(struct seq_file *m, void *v)return 0 ; } - -static int efi_rtc_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, efi_rtc_proc_show,NULL ); -} - -static const struct file_operations efi_rtc_proc_fops = { - .open = efi_rtc_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init efi_rtc_init (void ) {
@@ -386,7 +373,7 @@ efi_rtc_init(void)return ret; } - dir =proc_create ("driver/efirtc" ,0 ,NULL , &efi_rtc_proc_fops); + dir =proc_create_single ("driver/efirtc" ,0 ,NULL , efi_rtc_proc_show);if (dir ==NULL ) {printk (KERN_ERR "efirtc: can't create /proc/driver/efirtc.\n" );misc_deregister (&efi_rtc_dev);
drivers/char/nvram.c +1 -14
@@ -389,22 +389,9 @@ static int nvram_proc_read(struct seq_file *seq, void *offset)return 0 ; } -static int nvram_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, nvram_proc_read,NULL ); -} - -static const struct file_operations nvram_proc_fops = { - .owner =THIS_MODULE , - .open = nvram_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int nvram_add_proc_fs (void ) { -if (!proc_create ("driver/nvram" ,0 ,NULL , &nvram_proc_fops)) +if (!proc_create_single ("driver/nvram" ,0 ,NULL , nvram_proc_read))return -ENOMEM ;return 0 ; }
drivers/char/rtc.c +2 -17
@@ -171,7 +171,7 @@ static void mask_rtc_irq_bit(unsigned char bit)#endif #ifdef CONFIG_PROC_FS -static int rtc_proc_open (struct inode *inode,struct file *file); +static int rtc_proc_show (struct seq_file *seq,void *v);#endif /*
@@ -832,16 +832,6 @@ static struct miscdevice rtc_dev = { .fops = &rtc_fops, }; -#ifdef CONFIG_PROC_FS -static const struct file_operations rtc_proc_fops = { - .owner =THIS_MODULE , - .open = rtc_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -#endif -static resource_size_t rtc_size;static struct resource *__init rtc_request_region (resource_size_t size)
@@ -982,7 +972,7 @@ static int __init rtc_init(void) }#ifdef CONFIG_PROC_FS - ent =proc_create ("driver/rtc" ,0 ,NULL , &rtc_proc_fops); + ent =proc_create_single ("driver/rtc" ,0 ,NULL , rtc_proc_show);if (!ent)printk (KERN_WARNING "rtc: Failed to register with procfs.\n" );#endif
@@ -1201,11 +1191,6 @@ static int rtc_proc_show(struct seq_file *seq, void *v)#undef YN#undef NY } - -static int rtc_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, rtc_proc_show,NULL ); -}#endif static void rtc_get_rtc_time (struct rtc_time *rtc_tm)
drivers/char/toshiba.c +1 -14
@@ -326,19 +326,6 @@ static int proc_toshiba_show(struct seq_file *m, void *v) key); return 0; } - -static int proc_toshiba_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_toshiba_show,NULL ); -} - -static const struct file_operations proc_toshiba_fops = { - .owner =THIS_MODULE , - .open = proc_toshiba_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif
@@ -524,7 +511,7 @@ static int __init toshiba_init(void) {struct proc_dir_entry *pde; - pde =proc_create ("toshiba" ,0 ,NULL , &proc_toshiba_fops); + pde =proc_create_single ("toshiba" ,0 ,NULL , proc_toshiba_show);if (!pde) {misc_deregister (&tosh_device);return -ENOMEM ;
drivers/connector/connector.c +1 -14
@@ -260,19 +260,6 @@ static int cn_proc_show(struct seq_file *m, void *v)return 0 ; } -static int cn_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, cn_proc_show,NULL ); -} - -static const struct file_operations cn_file_ops = { - .owner =THIS_MODULE , - .open = cn_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release -}; -static struct cn_dev cdev = { .input = cn_rx_skb, };
@@ -297,7 +284,7 @@ static int cn_init(void) cn_already_initialized =1 ; -proc_create ("connector" ,S_IRUGO , init_net.proc_net, &cn_file_ops); +proc_create_single ("connector" ,S_IRUGO , init_net.proc_net, cn_proc_show);return 0 ; }
drivers/input/misc/hp_sdc_rtc.c +1 -13
@@ -509,18 +509,6 @@ static int hp_sdc_rtc_proc_show(struct seq_file *m, void *v)#undef NY } -static int hp_sdc_rtc_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, hp_sdc_rtc_proc_show,NULL ); -} - -static const struct file_operations hp_sdc_rtc_proc_fops = { - .open = hp_sdc_rtc_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int hp_sdc_rtc_ioctl (struct file *file,unsigned int cmd,unsigned long arg) {
@@ -713,7 +701,7 @@ static int __init hp_sdc_rtc_init(void)if (misc_register (&hp_sdc_rtc_dev) !=0 )printk (KERN_INFO "Could not register misc. dev for i8042 rtc\n" ); -proc_create ("driver/rtc" ,0 ,NULL , &hp_sdc_rtc_proc_fops); +proc_create_single ("driver/rtc" ,0 ,NULL , hp_sdc_rtc_proc_show);printk (KERN_INFO "HP i8042 SDC + MSM-58321 RTC support loaded " "(RTC v " RTC_VERSION ")\n" );
drivers/isdn/capi/capi.c +2 -28
@@ -1340,19 +1340,6 @@ static int capi20_proc_show(struct seq_file *m, void *v)return 0 ; } -static int capi20_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, capi20_proc_show,NULL ); -} - -static const struct file_operations capi20_proc_fops = { - .owner =THIS_MODULE , - .open = capi20_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/* * /proc/capi/capi20ncci: * applid ncci
@@ -1373,23 +1360,10 @@ static int capi20ncci_proc_show(struct seq_file *m, void *v)return 0 ; } -static int capi20ncci_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, capi20ncci_proc_show,NULL ); -} - -static const struct file_operations capi20ncci_proc_fops = { - .owner =THIS_MODULE , - .open = capi20ncci_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static void __init proc_init (void ) { -proc_create ("capi/capi20" ,0 ,NULL , &capi20_proc_fops); -proc_create ("capi/capi20ncci" ,0 ,NULL , &capi20ncci_proc_fops); +proc_create_single ("capi/capi20" ,0 ,NULL , capi20_proc_show); +proc_create_single ("capi/capi20ncci" ,0 ,NULL , capi20ncci_proc_show); } static void __exit proc_exit(void)
drivers/isdn/capi/capidrv.c +1 -14
@@ -2460,22 +2460,9 @@ static int capidrv_proc_show(struct seq_file *m, void *v)return 0 ; } -static int capidrv_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, capidrv_proc_show,NULL ); -} - -static const struct file_operations capidrv_proc_fops = { - .owner =THIS_MODULE , - .open = capidrv_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static void __init proc_init (void ) { -proc_create ("capi/capidrv" ,0 ,NULL , &capidrv_proc_fops); +proc_create_single ("capi/capidrv" ,0 ,NULL , capidrv_proc_show); } static void __exit proc_exit(void)
drivers/isdn/hardware/eicon/diva_didd.c +2 -15
@@ -78,26 +78,13 @@ static int divadidd_proc_show(struct seq_file *m, void *v)return 0 ; } -static int divadidd_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, divadidd_proc_show,NULL ); -} - -static const struct file_operations divadidd_proc_fops = { - .owner =THIS_MODULE , - .open = divadidd_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init create_proc (void ) { proc_net_eicon =proc_mkdir ("eicon" , init_net.proc_net);if (proc_net_eicon) { - proc_didd =proc_create (DRIVERLNAME ,S_IRUGO , proc_net_eicon, - &divadidd_proc_fops); + proc_didd =proc_create_single (DRIVERLNAME ,S_IRUGO , + proc_net_eicon, divadidd_proc_show);return (1 ); }return (0 );
drivers/isdn/hardware/eicon/divasi.c +2 -15
@@ -101,23 +101,10 @@ static int um_idi_proc_show(struct seq_file *m, void *v)return 0 ; } -static int um_idi_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, um_idi_proc_show,NULL ); -} - -static const struct file_operations um_idi_proc_fops = { - .owner =THIS_MODULE , - .open = um_idi_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init create_um_idi_proc (void ) { - um_idi_proc_entry =proc_create (DRIVERLNAME ,S_IRUGO , proc_net_eicon, - &um_idi_proc_fops); + um_idi_proc_entry =proc_create_single (DRIVERLNAME ,S_IRUGO , + proc_net_eicon, um_idi_proc_show);if (!um_idi_proc_entry)return (0 );return (1 );
drivers/macintosh/via-pmu.c +10 -47
90 lines not on this page · raw message
drivers/media/pci/saa7164/saa7164-core.c +1 -13
@@ -1122,23 +1122,11 @@ static int saa7164_proc_show(struct seq_file *m, void *v)return 0 ; } -static int saa7164_proc_open (struct inode *inode,struct file *filp) -{ -return single_open (filp, saa7164_proc_show,NULL ); -} - -static const struct file_operations saa7164_proc_fops = { - .open = saa7164_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int saa7164_proc_create (void ) {struct proc_dir_entry *pe; - pe =proc_create ("saa7164" ,S_IRUGO ,NULL , &saa7164_proc_fops); + pe =proc_create_single ("saa7164" ,S_IRUGO ,NULL , saa7164_proc_show);if (!pe)return -ENOMEM ;
drivers/media/pci/zoran/videocodec.c +2 -14
@@ -344,19 +344,6 @@ static int proc_videocodecs_show(struct seq_file *m, void *v) return 0; } - -static int proc_videocodecs_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_videocodecs_show,NULL ); -} - -static const struct file_operations videocodecs_proc_fops = { - .owner =THIS_MODULE , - .open = proc_videocodecs_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif /* ===================== */
@@ -373,7 +360,8 @@ videocodec_init (void) VIDEOCODEC_VERSION);#ifdef CONFIG_PROC_FS - videocodec_proc_entry =proc_create ("videocodecs" ,0 ,NULL , &videocodecs_proc_fops); + videocodec_proc_entry =proc_create_single ("videocodecs" ,0 ,NULL , + proc_videocodecs_show);if (!videocodec_proc_entry) {dprintk (1 ,KERN_ERR "videocodec: can't init procfs.\n" ); }
drivers/message/fusion/mptbase.c +11 -46
93 lines not on this page · raw message
drivers/mtd/mtdcore.c +1 -13
@@ -1829,18 +1829,6 @@ static int mtd_proc_show(struct seq_file *m, void *v)mutex_unlock (&mtd_table_mutex); return 0; } - -static int mtd_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, mtd_proc_show,NULL ); -} - -static const struct file_operations mtd_proc_ops = { - .open = mtd_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif /* CONFIG_PROC_FS */ /*====================================================================*/
@@ -1883,7 +1871,7 @@ static int __init init_mtd(void) goto err_bdi; } - proc_mtd =proc_create ("mtd" ,0 ,NULL , &mtd_proc_ops); + proc_mtd =proc_create_single ("mtd" ,0 ,NULL , mtd_proc_show); ret =init_mtdchar ();if (ret)
drivers/net/wireless/atmel/atmel.c +2 -13
@@ -1482,18 +1482,6 @@ static int atmel_proc_show(struct seq_file *m, void *v)return 0 ; } -static int atmel_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, atmel_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations atmel_proc_fops = { - .open = atmel_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static const struct net_device_ops atmel_netdev_ops = { .ndo_open = atmel_open, .ndo_stop = atmel_close,
@@ -1614,7 +1602,8 @@ struct net_device *init_atmel_card(unsigned short irq, unsigned long port,netif_carrier_off (dev); -if (!proc_create_data ("driver/atmel" ,0 ,NULL , &atmel_proc_fops, priv)) +if (!proc_create_single_data ("driver/atmel" ,0 ,NULL , atmel_proc_show, + priv))printk (KERN_WARNING "atmel: unable to create /proc entry.\n" ); printk(KERN_INFO "%s: Atmel at76c50x. Version %d.%d. MAC %pM\n",
drivers/net/wireless/intersil/hostap/hostap_ap.c +2 -14
@@ -1106,18 +1106,6 @@ static int prism2_sta_proc_show(struct seq_file *m, void *v)return 0 ; } -static int prism2_sta_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, prism2_sta_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations prism2_sta_proc_fops = { - .open = prism2_sta_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static void handle_add_proc_queue (struct work_struct *work) { struct ap_data *ap = container_of(work, struct ap_data,
@@ -1138,9 +1126,9 @@ static void handle_add_proc_queue(struct work_struct *work)if (sta) {sprintf (name,"%pM" , sta->addr); - sta->proc =proc_create_data ( + sta->proc =proc_create_single_data ( name,0 , ap->proc, - &prism2_sta_proc_fops, sta); + prism2_sta_proc_show, sta);atomic_dec (&sta->users); }
drivers/net/wireless/ray_cs.c +1 -14
@@ -2663,19 +2663,6 @@ static int ray_cs_proc_show(struct seq_file *m, void *v) }return 0 ; } - -static int ray_cs_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, ray_cs_proc_show,NULL ); -} - -static const struct file_operations ray_cs_proc_fops = { - .owner =THIS_MODULE , - .open = ray_cs_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif /*===========================================================================*/ static int build_auth_frame (ray_dev_t *local,UCHAR *dest,int auth_type)
@@ -2814,7 +2801,7 @@ static int __init init_ray_cs(void)#ifdef CONFIG_PROC_FS proc_mkdir ("driver/ray_cs" ,NULL ); -proc_create ("driver/ray_cs/ray_cs" ,0 ,NULL , &ray_cs_proc_fops); +proc_create_single ("driver/ray_cs/ray_cs" ,0 ,NULL , ray_cs_proc_show);proc_create ("driver/ray_cs/essid" ,0200 ,NULL , &ray_cs_essid_proc_fops);proc_create_data ("driver/ray_cs/net_type" ,0200 ,NULL , &int_proc_fops, &net_type);
drivers/nubus/proc.c +8 -47
84 lines not on this page · raw message
drivers/parisc/ccio-dma.c +4 -30
@@ -1108,19 +1108,6 @@ static int ccio_proc_info(struct seq_file *m, void *p)return 0 ; } -static int ccio_proc_info_open (struct inode *inode,struct file *file) -{ -return single_open (file, &ccio_proc_info,NULL ); -} - -static const struct file_operations ccio_proc_info_fops = { - .owner =THIS_MODULE , - .open = ccio_proc_info_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int ccio_proc_bitmap_info (struct seq_file *m,void *p) {struct ioc *ioc = ioc_list;
@@ -1135,19 +1122,6 @@ static int ccio_proc_bitmap_info(struct seq_file *m, void *p) return 0; } - -static int ccio_proc_bitmap_open (struct inode *inode,struct file *file) -{ -return single_open (file, &ccio_proc_bitmap_info,NULL ); -} - -static const struct file_operations ccio_proc_bitmap_fops = { - .owner =THIS_MODULE , - .open = ccio_proc_bitmap_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif /* CONFIG_PROC_FS */ /**
@@ -1589,10 +1563,10 @@ static int __init ccio_probe(struct parisc_device *dev)#ifdef CONFIG_PROC_FS if (ioc_count ==0 ) { -proc_create (MODULE_NAME ,0 , proc_runway_root, - &ccio_proc_info_fops); -proc_create (MODULE_NAME "-bitmap" ,0 , proc_runway_root, - &ccio_proc_bitmap_fops); +proc_create_single (MODULE_NAME ,0 , proc_runway_root, + ccio_proc_info); +proc_create_single (MODULE_NAME "-bitmap" ,0 , proc_runway_root, + ccio_proc_bitmap_info); }#endif ioc_count++;
drivers/parisc/sba_iommu.c +2 -30
@@ -1863,20 +1863,6 @@ static int sba_proc_info(struct seq_file *m, void *p)return 0 ; } -static int -sba_proc_open (struct inode *i,struct file *f) -{ -return single_open (f, &sba_proc_info,NULL ); -} - -static const struct file_operations sba_proc_fops = { - .owner =THIS_MODULE , - .open = sba_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int sba_proc_bitmap_info (struct seq_file *m,void *p) {
@@ -1889,20 +1875,6 @@ sba_proc_bitmap_info(struct seq_file *m, void *p)return 0 ; } - -static int -sba_proc_bitmap_open (struct inode *i,struct file *f) -{ -return single_open (f, &sba_proc_bitmap_info,NULL ); -} - -static const struct file_operations sba_proc_bitmap_fops = { - .owner =THIS_MODULE , - .open = sba_proc_bitmap_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif /* CONFIG_PROC_FS */ static const struct parisc_device_id sba_tbl[]__initconst = {
@@ -2014,8 +1986,8 @@ static int __init sba_driver_callback(struct parisc_device *dev) break; } -proc_create ("sba_iommu" ,0 , root, &sba_proc_fops); -proc_create ("sba_iommu-bitmap" ,0 , root, &sba_proc_bitmap_fops); +proc_create_single ("sba_iommu" ,0 , root, sba_proc_info); +proc_create_single ("sba_iommu-bitmap" ,0 , root, sba_proc_bitmap_info);#endif parisc_has_iommu ();
drivers/platform/x86/toshiba_acpi.c +2 -15
@@ -1689,19 +1689,6 @@ static int version_proc_show(struct seq_file *m, void *v)return 0 ; } -static int version_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, version_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations version_proc_fops = { - .owner =THIS_MODULE , - .open = version_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/* * Proc and module init */
@@ -1722,8 +1709,8 @@ static void create_toshiba_proc_entries(struct toshiba_acpi_dev *dev)if (dev->hotkey_dev)proc_create_data ("keys" ,S_IRUGO |S_IWUSR , toshiba_proc_dir, &keys_proc_fops, dev); -proc_create_data ("version" ,S_IRUGO , toshiba_proc_dir, - &version_proc_fops, dev); +proc_create_single_data ("version" ,S_IRUGO , toshiba_proc_dir, + version_proc_show, dev); }static void remove_toshiba_proc_entries (struct toshiba_acpi_dev *dev)
drivers/pnp/pnpbios/proc.c +7 -71
114 lines not on this page · raw message
drivers/staging/comedi/proc.c +1 -17
@@ -62,25 +62,9 @@ static int comedi_read(struct seq_file *m, void *v)return 0 ; } -/* -* seq_file wrappers for procfile show routines. -*/ -static int comedi_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, comedi_read,NULL ); -} - -static const struct file_operations comedi_proc_fops = { - .owner =THIS_MODULE , - .open = comedi_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -void __init comedi_proc_init (void ) { -if (!proc_create ("comedi" ,0444 ,NULL , &comedi_proc_fops)) +if (!proc_create_single ("comedi" ,0444 ,NULL , comedi_read))pr_warn ("comedi: unable to create proc entry\n" ); }
drivers/usb/gadget/udc/at91_udc.c +2 -14
@@ -234,22 +234,10 @@ static int proc_udc_show(struct seq_file *s, void *unused)return 0 ; } -static int proc_udc_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_udc_show,PDE_DATA (inode)); -} - -static const struct file_operations proc_ops = { - .owner =THIS_MODULE , - .open = proc_udc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static void create_debug_file (struct at91_udc *udc) { - udc->pde =proc_create_data (debug_filename,0 ,NULL , &proc_ops, udc); + udc->pde =proc_create_single_data (debug_filename,0 ,NULL , + proc_udc_show, udc); }static void remove_debug_file (struct at91_udc *udc)
drivers/usb/gadget/udc/fsl_udc_core.c +2 -16
@@ -2207,22 +2207,8 @@ static int fsl_proc_read(struct seq_file *m, void *v) return 0; } -/* -* seq_file wrappers for procfile show routines. -*/ -static int fsl_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, fsl_proc_read,NULL ); -} - -static const struct file_operations fsl_proc_fops = { - .open = fsl_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -#define create_proc_file () proc_create(proc_filename, 0, NULL, &fsl_proc_fops) +#define create_proc_file () \ + proc_create_single(proc_filename, 0, NULL, fsl_proc_read)#define remove_proc_file () remove_proc_entry(proc_filename, NULL)#else /* !CONFIG_USB_GADGET_DEBUG_FILES */
drivers/usb/gadget/udc/goku_udc.c +1 -17
@@ -1241,22 +1241,6 @@ static int udc_proc_read(struct seq_file *m, void *v)local_irq_restore (flags); return 0; } - -/* -* seq_file wrappers for procfile show routines. -*/ -static int udc_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, udc_proc_read,PDE_DATA (file_inode (file))); -} - -static const struct file_operations udc_proc_fops = { - .open = udc_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -#endif /* CONFIG_USB_GADGET_DEBUG_FILES */ /*-------------------------------------------------------------------------*/
@@ -1826,7 +1810,7 @@ static int goku_probe(struct pci_dev *pdev, const struct pci_device_id *id)#ifdef CONFIG_USB_GADGET_DEBUG_FILES -proc_create_data (proc_node_name,0 ,NULL , &udc_proc_fops, dev); +proc_create_single_data (proc_node_name,0 ,NULL , udc_proc_read, dev);#endif retval = usb_add_gadget_udc_release(&pdev->dev, &dev->gadget,
drivers/usb/gadget/udc/omap_udc.c +1 -14
@@ -2432,22 +2432,9 @@ static int proc_udc_show(struct seq_file *s, void *_)return 0 ; } -static int proc_udc_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_udc_show,NULL ); -} - -static const struct file_operations proc_ops = { - .owner =THIS_MODULE , - .open = proc_udc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static void create_proc_file (void ) { -proc_create (proc_filename,0 ,NULL , &proc_ops); +proc_create_single (proc_filename,0 ,NULL , proc_udc_show); }static void remove_proc_file (void )
drivers/video/fbdev/via/viafbdev.c +2 -15
@@ -1475,19 +1475,6 @@ static int viafb_sup_odev_proc_show(struct seq_file *m, void *v)return 0 ; } -static int viafb_sup_odev_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, viafb_sup_odev_proc_show,NULL ); -} - -static const struct file_operations viafb_sup_odev_proc_fops = { - .owner =THIS_MODULE , - .open = viafb_sup_odev_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static ssize_t odev_update (const char __user *buffer,size_t count,u32 *odev) {char buf[64 ], *ptr = buf;
@@ -1616,8 +1603,8 @@ static void viafb_init_proc(struct viafb_shared *shared) &viafb_vt1636_proc_fops);#endif /* CONFIG_FB_VIA_DIRECT_PROCFS */ -proc_create ("supported_output_devices" ,0 , viafb_entry, - &viafb_sup_odev_proc_fops); +proc_create_single ("supported_output_devices" ,0 , viafb_entry, + viafb_sup_odev_proc_show); iga1_entry =proc_mkdir ("iga1" , viafb_entry); shared->iga1_proc_entry = iga1_entry; proc_create("output_devices", 0, iga1_entry,
fs/cifs/cifs_debug.c +2 -13
@@ -314,18 +314,6 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v)return 0 ; } -static int cifs_debug_data_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, cifs_debug_data_proc_show,NULL ); -} - -static const struct file_operations cifs_debug_data_proc_fops = { - .open = cifs_debug_data_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -#ifdef CONFIG_CIFS_STATS static ssize_t cifs_stats_proc_write (struct file *file,const char __user *buffer,size_t count,loff_t *ppos)
@@ -497,7 +485,8 @@ cifs_proc_init(void)if (proc_fs_cifs ==NULL )return ; -proc_create ("DebugData" ,0 , proc_fs_cifs, &cifs_debug_data_proc_fops); +proc_create_single ("DebugData" ,0 , proc_fs_cifs, + cifs_debug_data_proc_show);#ifdef CONFIG_CIFS_STATS proc_create ("Stats" ,0 , proc_fs_cifs, &cifs_stats_proc_fops);
fs/f2fs/sysfs.c +6 -23
@@ -572,23 +572,6 @@ static int iostat_info_seq_show(struct seq_file *seq, void *offset)return 0 ; } -#define F2FS_PROC_FILE_DEF (_name) \ -static int _name##_open_fs(struct inode *inode, struct file *file) \ -{ \ - return single_open(file, _name##_seq_show, PDE_DATA(inode)); \ -} \ - \ -static const struct file_operations f2fs_seq_##_name##_fops = { \ - .open = _name##_open_fs, \ - .read = seq_read, \ - .llseek = seq_lseek, \ - .release = single_release, \ -}; - -F2FS_PROC_FILE_DEF (segment_info); -F2FS_PROC_FILE_DEF (segment_bits); -F2FS_PROC_FILE_DEF (iostat_info); -int __init f2fs_init_sysfs (void ) {int ret;
@@ -632,12 +615,12 @@ int f2fs_register_sysfs(struct f2fs_sb_info *sbi) sbi->s_proc =proc_mkdir (sb->s_id, f2fs_proc_root);if (sbi->s_proc) { -proc_create_data ("segment_info" ,S_IRUGO , sbi->s_proc, - &f2fs_seq_segment_info_fops, sb); -proc_create_data ("segment_bits" ,S_IRUGO , sbi->s_proc, - &f2fs_seq_segment_bits_fops, sb); -proc_create_data ("iostat_info" ,S_IRUGO , sbi->s_proc, - &f2fs_seq_iostat_info_fops, sb); +proc_create_single_data ("segment_info" ,S_IRUGO , sbi->s_proc, + segment_info_seq_show, sb); +proc_create_single_data ("segment_bits" ,S_IRUGO , sbi->s_proc, + segment_bits_seq_show, sb); +proc_create_single_data ("iostat_info" ,S_IRUGO , sbi->s_proc, + iostat_info_seq_show, sb); }return 0 ; }
fs/filesystems.c +1 -13
@@ -238,21 +238,9 @@ static int filesystems_proc_show(struct seq_file *m, void *v)return 0 ; } -static int filesystems_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, filesystems_proc_show,NULL ); -} - -static const struct file_operations filesystems_proc_fops = { - .open = filesystems_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init proc_filesystems_init (void ) { -proc_create ("filesystems" ,0 ,NULL , &filesystems_proc_fops); +proc_create_single ("filesystems" ,0 ,NULL , filesystems_proc_show);return 0 ; }module_init (proc_filesystems_init);
fs/fscache/internal.h +1 -1
@@ -295,7 +295,7 @@ static inline void fscache_stat_d(atomic_t *stat)#define __fscache_stat (stat) (stat) -extern const struct file_operations fscache_stats_fops; +int fscache_stats_show (struct seq_file *m,void *v);#else #define __fscache_stat (stat) (NULL)
fs/fscache/proc.c +2 -2
@@ -26,8 +26,8 @@ int __init fscache_proc_init(void) goto error_dir;#ifdef CONFIG_FSCACHE_STATS -if (!proc_create ("fs/fscache/stats" ,S_IFREG |0444 ,NULL , - &fscache_stats_fops)) +if (!proc_create_single ("fs/fscache/stats" ,S_IFREG |0444 ,NULL , + fscache_stats_show)) goto error_stats;#endif
fs/fscache/stats.c +1 -16
@@ -138,7 +138,7 @@ atomic_t fscache_n_cache_culled_objects;/* * display the general statistics */ -static int fscache_stats_show (struct seq_file *m,void *v) +int fscache_stats_show (struct seq_file *m,void *v) {seq_puts (m,"FS-Cache statistics\n" );
@@ -284,18 +284,3 @@ static int fscache_stats_show(struct seq_file *m, void *v) atomic_read(&fscache_n_cache_culled_objects));return 0 ; } - -/* -* open "/proc/fs/fscache/stats" allowing provision of a statistical summary -*/ -static int fscache_stats_open (struct inode *inode,struct file *file) -{ -return single_open (file, fscache_stats_show,NULL ); -} - -const struct file_operations fscache_stats_fops = { - .open = fscache_stats_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};
fs/proc/cmdline.c +1 -13
@@ -11,21 +11,9 @@ static int cmdline_proc_show(struct seq_file *m, void *v)return 0 ; } -static int cmdline_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, cmdline_proc_show,NULL ); -} - -static const struct file_operations cmdline_proc_fops = { - .open = cmdline_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init proc_cmdline_init (void ) { -proc_create ("cmdline" ,0 ,NULL , &cmdline_proc_fops); +proc_create_single ("cmdline" ,0 ,NULL , cmdline_proc_show);return 0 ; }fs_initcall (proc_cmdline_init);
fs/proc/generic.c +27 -0
@@ -581,6 +581,33 @@ struct proc_dir_entry *proc_create_seq_private(const char *name, umode_t mode,return p; }EXPORT_SYMBOL (proc_create_seq_private); + +static int proc_single_open (struct inode *inode,struct file *file) +{ +struct proc_dir_entry *de =PDE (inode); + +return single_open (file, de->single_show, de->data); +} + +static const struct file_operations proc_single_fops = { + .open = proc_single_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +struct proc_dir_entry *proc_create_single_data (const char *name,umode_t mode, +struct proc_dir_entry *parent, +int (*show)(struct seq_file *,void *),void *data) +{ +struct proc_dir_entry *p; + + p =proc_create_data (name, mode, parent, &proc_single_fops, data); +if (p) + p->single_show = show; +return p; +} +EXPORT_SYMBOL (proc_create_single_data); struct proc_dir_entry *proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent,
fs/proc/internal.h +4 -1
@@ -44,7 +44,10 @@ struct proc_dir_entry {struct completion *pde_unload_completion;const struct inode_operations *proc_iops;const struct file_operations *proc_fops; -const struct seq_operations *seq_ops; +union { +const struct seq_operations *seq_ops; +int (*single_show)(struct seq_file *,void *); + };size_t state_size;void *data;unsigned int low_ino;
fs/proc/loadavg.c +1 -13
@@ -28,21 +28,9 @@ static int loadavg_proc_show(struct seq_file *m, void *v)return 0 ; } -static int loadavg_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, loadavg_proc_show,NULL ); -} - -static const struct file_operations loadavg_proc_fops = { - .open = loadavg_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init proc_loadavg_init (void ) { -proc_create ("loadavg" ,0 ,NULL , &loadavg_proc_fops); +proc_create_single ("loadavg" ,0 ,NULL , loadavg_proc_show);return 0 ; }fs_initcall (proc_loadavg_init);
fs/proc/meminfo.c +1 -13
@@ -149,21 +149,9 @@ static int meminfo_proc_show(struct seq_file *m, void *v)return 0 ; } -static int meminfo_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, meminfo_proc_show,NULL ); -} - -static const struct file_operations meminfo_proc_fops = { - .open = meminfo_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init proc_meminfo_init (void ) { -proc_create ("meminfo" ,0 ,NULL , &meminfo_proc_fops); +proc_create_single ("meminfo" ,0 ,NULL , meminfo_proc_show);return 0 ; }fs_initcall (proc_meminfo_init);
fs/proc/softirqs.c +1 -13
@@ -25,21 +25,9 @@ static int show_softirqs(struct seq_file *p, void *v)return 0 ; } -static int softirqs_open (struct inode *inode,struct file *file) -{ -return single_open (file, show_softirqs,NULL ); -} - -static const struct file_operations proc_softirqs_operations = { - .open = softirqs_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init proc_softirqs_init (void ) { -proc_create ("softirqs" ,0 ,NULL , &proc_softirqs_operations); +proc_create_single ("softirqs" ,0 ,NULL , show_softirqs);return 0 ; }fs_initcall (proc_softirqs_init);
fs/proc/uptime.c +1 -13
@@ -30,21 +30,9 @@ static int uptime_proc_show(struct seq_file *m, void *v)return 0 ; } -static int uptime_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, uptime_proc_show,NULL ); -} - -static const struct file_operations uptime_proc_fops = { - .open = uptime_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init proc_uptime_init (void ) { -proc_create ("uptime" ,0 ,NULL , &uptime_proc_fops); +proc_create_single ("uptime" ,0 ,NULL , uptime_proc_show);return 0 ; }fs_initcall (proc_uptime_init);
fs/proc/version.c +1 -13
@@ -15,21 +15,9 @@ static int version_proc_show(struct seq_file *m, void *v)return 0 ; } -static int version_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, version_proc_show,NULL ); -} - -static const struct file_operations version_proc_fops = { - .open = version_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init proc_version_init (void ) { -proc_create ("version" ,0 ,NULL , &version_proc_fops); +proc_create_single ("version" ,0 ,NULL , version_proc_show);return 0 ; }fs_initcall (proc_version_init);
fs/reiserfs/procfs.c +1 -15
@@ -389,27 +389,13 @@ static int show_journal(struct seq_file *m, void *unused)return 0 ; } -static int r_open (struct inode *inode,struct file *file) -{ -return single_open (file,PDE_DATA (inode), -proc_get_parent_data (inode)); -} - -static const struct file_operations r_file_operations = { - .open = r_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static struct proc_dir_entry *proc_info_root =NULL ;static const char proc_info_root_name[] ="fs/reiserfs" ;static void add_file (struct super_block *sb,char *name,int (*func) (struct seq_file *,void *)) { -proc_create_data (name,0 ,REISERFS_SB (sb)->procdir, - &r_file_operations, func); +proc_create_single_data (name,0 ,REISERFS_SB (sb)->procdir, func, sb); }int reiserfs_proc_info_init (struct super_block *sb)
fs/xfs/xfs_stats.c +2 -29
@@ -124,18 +124,6 @@ static int xqm_proc_show(struct seq_file *m, void *v)return 0 ; } -static int xqm_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, xqm_proc_show,NULL ); -} - -static const struct file_operations xqm_proc_fops = { - .open = xqm_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/* legacy quota stats interface no 2 */ static int xqmstat_proc_show (struct seq_file *m,void *v) {
@@ -147,19 +135,6 @@ static int xqmstat_proc_show(struct seq_file *m, void *v)seq_putc (m,'\n' ); return 0; } - -static int xqmstat_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, xqmstat_proc_show,NULL ); -} - -static const struct file_operations xqmstat_proc_fops = { - .owner =THIS_MODULE , - .open = xqmstat_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif /* CONFIG_XFS_QUOTA */ #ifdef CONFIG_PROC_FS
@@ -174,11 +149,9 @@ xfs_init_procfs(void) goto out;#ifdef CONFIG_XFS_QUOTA -if (!proc_create ("fs/xfs/xqmstat" ,0 ,NULL , - &xqmstat_proc_fops)) +if (!proc_create_single ("fs/xfs/xqmstat" ,0 ,NULL , xqmstat_proc_show)) goto out; -if (!proc_create ("fs/xfs/xqm" ,0 ,NULL , - &xqm_proc_fops)) +if (!proc_create_single ("fs/xfs/xqm" ,0 ,NULL , xqm_proc_show)) goto out;#endif return 0 ;
include/linux/proc_fs.h +9 -1
@@ -9,6 +9,7 @@#include <linux/fs.h> struct proc_dir_entry ; +struct seq_file ;struct seq_operations ;#ifdef CONFIG_PROC_FS
@@ -32,6 +33,11 @@ struct proc_dir_entry *proc_create_seq_private(const char *name, umode_t mode, proc_create_seq_private(name, mode, parent, ops, 0, data)#define proc_create_seq (name, mode, parent, ops) \ proc_create_seq_private(name, mode, parent, ops, 0, NULL) +struct proc_dir_entry *proc_create_single_data (const char *name,umode_t mode, +struct proc_dir_entry *parent, +int (*show)(struct seq_file *,void *),void *data); +#define proc_create_single (name, mode, parent, show) \ + proc_create_single_data(name, mode, parent, show, NULL) extern struct proc_dir_entry *proc_create_data(const char *, umode_t, struct proc_dir_entry *,
@@ -66,9 +72,11 @@ static inline struct proc_dir_entry *proc_mkdir_data(const char *name, umode_t mode, struct proc_dir_entry *parent, void *data) { return NULL; }static inline struct proc_dir_entry *proc_mkdir_mode (const char *name,umode_t mode,struct proc_dir_entry *parent) {return NULL ; } -#define proc_create_seq_private(name, mode, parent, ops, 0, data) ({NULL;}) +#define proc_create_seq_private (name, mode, parent, ops, size, data) ({NULL;})#define proc_create_seq_data (name, mode, parent, ops, data) ({NULL;})#define proc_create_seq (name, mode, parent, ops) ({NULL;}) +#define proc_create_single (name, mode, parent, show) ({NULL;}) +#define proc_create_single_data (name, mode, parent, show, data) ({NULL;})#define proc_create (name, mode, parent, proc_fops) ({NULL;})#define proc_create_data (name, mode, parent, proc_fops, data) ({NULL;})
kernel/cgroup/cgroup-internal.h +1 -1
@@ -218,9 +218,9 @@ extern const struct proc_ns_operations cgroupns_operations;* cgroup-v1.c */ extern struct cftype cgroup1_base_files[]; -extern const struct file_operations proc_cgroupstats_operations;extern struct kernfs_syscall_ops cgroup1_kf_syscall_ops; +int proc_cgroupstats_show (struct seq_file *m,void *v);bool cgroup1_ssid_disabled (int ssid);void cgroup1_pidlist_destroy_all (struct cgroup *cgrp);void cgroup1_release_agent (struct work_struct *work);
kernel/cgroup/cgroup-v1.c +1 -13
@@ -682,7 +682,7 @@ struct cftype cgroup1_base_files[] = { };/* Display information about each subsystem and each hierarchy */ -static int proc_cgroupstats_show (struct seq_file *m,void *v) +int proc_cgroupstats_show (struct seq_file *m,void *v) {struct cgroup_subsys *ss;int i;
@@ -705,18 +705,6 @@ static int proc_cgroupstats_show(struct seq_file *m, void *v)return 0 ; } -static int cgroupstats_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_cgroupstats_show,NULL ); -} - -const struct file_operations proc_cgroupstats_operations = { - .open = cgroupstats_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/** * cgroupstats_build - build and fill cgroupstats * @stats: cgroupstats to fill information into
kernel/cgroup/cgroup.c +1 -1
@@ -5335,7 +5335,7 @@ int __init cgroup_init(void)WARN_ON (sysfs_create_mount_point (fs_kobj,"cgroup" ));WARN_ON (register_filesystem (&cgroup_fs_type));WARN_ON (register_filesystem (&cgroup2_fs_type)); -WARN_ON (!proc_create ("cgroups" ,0 ,NULL , &proc_cgroupstats_operations)); +WARN_ON (!proc_create_single ("cgroups" ,0 ,NULL , proc_cgroupstats_show));return 0 ; }
kernel/dma.c +1 -13
@@ -135,21 +135,9 @@ static int proc_dma_show(struct seq_file *m, void *v) }#endif /* MAX_DMA_CHANNELS */ -static int proc_dma_open (struct inode *inode,struct file *file) -{ -return single_open (file, proc_dma_show,NULL ); -} - -static const struct file_operations proc_dma_operations = { - .open = proc_dma_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init proc_dma_init (void ) { -proc_create ("dma" ,0 ,NULL , &proc_dma_operations); +proc_create_single ("dma" ,0 ,NULL , proc_dma_show);return 0 ; }
kernel/exec_domain.c +1 -13
@@ -27,21 +27,9 @@ static int execdomains_proc_show(struct seq_file *m, void *v)return 0 ; } -static int execdomains_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, execdomains_proc_show,NULL ); -} - -static const struct file_operations execdomains_proc_fops = { - .open = execdomains_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __init proc_execdomains_init (void ) { -proc_create ("execdomains" ,0 ,NULL , &execdomains_proc_fops); +proc_create_single ("execdomains" ,0 ,NULL , execdomains_proc_show);return 0 ; }module_init (proc_execdomains_init);
kernel/irq/proc.c +10 -72
126 lines not on this page · raw message
kernel/locking/lockdep_proc.c +1 -15
@@ -331,18 +331,6 @@ static int lockdep_stats_show(struct seq_file *m, void *v)return 0 ; } -static int lockdep_stats_open (struct inode *inode,struct file *file) -{ -return single_open (file, lockdep_stats_show,NULL ); -} - -static const struct file_operations proc_lockdep_stats_operations = { - .open = lockdep_stats_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -#ifdef CONFIG_LOCK_STAT struct lock_stat_data {
@@ -662,9 +650,7 @@ static int __init lockdep_proc_init(void)#ifdef CONFIG_PROVE_LOCKING proc_create_seq ("lockdep_chains" ,S_IRUSR ,NULL , &lockdep_chains_ops);#endif -proc_create ("lockdep_stats" ,S_IRUSR ,NULL , - &proc_lockdep_stats_operations); - +proc_create_single ("lockdep_stats" ,S_IRUSR ,NULL , lockdep_stats_show);#ifdef CONFIG_LOCK_STAT proc_create ("lock_stat" ,S_IRUSR |S_IWUSR ,NULL , &proc_lock_stat_operations);
net/8021q/vlanproc.c +2 -19
@@ -86,22 +86,6 @@ static const struct file_operations vlan_fops = { .release = seq_release_net, }; -/* -* /proc/net/vlan/<device> file and inode operations -*/ - -static int vlandev_seq_open (struct inode *inode,struct file *file) -{ -return single_open (file, vlandev_seq_show,PDE_DATA (inode)); -} - -static const struct file_operations vlandev_fops = { - .open = vlandev_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/* * Proc filesystem directory entries. */
@@ -171,9 +155,8 @@ int vlan_proc_add_dev(struct net_device *vlandev)if (!strcmp (vlandev->name, name_conf))return -EINVAL ; - vlan->dent = -proc_create_data (vlandev->name,S_IFREG |0600 , - vn->proc_vlan_dir, &vlandev_fops, vlandev); + vlan->dent =proc_create_single_data (vlandev->name,S_IFREG |0600 , + vn->proc_vlan_dir, vlandev_seq_show, vlandev);if (!vlan->dent)return -ENOBUFS ;return 0 ;
net/ipv4/ipconfig.c +1 -13
@@ -1282,18 +1282,6 @@ static int pnp_seq_show(struct seq_file *seq, void *v) &ic_servaddr); return 0; } - -static int pnp_seq_open (struct inode *indoe,struct file *file) -{ -return single_open (file, pnp_seq_show,NULL ); -} - -static const struct file_operations pnp_seq_fops = { - .open = pnp_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif /* CONFIG_PROC_FS */ /*
@@ -1369,7 +1357,7 @@ static int __init ip_auto_config(void)unsigned int i;#ifdef CONFIG_PROC_FS -proc_create ("pnp" ,0444 , init_net.proc_net, &pnp_seq_fops); +proc_create_single ("pnp" ,0444 , init_net.proc_net, pnp_seq_show);#endif /* CONFIG_PROC_FS */ if (!ic_enable)
net/ipv4/route.c +2 -13
@@ -360,18 +360,6 @@ static int rt_acct_proc_show(struct seq_file *m, void *v)kfree (dst); return 0; } - -static int rt_acct_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, rt_acct_proc_show,NULL ); -} - -static const struct file_operations rt_acct_proc_fops = { - .open = rt_acct_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif static int __net_init ip_rt_do_proc_init (struct net *net)
@@ -389,7 +377,8 @@ static int __net_init ip_rt_do_proc_init(struct net *net) goto err2;#ifdef CONFIG_IP_ROUTE_CLASSID - pde =proc_create ("rt_acct" ,0 , net->proc_net, &rt_acct_proc_fops); + pde =proc_create_single ("rt_acct" ,0 , net->proc_net, + rt_acct_proc_show);if (!pde) goto err3;#endif
net/ipv6/proc.c +2 -15
@@ -267,18 +267,6 @@ static int snmp6_dev_seq_show(struct seq_file *seq, void *v)return 0 ; } -static int snmp6_dev_seq_open (struct inode *inode,struct file *file) -{ -return single_open (file, snmp6_dev_seq_show,PDE_DATA (inode)); -} - -static const struct file_operations snmp6_dev_seq_fops = { - .open = snmp6_dev_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -int snmp6_register_dev (struct inet6_dev *idev) {struct proc_dir_entry *p;
@@ -291,9 +279,8 @@ int snmp6_register_dev(struct inet6_dev *idev)if (!net->mib.proc_net_devsnmp6)return -ENOENT ; - p =proc_create_data (idev->dev->name,0444 , - net->mib.proc_net_devsnmp6, - &snmp6_dev_seq_fops, idev); + p =proc_create_single_data (idev->dev->name,0444 , + net->mib.proc_net_devsnmp6, snmp6_dev_seq_show, idev);if (!p)return -ENOMEM ;
net/sched/sch_api.c +1 -13
@@ -2092,23 +2092,11 @@ static int psched_show(struct seq_file *seq, void *v)return 0 ; } -static int psched_open (struct inode *inode,struct file *file) -{ -return single_open (file, psched_show,NULL ); -} - -static const struct file_operations psched_fops = { - .open = psched_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int __net_init psched_net_init (struct net *net) {struct proc_dir_entry *e; - e =proc_create ("psched" ,0 , net->proc_net, &psched_fops); + e =proc_create_single ("psched" ,0 , net->proc_net, psched_show);if (e ==NULL )return -ENOMEM ;
Signature · 1 line
2.17.0
PATCH 5/39 ipv{4,6}/udp{,lite}: simplify proc registration
In reply to Christoph HellwigRemove a couple indirections to make the code look like most other protocols.
--- include/net/udp.h | 20 ++++------ net/ipv4/udp.c | 99 +++++++++++++++++----------------------------- net/ipv4/udplite.c | 21 +++------- net/ipv6/udp.c | 30 +++++++++----- net/ipv6/udplite.c | 21 +++------- 5 files changed, 78 insertions(+), 113 deletions(-)
include/net/udp.h +8 -12
@@ -408,31 +408,27 @@ do { \#define __UDPX_INC_STATS (sk, field) __UDP_INC_STATS(sock_net(sk), field, 0)#endif -/* /proc */ -int udp_seq_open (struct inode *inode,struct file *file); - +#ifdef CONFIG_PROC_FS struct udp_seq_afinfo { -char *name;sa_family_t family;struct udp_table *udp_table; -const struct file_operations *seq_fops; -struct seq_operations seq_ops; };struct udp_iter_state {struct seq_net_private p; -sa_family_t family;int bucket; -struct udp_table *udp_table; }; -#ifdef CONFIG_PROC_FS -int udp_proc_register (struct net *net,struct udp_seq_afinfo *afinfo); -void udp_proc_unregister (struct net *net,struct udp_seq_afinfo *afinfo); +void *udp_seq_start (struct seq_file *seq,loff_t *pos); +void *udp_seq_next (struct seq_file *seq,void *v,loff_t *pos); +void udp_seq_stop (struct seq_file *seq,void *v); + +extern const struct file_operations udp_afinfo_seq_fops; +extern const struct file_operations udp6_afinfo_seq_fops;int udp4_proc_init (void );void udp4_proc_exit (void ); -#endif +#endif /* CONFIG_PROC_FS */ int udpv4_offload_init (void );
net/ipv4/udp.c +37 -62
175 lines not on this page · raw message
net/ipv4/udplite.c +6 -15
@@ -14,6 +14,7 @@#define pr_fmt (fmt) "UDPLite: " fmt#include <linux/export.h> +#include <linux/proc_fs.h> #include "udp_impl.h" struct udp_table udplite_table__read_mostly ;
@@ -73,32 +74,22 @@ static struct inet_protosw udplite4_protosw = { };#ifdef CONFIG_PROC_FS - -static const struct file_operations udplite_afinfo_seq_fops = { - .open = udp_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net -}; -static struct udp_seq_afinfo udplite4_seq_afinfo = { - .name ="udplite" , .family =AF_INET , .udp_table = &udplite_table, - .seq_fops = &udplite_afinfo_seq_fops, - .seq_ops = { - .show = udp4_seq_show, - }, };static int __net_init udplite4_proc_init_net (struct net *net) { -return udp_proc_register (net, &udplite4_seq_afinfo); +if (!proc_create_data ("udplite" ,0444 , net->proc_net, + &udp_afinfo_seq_fops, &udplite4_seq_afinfo)) +return -ENOMEM ; +return 0 ; } static void __net_exit udplite4_proc_exit_net(struct net *net) { -udp_proc_unregister (net, &udplite4_seq_afinfo); +remove_proc_entry ("udplite" , net->proc_net); } static struct pernet_operations udplite4_net_ops = {
net/ipv6/udp.c +21 -9
@@ -1480,31 +1480,43 @@ int udp6_seq_show(struct seq_file *seq, void *v)return 0 ; } -static const struct file_operations udp6_afinfo_seq_fops = { - .open = udp_seq_open, +static const struct seq_operations udp6_seq_ops = { + .start = udp_seq_start, + .next = udp_seq_next, + .stop = udp_seq_stop, + .show = udp6_seq_show, +}; + +static int udp6_seq_open (struct inode *inode,struct file *file) +{ +return seq_open_net (inode, file, &udp6_seq_ops, +sizeof (struct udp_iter_state )); +} + +const struct file_operations udp6_afinfo_seq_fops = { + .open = udp6_seq_open, .read = seq_read, .llseek = seq_lseek, .release = seq_release_net }; +EXPORT_SYMBOL (udp6_afinfo_seq_fops);static struct udp_seq_afinfo udp6_seq_afinfo = { - .name ="udp6" , .family =AF_INET6 , .udp_table = &udp_table, - .seq_fops = &udp6_afinfo_seq_fops, - .seq_ops = { - .show = udp6_seq_show, - }, };int __net_init udp6_proc_init (struct net *net) { -return udp_proc_register (net, &udp6_seq_afinfo); +if (!proc_create_data ("udp6" ,0444 , net->proc_net, + &udp6_afinfo_seq_fops, &udp6_seq_afinfo)) +return -ENOMEM ; +return 0 ; }void udp6_proc_exit (struct net *net) { -udp_proc_unregister (net, &udp6_seq_afinfo); +remove_proc_entry ("udp6" , net->proc_net); }#endif /* CONFIG_PROC_FS */
net/ipv6/udplite.c +6 -15
@@ -12,6 +12,7 @@* 2 of the License, or (at your option) any later version. */ #include <linux/export.h> +#include <linux/proc_fs.h> #include "udp_impl.h" static int udplitev6_rcv (struct sk_buff *skb)
@@ -92,32 +93,22 @@ void udplitev6_exit(void) }#ifdef CONFIG_PROC_FS - -static const struct file_operations udplite6_afinfo_seq_fops = { - .open = udp_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net -}; -static struct udp_seq_afinfo udplite6_seq_afinfo = { - .name ="udplite6" , .family =AF_INET6 , .udp_table = &udplite_table, - .seq_fops = &udplite6_afinfo_seq_fops, - .seq_ops = { - .show = udp6_seq_show, - }, };static int __net_init udplite6_proc_init_net (struct net *net) { -return udp_proc_register (net, &udplite6_seq_afinfo); +if (!proc_create_data ("udplite6" ,0444 , net->proc_net, + &udp6_afinfo_seq_fops, &udplite6_seq_afinfo)) +return -ENOMEM ; +return 0 ; } static void __net_exit udplite6_proc_exit_net(struct net *net) { -udp_proc_unregister (net, &udplite6_seq_afinfo); +remove_proc_entry ("udplite6" , net->proc_net); } static struct pernet_operations udplite6_net_ops = {
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 6/39 ipv{4,6}/tcp: simplify procfs registration
In reply to Christoph HellwigAvoid most of the afinfo indirections and just call the proc helpers directly.
--- include/net/tcp.h | 11 ++---- net/ipv4/tcp_ipv4.c | 85 +++++++++++++++++---------------------------- net/ipv6/tcp_ipv6.c | 27 +++++++++----- 3 files changed, 53 insertions(+), 70 deletions(-)
include/net/tcp.h +3 -8
@@ -1747,27 +1747,22 @@ enum tcp_seq_states { TCP_SEQ_STATE_ESTABLISHED, }; -int tcp_seq_open (struct inode *inode,struct file *file); +void *tcp_seq_start (struct seq_file *seq,loff_t *pos); +void *tcp_seq_next (struct seq_file *seq,void *v,loff_t *pos); +void tcp_seq_stop (struct seq_file *seq,void *v);struct tcp_seq_afinfo { -char *name;sa_family_t family; -const struct file_operations *seq_fops; -struct seq_operations seq_ops; };struct tcp_iter_state {struct seq_net_private p; -sa_family_t family;enum tcp_seq_states state;struct sock *syn_wait_sk;int bucket, offset, sbucket, num;loff_t last_pos; }; -int tcp_proc_register (struct net *net,struct tcp_seq_afinfo *afinfo); -void tcp_proc_unregister (struct net *net,struct tcp_seq_afinfo *afinfo); -extern struct request_sock_ops tcp_request_sock_ops;extern struct request_sock_ops tcp6_request_sock_ops;
net/ipv4/tcp_ipv4.c +31 -54
168 lines not on this page · raw message
net/ipv6/tcp_ipv6.c +19 -8
@@ -1909,30 +1909,41 @@ static int tcp6_seq_show(struct seq_file *seq, void *v)return 0 ; } +static const struct seq_operations tcp6_seq_ops = { + .show = tcp6_seq_show, + .start = tcp_seq_start, + .next = tcp_seq_next, + .stop = tcp_seq_stop, +}; + +static int tcp6_seq_open (struct inode *inode,struct file *file) +{ +return seq_open_net (inode, file, &tcp6_seq_ops, +sizeof (struct tcp_iter_state )); +} +static const struct file_operations tcp6_afinfo_seq_fops = { - .open = tcp_seq_open, + .open = tcp6_seq_open, .read = seq_read, .llseek = seq_lseek, .release = seq_release_net };static struct tcp_seq_afinfo tcp6_seq_afinfo = { - .name ="tcp6" , .family =AF_INET6 , - .seq_fops = &tcp6_afinfo_seq_fops, - .seq_ops = { - .show = tcp6_seq_show, - }, };int __net_init tcp6_proc_init (struct net *net) { -return tcp_proc_register (net, &tcp6_seq_afinfo); +if (!proc_create_data ("tcp6" ,0444 , net->proc_net, + &tcp6_afinfo_seq_fops, &tcp6_seq_afinfo)) +return -ENOMEM ; +return 0 ; }void tcp6_proc_exit (struct net *net) { -tcp_proc_unregister (net, &tcp6_seq_afinfo); +remove_proc_entry ("tcp6" , net->proc_net); }#endif
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 7/39 ipv{4,6}/ping: simplify proc file creation
In reply to Christoph HellwigRemove the pointless ping_seq_afinfo indirection and make the code look like most other protocols.
--- include/net/ping.h | 11 ---------- net/ipv4/ping.c | 50 +++++++++++++--------------------------------- net/ipv6/ping.c | 35 +++++++++++++++++++++----------- 3 files changed, 37 insertions(+), 59 deletions(-)
include/net/ping.h +0 -11
@@ -83,20 +83,9 @@ int ping_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);bool ping_rcv (struct sk_buff *skb);#ifdef CONFIG_PROC_FS -struct ping_seq_afinfo { -char *name; -sa_family_t family; -const struct file_operations *seq_fops; -const struct seq_operations seq_ops; -}; - -extern const struct file_operations ping_seq_fops; -void *ping_seq_start (struct seq_file *seq,loff_t *pos,sa_family_t family);void *ping_seq_next (struct seq_file *seq,void *v,loff_t *pos);void ping_seq_stop (struct seq_file *seq,void *v); -int ping_proc_register (struct net *net,struct ping_seq_afinfo *afinfo); -void ping_proc_unregister (struct net *net,struct ping_seq_afinfo *afinfo);int __init ping_proc_init (void );void ping_proc_exit (void );
net/ipv4/ping.c +14 -36
72 lines not on this page · raw message
net/ipv6/ping.c +23 -12
@@ -24,6 +24,7 @@#include <net/protocol.h> #include <net/udp.h> #include <net/transp_v6.h> +#include <linux/proc_fs.h> #include <net/ping.h> /* Compatibility glue so we can support IPv6 when it's compiled as a module */
@@ -215,26 +216,36 @@ static int ping_v6_seq_show(struct seq_file *seq, void *v)return 0 ; } -static struct ping_seq_afinfo ping_v6_seq_afinfo = { - .name ="icmp6" , - .family =AF_INET6 , - .seq_fops = &ping_seq_fops, - .seq_ops = { - .start = ping_v6_seq_start, - .show = ping_v6_seq_show, - .next = ping_seq_next, - .stop = ping_seq_stop, - }, +static const struct seq_operations ping_v6_seq_ops = { + .start = ping_v6_seq_start, + .show = ping_v6_seq_show, + .next = ping_seq_next, + .stop = ping_seq_stop, +}; + +static int ping_v6_seq_open (struct inode *inode,struct file *file) +{ +return seq_open_net (inode, file, &ping_v6_seq_ops, +sizeof (struct ping_iter_state )); +} + +const struct file_operations ping_v6_seq_fops = { + .open = ping_v6_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release_net, };static int __net_init ping_v6_proc_init_net (struct net *net) { -return ping_proc_register (net, &ping_v6_seq_afinfo); +if (!proc_create ("icmp6" ,0444 , net->proc_net, &ping_v6_seq_fops)) +return -ENOMEM ; +return 0 ; }static void __net_init ping_v6_proc_exit_net (struct net *net) { -return ping_proc_unregister (net, &ping_v6_seq_afinfo); +remove_proc_entry ("icmp6" , net->proc_net); }static struct pernet_operations ping_v6_net_ops = {
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 8/39 ipv{4,6}/raw: simplify ѕeq_file code
In reply to Christoph HellwigPass the hashtable to the proc private data instead of copying it into the per-file private data.
--- include/net/raw.h | 4 ---- net/ipv4/raw.c | 36 ++++++++++++------------------------ net/ipv6/raw.c | 6 ++++-- 3 files changed, 16 insertions(+), 30 deletions(-)
include/net/raw.h +0 -4
@@ -48,7 +48,6 @@ void raw_proc_exit(void);struct raw_iter_state {struct seq_net_private p;int bucket; -struct raw_hashinfo *h; };static inline struct raw_iter_state *raw_seq_private (struct seq_file *seq)
@@ -58,9 +57,6 @@ static inline struct raw_iter_state *raw_seq_private(struct seq_file *seq)void *raw_seq_start (struct seq_file *seq,loff_t *pos);void *raw_seq_next (struct seq_file *seq,void *v,loff_t *pos);void raw_seq_stop (struct seq_file *seq,void *v); -int raw_seq_open (struct inode *ino,struct file *file, -struct raw_hashinfo *h,const struct seq_operations *ops); -#endif int raw_hash_sk (struct sock *sk);
net/ipv4/raw.c +12 -24
@@ -1003,11 +1003,12 @@ struct proto raw_prot = {static struct sock *raw_get_first (struct seq_file *seq) {struct sock *sk; +struct raw_hashinfo *h =PDE_DATA (file_inode (seq->file));struct raw_iter_state *state =raw_seq_private (seq);for (state->bucket =0 ; state->bucket <RAW_HTABLE_SIZE ; ++state->bucket) { -sk_for_each (sk, &state->h->ht[state->bucket]) +sk_for_each (sk, &h->ht[state->bucket])if (sock_net (sk) ==seq_file_net (seq)) goto found; }
@@ -1018,6 +1019,7 @@ static struct sock *raw_get_first(struct seq_file *seq)static struct sock *raw_get_next (struct seq_file *seq,struct sock *sk) { +struct raw_hashinfo *h =PDE_DATA (file_inode (seq->file));struct raw_iter_state *state =raw_seq_private (seq); do {
@@ -1027,7 +1029,7 @@ static struct sock *raw_get_next(struct seq_file *seq, struct sock *sk) }while (sk &&sock_net (sk) !=seq_file_net (seq));if (!sk && ++state->bucket <RAW_HTABLE_SIZE ) { - sk =sk_head (&state->h->ht[state->bucket]); + sk =sk_head (&h->ht[state->bucket]); goto try_again; }return sk;
@@ -1045,9 +1047,9 @@ static struct sock *raw_get_idx(struct seq_file *seq, loff_t pos)void *raw_seq_start (struct seq_file *seq,loff_t *pos) { -struct raw_iter_state *state =raw_seq_private (seq); +struct raw_hashinfo *h =PDE_DATA (file_inode (seq->file)); -read_lock (&state->h->lock); +read_lock (&h->lock);return *pos ?raw_get_idx (seq, *pos -1 ) :SEQ_START_TOKEN ; }EXPORT_SYMBOL_GPL (raw_seq_start);
@@ -1067,9 +1069,9 @@ EXPORT_SYMBOL_GPL(raw_seq_next);void raw_seq_stop (struct seq_file *seq,void *v) { -struct raw_iter_state *state =raw_seq_private (seq); +struct raw_hashinfo *h =PDE_DATA (file_inode (seq->file)); -read_unlock (&state->h->lock); +read_unlock (&h->lock); }EXPORT_SYMBOL_GPL (raw_seq_stop);
@@ -1110,25 +1112,10 @@ static const struct seq_operations raw_seq_ops = { .show = raw_seq_show, }; -int raw_seq_open (struct inode *ino,struct file *file, -struct raw_hashinfo *h,const struct seq_operations *ops) -{ -int err; -struct raw_iter_state *i; - - err =seq_open_net (ino, file, ops,sizeof (struct raw_iter_state )); -if (err <0 ) -return err; - - i =raw_seq_private ((struct seq_file *)file->private_data); - i->h = h; -return 0 ; -} -EXPORT_SYMBOL_GPL (raw_seq_open); -static int raw_v4_seq_open (struct inode *inode,struct file *file) { -return raw_seq_open (inode, file, &raw_v4_hashinfo, &raw_seq_ops); +return seq_open_net (inode, file, &raw_seq_ops, +sizeof (struct raw_iter_state )); }static const struct file_operations raw_seq_fops = {
@@ -1140,7 +1127,8 @@ static const struct file_operations raw_seq_fops = {static __net_init int raw_init_net (struct net *net) { -if (!proc_create ("raw" ,0444 , net->proc_net, &raw_seq_fops)) +if (!proc_create_data ("raw" ,0444 , net->proc_net, &raw_seq_fops, + &raw_v4_hashinfo))return -ENOMEM ;return 0 ;
net/ipv6/raw.c +4 -2
@@ -1306,7 +1306,8 @@ static const struct seq_operations raw6_seq_ops = {static int raw6_seq_open (struct inode *inode,struct file *file) { -return raw_seq_open (inode, file, &raw_v6_hashinfo, &raw6_seq_ops); +return seq_open_net (inode, file, &raw6_seq_ops, +sizeof (struct raw_iter_state )); }static const struct file_operations raw6_seq_fops = {
@@ -1318,7 +1319,8 @@ static const struct file_operations raw6_seq_fops = {static int __net_init raw6_init_net (struct net *net) { -if (!proc_create ("raw6" ,0444 , net->proc_net, &raw6_seq_fops)) +if (!proc_create_data ("raw6" ,0444 , net->proc_net, &raw6_seq_fops, + &raw_v6_hashinfo))return -ENOMEM ;return 0 ;
Signature · 1 line
2.17.0
PATCH 9/39 ipv6/flowlabel: simplify pid namespace lookup
In reply to Christoph HellwigThe shole seq_file sequence already operates under a single RCU lock pair, so move the pid namespace lookup into it, and stop grabbing a reference and remove all kinds of boilerplate code.
--- net/ipv6/ip6_flowlabel.c | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-)
net/ipv6/ip6_flowlabel.c +5 -23
@@ -754,7 +754,10 @@ static struct ip6_flowlabel *ip6fl_get_idx(struct seq_file *seq, loff_t pos)static void *ip6fl_seq_start (struct seq_file *seq,loff_t *pos)__acquires (RCU ) { +struct ip6fl_iter_state *state =ip6fl_seq_private (seq); +rcu_read_lock_bh (); + state->pid_ns =task_active_pid_ns (current);return *pos ?ip6fl_get_idx (seq, *pos -1 ) :SEQ_START_TOKEN ; }
@@ -810,36 +813,15 @@ static const struct seq_operations ip6fl_seq_ops = {static int ip6fl_seq_open (struct inode *inode,struct file *file) { -struct seq_file *seq; -struct ip6fl_iter_state *state; -int err; - - err =seq_open_net (inode, file, &ip6fl_seq_ops, +return seq_open_net (inode, file, &ip6fl_seq_ops,sizeof (struct ip6fl_iter_state )); - -if (!err) { - seq = file->private_data; - state =ip6fl_seq_private (seq); -rcu_read_lock (); - state->pid_ns =get_pid_ns (task_active_pid_ns (current)); -rcu_read_unlock (); - } -return err; -} - -static int ip6fl_seq_release (struct inode *inode,struct file *file) -{ -struct seq_file *seq = file->private_data; -struct ip6fl_iter_state *state =ip6fl_seq_private (seq); -put_pid_ns (state->pid_ns); -return seq_release_net (inode, file); }static const struct file_operations ip6fl_seq_fops = { .open = ip6fl_seq_open, .read = seq_read, .llseek = seq_lseek, - .release = ip6fl_seq_release, + .release = seq_release_net, };static int __net_init ip6_flowlabel_proc_init (struct net *net)
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 10/39 net/kcm: simplify proc registration
In reply to Christoph HellwigRemove a couple indirections to make the code look like most other protocols.
--- net/kcm/kcmproc.c | 71 ++++++++++++----------------------------------- 1 file changed, 17 insertions(+), 54 deletions(-)
net/kcm/kcmproc.c +17 -54
@@ -15,12 +15,6 @@#include <net/tcp.h> #ifdef CONFIG_PROC_FS -struct kcm_seq_muxinfo { -char *name; -const struct file_operations *seq_fops; -const struct seq_operations seq_ops; -}; -static struct kcm_mux *kcm_get_first (struct seq_file *seq) {struct net *net =seq_file_net (seq);
@@ -86,14 +80,6 @@ struct kcm_proc_mux_state {int idx; }; -static int kcm_seq_open (struct inode *inode,struct file *file) -{ -struct kcm_seq_muxinfo *muxinfo =PDE_DATA (inode); - -return seq_open_net (inode, file, &muxinfo->seq_ops, -sizeof (struct kcm_proc_mux_state )); -} -static void kcm_format_mux_header (struct seq_file *seq) {struct net *net =seq_file_net (seq);
@@ -246,6 +232,19 @@ static int kcm_seq_show(struct seq_file *seq, void *v)return 0 ; } +static const struct seq_operations kcm_seq_ops = { + .show = kcm_seq_show, + .start = kcm_seq_start, + .next = kcm_seq_next, + .stop = kcm_seq_stop, +}; + +static int kcm_seq_open (struct inode *inode,struct file *file) +{ +return seq_open_net (inode, file, &kcm_seq_ops, +sizeof (struct kcm_proc_mux_state )); +} +static const struct file_operations kcm_seq_fops = { .open = kcm_seq_open, .read = seq_read,
@@ -253,37 +252,6 @@ static const struct file_operations kcm_seq_fops = { .release = seq_release_net, }; -static struct kcm_seq_muxinfo kcm_seq_muxinfo = { - .name ="kcm" , - .seq_fops = &kcm_seq_fops, - .seq_ops = { - .show = kcm_seq_show, - .start = kcm_seq_start, - .next = kcm_seq_next, - .stop = kcm_seq_stop, - } -}; - -static int kcm_proc_register (struct net *net,struct kcm_seq_muxinfo *muxinfo) -{ -struct proc_dir_entry *p; -int rc =0 ; - - p =proc_create_data (muxinfo->name,0444 , net->proc_net, - muxinfo->seq_fops, muxinfo); -if (!p) - rc = -ENOMEM ; -return rc; -} -EXPORT_SYMBOL (kcm_proc_register); - -static void kcm_proc_unregister (struct net *net, -struct kcm_seq_muxinfo *muxinfo) -{ -remove_proc_entry (muxinfo->name, net->proc_net); -} -EXPORT_SYMBOL (kcm_proc_unregister); -static int kcm_stats_seq_show (struct seq_file *seq,void *v) {struct kcm_psock_stats psock_stats;
@@ -404,16 +372,11 @@ static const struct file_operations kcm_stats_seq_fops = {static int kcm_proc_init_net (struct net *net) { -int err; -if (!proc_create ("kcm_stats" ,0444 , net->proc_net, - &kcm_stats_seq_fops)) { - err = -ENOMEM ; + &kcm_stats_seq_fops)) goto out_kcm_stats; - } - err =kcm_proc_register (net, &kcm_seq_muxinfo); -if (err) +if (!proc_create ("kcm" ,0444 , net->proc_net, &kcm_seq_fops)) goto out_kcm;return 0 ;
@@ -421,12 +384,12 @@ static int kcm_proc_init_net(struct net *net) out_kcm:remove_proc_entry ("kcm_stats" , net->proc_net); out_kcm_stats: -return err; +return -ENOMEM ; }static void kcm_proc_exit_net (struct net *net) { -kcm_proc_unregister (net, &kcm_seq_muxinfo); +remove_proc_entry ("kcm" , net->proc_net);remove_proc_entry ("kcm_stats" , net->proc_net); }
Signature · 1 line
2.17.0
PATCH 11/39 netfilter/x_tables: simplify ѕeq_file code
In reply to Christoph HellwigJust use the address family from the proc private data instead of copying it into per-file data.
--- net/netfilter/x_tables.c | 39 +++++++++++---------------------------- 1 file changed, 11 insertions(+), 28 deletions(-)
net/netfilter/x_tables.c +11 -28
@@ -1489,15 +1489,10 @@ void *xt_unregister_table(struct xt_table *table)EXPORT_SYMBOL_GPL (xt_unregister_table);#ifdef CONFIG_PROC_FS -struct xt_names_priv { -struct seq_net_private p; -u_int8_t af; -};static void *xt_table_seq_start (struct seq_file *seq,loff_t *pos) { -struct xt_names_priv *priv = seq->private;struct net *net =seq_file_net (seq); -u_int8_t af = priv->af; +u_int8_t af = (unsigned long )PDE_DATA (file_inode (seq->file));mutex_lock (&xt[af].mutex);return seq_list_start (&net->xt.tables[af], *pos);
@@ -1505,17 +1500,15 @@ static void *xt_table_seq_start(struct seq_file *seq, loff_t *pos)static void *xt_table_seq_next (struct seq_file *seq,void *v,loff_t *pos) { -struct xt_names_priv *priv = seq->private;struct net *net =seq_file_net (seq); -u_int8_t af = priv->af; +u_int8_t af = (unsigned long )PDE_DATA (file_inode (seq->file));return seq_list_next (v, &net->xt.tables[af], pos); }static void xt_table_seq_stop (struct seq_file *seq,void *v) { -struct xt_names_priv *priv = seq->private; -u_int8_t af = priv->af; +u_int8_t af = (unsigned long )PDE_DATA (file_inode (seq->file));mutex_unlock (&xt[af].mutex); }
@@ -1538,16 +1531,8 @@ static const struct seq_operations xt_table_seq_ops = {static int xt_table_open (struct inode *inode,struct file *file) { -int ret; -struct xt_names_priv *priv; - - ret =seq_open_net (inode, file, &xt_table_seq_ops, -sizeof (struct xt_names_priv )); -if (!ret) { - priv = ((struct seq_file *)file->private_data)->private; - priv->af = (unsigned long )PDE_DATA (inode); - } -return ret; +return seq_open_net (inode, file, &xt_table_seq_ops, +sizeof (struct seq_net_private )); }static const struct file_operations xt_table_ops = {
@@ -1563,7 +1548,7 @@ static const struct file_operations xt_table_ops = {*/ struct nf_mttg_trav {struct list_head *head, *curr; -uint8_t class, nfproto; +uint8_t class; };enum {
@@ -1580,6 +1565,7 @@ static void *xt_mttg_seq_next(struct seq_file *seq, void *v, loff_t *ppos, [MTTG_TRAV_NFP_UNSPEC] = MTTG_TRAV_NFP_SPEC, [MTTG_TRAV_NFP_SPEC] = MTTG_TRAV_DONE, }; +uint8_t nfproto = (unsigned long )PDE_DATA (file_inode (seq->file));struct nf_mttg_trav *trav = seq->private;switch (trav->class) {
@@ -1594,9 +1580,9 @@ static void *xt_mttg_seq_next(struct seq_file *seq, void *v, loff_t *ppos,if (trav->curr != trav->head)break ;mutex_unlock (&xt[NFPROTO_UNSPEC ].mutex); -mutex_lock (&xt[trav->nfproto].mutex); +mutex_lock (&xt[nfproto].mutex); trav->head = trav->curr = is_target ? - &xt[trav->nfproto].target : &xt[trav->nfproto].match; + &xt[nfproto].target : &xt[nfproto].match; trav->class = next_class[trav->class];break ;case MTTG_TRAV_NFP_SPEC :
@@ -1628,6 +1614,7 @@ static void *xt_mttg_seq_start(struct seq_file *seq, loff_t *pos,static void xt_mttg_seq_stop (struct seq_file *seq,void *v) { +uint8_t nfproto = (unsigned long )PDE_DATA (file_inode (seq->file));struct nf_mttg_trav *trav = seq->private;switch (trav->class) {
@@ -1635,7 +1622,7 @@ static void xt_mttg_seq_stop(struct seq_file *seq, void *v)mutex_unlock (&xt[NFPROTO_UNSPEC ].mutex);break ;case MTTG_TRAV_NFP_SPEC : -mutex_unlock (&xt[trav->nfproto].mutex); +mutex_unlock (&xt[nfproto].mutex);break ; } }
@@ -1680,8 +1667,6 @@ static int xt_match_open(struct inode *inode, struct file *file) trav =__seq_open_private (file, &xt_match_seq_ops,sizeof (*trav));if (!trav)return -ENOMEM ; - - trav->nfproto = (unsigned long )PDE_DATA (inode);return 0 ; }
@@ -1732,8 +1717,6 @@ static int xt_target_open(struct inode *inode, struct file *file) trav =__seq_open_private (file, &xt_target_seq_ops,sizeof (*trav));if (!trav)return -ENOMEM ; - - trav->nfproto = (unsigned long )PDE_DATA (inode);return 0 ; }
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 12/39 net: move seq_file_single_net to <linux/seq_file_net.h>
In reply to Christoph HellwigThis helper deals with single_{open,release}_net internals and thus belongs here.
--- include/linux/seq_file_net.h | 13 +++++++++++++ include/net/ip_vs.h | 12 ------------ 2 files changed, 13 insertions(+), 12 deletions(-)
include/linux/seq_file_net.h +13 -0
@@ -28,4 +28,17 @@ static inline struct net *seq_file_net(struct seq_file *seq) #endif } +/* +* This one is needed for single_open_net since net is stored directly in +* private not as a struct i.e. seq_file_net can't be used. +*/ +static inline struct net *seq_file_single_net (struct seq_file *seq) +{ +#ifdef CONFIG_NET_NS +return (struct net *)seq->private; +#else +return &init_net; +#endif +} +#endif
include/net/ip_vs.h +0 -12
@@ -41,18 +41,6 @@ static inline struct netns_ipvs *net_ipvs(struct net* net)return net->ipvs; } -/* This one needed for single_open_net since net is stored directly in -* private not as a struct i.e. seq_file_net can't be used. -*/ -static inline struct net *seq_file_single_net (struct seq_file *seq) -{ -#ifdef CONFIG_NET_NS -return (struct net *)seq->private; -#else -return &init_net; -#endif -} -/* Connections' size value needed by ip_vs_ctl.c */ extern int ip_vs_conn_tab_size;
Signature · 1 line
2.17.0
PATCH 13/39 proc: introduce proc_create_net{,_data}
In reply to Christoph HellwigVariants of proc_create{,_data} that directly take a struct seq_operations and deal with network namespaces in ->open and ->release. All callers of proc_create + seq_open_net converted over, and seq_{open,release}_net are removed entirely.
--- drivers/net/ppp/pppoe.c | 18 +------- fs/nfs/client.c | 43 ++--------------- fs/proc/proc_net.c | 61 ++++++++++++++++--------- include/linux/proc_fs.h | 9 ++++ include/linux/seq_file_net.h | 3 -- include/net/ip6_fib.h | 10 +++- include/net/phonet/pn_dev.h | 4 +- include/net/udp.h | 4 +- net/8021q/vlanproc.c | 18 ++------ net/atm/clip.c | 17 +------ net/core/net-procfs.c | 49 +++----------------- net/core/sock.c | 16 +------ net/decnet/dn_neigh.c | 18 +------- net/ipv4/arp.c | 17 ++----- net/ipv4/fib_trie.c | 32 ++----------- net/ipv4/igmp.c | 33 ++----------- net/ipv4/ipmr.c | 32 ++----------- net/ipv4/ping.c | 16 +------ net/ipv4/raw.c | 17 +------ net/ipv4/tcp_ipv4.c | 17 +------ net/ipv4/udp.c | 21 ++------- net/ipv4/udplite.c | 4 +- net/ipv6/addrconf.c | 16 +------ net/ipv6/anycast.c | 16 +------ net/ipv6/ip6_fib.c | 18 +------- net/ipv6/ip6_flowlabel.c | 17 +------ net/ipv6/ip6mr.c | 32 ++----------- net/ipv6/mcast.c | 34 ++------------ net/ipv6/ping.c | 16 +------ net/ipv6/raw.c | 17 +------ net/ipv6/route.c | 11 +---- net/ipv6/tcp_ipv6.c | 17 +------ net/ipv6/udp.c | 21 ++------- net/ipv6/udplite.c | 5 +- net/kcm/kcmproc.c | 16 +------ net/key/af_key.c | 16 +------ net/l2tp/l2tp_ppp.c | 22 +-------- net/netfilter/ipvs/ip_vs_app.c | 16 +------ net/netfilter/ipvs/ip_vs_conn.c | 35 ++------------ net/netfilter/ipvs/ip_vs_ctl.c | 16 +------ net/netfilter/nf_conntrack_expect.c | 17 +------ net/netfilter/nf_conntrack_standalone.c | 33 ++----------- net/netfilter/nf_log.c | 19 +------- net/netfilter/nf_synproxy_core.c | 17 +------ net/netfilter/nfnetlink_log.c | 18 +------- net/netfilter/nfnetlink_queue.c | 18 +------- net/netfilter/x_tables.c | 18 ++------ net/netlink/af_netlink.c | 18 +------- net/packet/af_packet.c | 17 +------ net/phonet/pn_dev.c | 6 ++- net/phonet/socket.c | 30 +----------- net/rxrpc/ar-internal.h | 4 +- net/rxrpc/net_ns.c | 7 ++- net/rxrpc/proc.c | 31 +------------ net/sctp/proc.c | 54 +++------------------- net/unix/af_unix.c | 17 +------ net/wireless/wext-proc.c | 17 +------ 57 files changed, 202 insertions(+), 939 deletions(-)
drivers/net/ppp/pppoe.c +2 -16
@@ -1092,21 +1092,6 @@ static const struct seq_operations pppoe_seq_ops = { .stop = pppoe_seq_stop, .show = pppoe_seq_show, }; - -static int pppoe_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &pppoe_seq_ops, -sizeof (struct seq_net_private )); -} - -static const struct file_operations pppoe_seq_fops = { - .owner =THIS_MODULE , - .open = pppoe_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -#endif /* CONFIG_PROC_FS */ static const struct proto_ops pppoe_ops = {
@@ -1142,7 +1127,8 @@ static __net_init int pppoe_init_net(struct net *net)rwlock_init (&pn->hash_lock); - pde =proc_create ("pppoe" ,0444 , net->proc_net, &pppoe_seq_fops); + pde =proc_create_net ("pppoe" ,0444 , net->proc_net, + &pppoe_seq_ops,sizeof (struct seq_net_private ));#ifdef CONFIG_PROC_FS if (!pde)return -ENOMEM ;
fs/nfs/client.c +4 -39
77 lines not on this page · raw message
fs/proc/proc_net.c +40 -21
85 lines not on this page · raw message
include/linux/proc_fs.h +9 -0
@@ -53,6 +53,12 @@ extern void proc_remove(struct proc_dir_entry *);extern void remove_proc_entry (const char *,struct proc_dir_entry *);extern int remove_proc_subtree (const char *,struct proc_dir_entry *); +struct proc_dir_entry *proc_create_net_data (const char *name,umode_t mode, +struct proc_dir_entry *parent,const struct seq_operations *ops, +size_t state_size,void *data); +#define proc_create_net (name, mode, parent, state_size, ops) \ + proc_create_net_data(name, mode, parent, state_size, ops, NULL) +#else /* CONFIG_PROC_FS */ static inline void proc_root_init (void )
@@ -89,6 +95,9 @@ static inline void proc_remove(struct proc_dir_entry *de) {}#define remove_proc_entry (name, parent) do {} while (0)static inline int remove_proc_subtree (const char *name,struct proc_dir_entry *parent) {return 0 ; } +#define proc_create_net_data (name, mode, parent, ops, state_size, data) ({NULL;}) +#define proc_create_net (name, mode, parent, state_size, ops) ({NULL;}) +#endif /* CONFIG_PROC_FS */ struct net ;
include/linux/seq_file_net.h +0 -3
@@ -13,11 +13,8 @@ struct seq_net_private {#endif }; -int seq_open_net (struct inode *,struct file *, -const struct seq_operations *,int );int single_open_net (struct inode *,struct file *file,int (*show)(struct seq_file *,void *)); -int seq_release_net (struct inode *,struct file *);int single_release_net (struct inode *,struct file *);static inline struct net *seq_file_net (struct seq_file *seq) {
include/net/ip6_fib.h +9 -1
@@ -394,7 +394,15 @@ void fib6_gc_cleanup(void);int fib6_init (void ); -int ipv6_route_open (struct inode *inode,struct file *file); +struct ipv6_route_iter { +struct seq_net_private p; +struct fib6_walker w; +loff_t skip; +struct fib6_table *tbl; +int sernum; +}; + +extern const struct seq_operations ipv6_route_seq_ops; int call_fib6_notifier(struct notifier_block *nb, struct net *net, enum fib_event_type event_type,
include/net/phonet/pn_dev.h +2 -2
@@ -56,7 +56,7 @@ struct net_device *phonet_route_output(struct net *net, u8 daddr);#define PN_NO_ADDR 0xff -extern const struct file_operations pn_sock_seq_fops; -extern const struct file_operations pn_res_seq_fops; +extern const struct seq_operations pn_sock_seq_ops; +extern const struct seq_operations pn_res_seq_ops;#endif
include/net/udp.h +2 -2
@@ -423,8 +423,8 @@ void *udp_seq_start(struct seq_file *seq, loff_t *pos);void *udp_seq_next (struct seq_file *seq,void *v,loff_t *pos);void udp_seq_stop (struct seq_file *seq,void *v); -extern const struct file_operations udp_afinfo_seq_fops; -extern const struct file_operations udp6_afinfo_seq_fops; +extern const struct seq_operations udp_seq_ops; +extern const struct seq_operations udp6_seq_ops;int udp4_proc_init (void );void udp4_proc_exit (void );
net/8021q/vlanproc.c +3 -15
@@ -73,19 +73,6 @@ static const struct seq_operations vlan_seq_ops = { .show = vlan_seq_show, }; -static int vlan_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &vlan_seq_ops, -sizeof (struct seq_net_private )); -} - -static const struct file_operations vlan_fops = { - .open = vlan_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -/* * Proc filesystem directory entries. */
@@ -132,8 +119,9 @@ int __net_init vlan_proc_init(struct net *net)if (!vn->proc_vlan_dir) goto err; - vn->proc_vlan_conf =proc_create (name_conf,S_IFREG |0600 , - vn->proc_vlan_dir, &vlan_fops); + vn->proc_vlan_conf =proc_create_net (name_conf,S_IFREG |0600 , + vn->proc_vlan_dir, &vlan_seq_ops, +sizeof (struct seq_net_private ));if (!vn->proc_vlan_conf) goto err;return 0 ;
net/atm/clip.c +2 -15
@@ -863,20 +863,6 @@ static const struct seq_operations arp_seq_ops = { .stop = neigh_seq_stop, .show = clip_seq_show, }; - -static int arp_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &arp_seq_ops, -sizeof (struct clip_seq_state )); -} - -static const struct file_operations arp_seq_fops = { - .open = arp_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, - .owner =THIS_MODULE -};#endif static void atm_clip_exit_noproc (void );
@@ -893,7 +879,8 @@ static int __init atm_clip_init(void) {struct proc_dir_entry *p; - p =proc_create ("arp" ,0444 , atm_proc_root, &arp_seq_fops); + p =proc_create_net ("arp" ,0444 , atm_proc_root, &arp_seq_ops, +sizeof (struct clip_seq_state ));if (!p) {pr_err ("Unable to initialize /proc/net/atm/arp\n" );atm_clip_exit_noproc ();
net/core/net-procfs.c +6 -43
77 lines not on this page · raw message
net/core/sock.c +2 -14
@@ -3439,22 +3439,10 @@ static const struct seq_operations proto_seq_ops = { .show = proto_seq_show, }; -static int proto_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &proto_seq_ops, -sizeof (struct seq_net_private )); -} - -static const struct file_operations proto_seq_fops = { - .open = proto_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static __net_init int proto_init_net (struct net *net) { -if (!proc_create ("protocols" ,0444 , net->proc_net, &proto_seq_fops)) +if (!proc_create_net ("protocols" ,0444 , net->proc_net, &proto_seq_ops, +sizeof (struct seq_net_private )))return -ENOMEM ;return 0 ;
net/decnet/dn_neigh.c +2 -16
@@ -589,27 +589,13 @@ static const struct seq_operations dn_neigh_seq_ops = { .stop = neigh_seq_stop, .show = dn_neigh_seq_show, }; - -static int dn_neigh_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &dn_neigh_seq_ops, -sizeof (struct neigh_seq_state )); -} - -static const struct file_operations dn_neigh_seq_fops = { - .open = dn_neigh_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -#endif void __init dn_neigh_init (void ) {neigh_table_init (NEIGH_DN_TABLE , &dn_neigh_table); -proc_create ("decnet_neigh" ,0444 , init_net.proc_net, - &dn_neigh_seq_fops); +proc_create_net ("decnet_neigh" ,0444 , init_net.proc_net, + &dn_neigh_seq_ops,sizeof (struct neigh_seq_state )); } void __exit dn_neigh_cleanup(void)
net/ipv4/arp.c +3 -14
@@ -1418,23 +1418,12 @@ static const struct seq_operations arp_seq_ops = { .show = arp_seq_show, }; -static int arp_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &arp_seq_ops, -sizeof (struct neigh_seq_state )); -} - -static const struct file_operations arp_seq_fops = { - .open = arp_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; - +/* ------------------------------------------------------------------------ */ static int __net_init arp_net_init (struct net *net) { -if (!proc_create ("arp" ,0444 , net->proc_net, &arp_seq_fops)) +if (!proc_create_net ("arp" ,0444 , net->proc_net, &arp_seq_ops, +sizeof (struct neigh_seq_state )))return -ENOMEM ;return 0 ; }
net/ipv4/fib_trie.c +4 -28
@@ -2533,19 +2533,6 @@ static const struct seq_operations fib_trie_seq_ops = { .show = fib_trie_seq_show, }; -static int fib_trie_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &fib_trie_seq_ops, -sizeof (struct fib_trie_iter )); -} - -static const struct file_operations fib_trie_fops = { - .open = fib_trie_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -struct fib_route_iter {struct seq_net_private p;struct fib_table *main_tb;
@@ -2726,29 +2713,18 @@ static const struct seq_operations fib_route_seq_ops = { .show = fib_route_seq_show, }; -static int fib_route_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &fib_route_seq_ops, -sizeof (struct fib_route_iter )); -} - -static const struct file_operations fib_route_fops = { - .open = fib_route_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -int __net_init fib_proc_init (struct net *net) { -if (!proc_create ("fib_trie" ,0444 , net->proc_net, &fib_trie_fops)) +if (!proc_create_net ("fib_trie" ,0444 , net->proc_net, &fib_trie_seq_ops, +sizeof (struct fib_trie_iter ))) goto out1;if (!proc_create ("fib_triestat" ,0444 , net->proc_net, &fib_triestat_fops)) goto out2; -if (!proc_create ("route" ,0444 , net->proc_net, &fib_route_fops)) +if (!proc_create_net ("route" ,0444 , net->proc_net, &fib_route_seq_ops, +sizeof (struct fib_route_iter ))) goto out3;return 0 ;
net/ipv4/igmp.c +4 -29
@@ -2829,19 +2829,6 @@ static const struct seq_operations igmp_mc_seq_ops = { .show = igmp_mc_seq_show, }; -static int igmp_mc_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &igmp_mc_seq_ops, -sizeof (struct igmp_mc_iter_state )); -} - -static const struct file_operations igmp_mc_seq_fops = { - .open = igmp_mc_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -struct igmp_mcf_iter_state {struct seq_net_private p;struct net_device *dev;
@@ -2975,29 +2962,17 @@ static const struct seq_operations igmp_mcf_seq_ops = { .show = igmp_mcf_seq_show, }; -static int igmp_mcf_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &igmp_mcf_seq_ops, -sizeof (struct igmp_mcf_iter_state )); -} - -static const struct file_operations igmp_mcf_seq_fops = { - .open = igmp_mcf_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static int __net_init igmp_net_init (struct net *net) {struct proc_dir_entry *pde;int err; - pde =proc_create ("igmp" ,0444 , net->proc_net, &igmp_mc_seq_fops); + pde =proc_create_net ("igmp" ,0444 , net->proc_net, &igmp_mc_seq_ops, +sizeof (struct igmp_mc_iter_state ));if (!pde) goto out_igmp; - pde =proc_create ("mcfilter" ,0444 , net->proc_net, - &igmp_mcf_seq_fops); + pde =proc_create_net ("mcfilter" ,0444 , net->proc_net, + &igmp_mcf_seq_ops,sizeof (struct igmp_mcf_iter_state ));if (!pde) goto out_mcfilter; err = inet_ctl_sock_create(&net->ipv4.mc_autojoin_sk, AF_INET,
net/ipv4/ipmr.c +4 -28
@@ -2828,19 +2828,6 @@ static const struct seq_operations ipmr_vif_seq_ops = { .show = ipmr_vif_seq_show, }; -static int ipmr_vif_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ipmr_vif_seq_ops, -sizeof (struct mr_vif_iter )); -} - -static const struct file_operations ipmr_vif_fops = { - .open = ipmr_vif_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static void *ipmr_mfc_seq_start (struct seq_file *seq,loff_t *pos) {struct net *net =seq_file_net (seq);
@@ -2900,19 +2887,6 @@ static const struct seq_operations ipmr_mfc_seq_ops = { .stop = mr_mfc_seq_stop, .show = ipmr_mfc_seq_show, }; - -static int ipmr_mfc_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ipmr_mfc_seq_ops, -sizeof (struct mr_mfc_iter )); -} - -static const struct file_operations ipmr_mfc_fops = { - .open = ipmr_mfc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -};#endif #ifdef CONFIG_IP_PIMSM_V2
@@ -2977,9 +2951,11 @@ static int __net_init ipmr_net_init(struct net *net)#ifdef CONFIG_PROC_FS err = -ENOMEM ; -if (!proc_create ("ip_mr_vif" ,0 , net->proc_net, &ipmr_vif_fops)) +if (!proc_create_net ("ip_mr_vif" ,0 , net->proc_net, &ipmr_vif_seq_ops, +sizeof (struct mr_vif_iter ))) goto proc_vif_fail; -if (!proc_create ("ip_mr_cache" ,0 , net->proc_net, &ipmr_mfc_fops)) +if (!proc_create_net ("ip_mr_cache" ,0 , net->proc_net, &ipmr_mfc_seq_ops, +sizeof (struct mr_mfc_iter ))) goto proc_cache_fail;#endif return 0 ;
net/ipv4/ping.c +2 -14
@@ -1154,22 +1154,10 @@ static const struct seq_operations ping_v4_seq_ops = { .stop = ping_seq_stop, }; -static int ping_v4_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ping_v4_seq_ops, -sizeof (struct ping_iter_state )); -} - -const struct file_operations ping_v4_seq_fops = { - .open = ping_v4_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static int __net_init ping_v4_proc_init_net (struct net *net) { -if (!proc_create ("icmp" ,0444 , net->proc_net, &ping_v4_seq_fops)) +if (!proc_create_net ("icmp" ,0444 , net->proc_net, &ping_v4_seq_ops, +sizeof (struct ping_iter_state )))return -ENOMEM ;return 0 ; }
net/ipv4/raw.c +2 -15
@@ -1112,23 +1112,10 @@ static const struct seq_operations raw_seq_ops = { .show = raw_seq_show, }; -static int raw_v4_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &raw_seq_ops, -sizeof (struct raw_iter_state )); -} - -static const struct file_operations raw_seq_fops = { - .open = raw_v4_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static __net_init int raw_init_net (struct net *net) { -if (!proc_create_data ("raw" ,0444 , net->proc_net, &raw_seq_fops, - &raw_v4_hashinfo)) +if (!proc_create_net_data ("raw" ,0444 , net->proc_net, &raw_seq_ops, +sizeof (struct raw_iter_state ), &raw_v4_hashinfo))return -ENOMEM ;return 0 ;
net/ipv4/tcp_ipv4.c +2 -15
@@ -2350,27 +2350,14 @@ static const struct seq_operations tcp4_seq_ops = { .stop = tcp_seq_stop, }; -static int tcp_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &tcp4_seq_ops, -sizeof (struct tcp_iter_state )); -} - -static const struct file_operations tcp_afinfo_seq_fops = { - .open = tcp_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net -}; -static struct tcp_seq_afinfo tcp4_seq_afinfo = { .family =AF_INET , };static int __net_init tcp4_proc_init_net (struct net *net) { -if (!proc_create_data ("tcp" ,0444 , net->proc_net, - &tcp_afinfo_seq_fops, &tcp4_seq_afinfo)) +if (!proc_create_net_data ("tcp" ,0444 , net->proc_net, &tcp4_seq_ops, +sizeof (struct tcp_iter_state ), &tcp4_seq_afinfo))return -ENOMEM ;return 0 ; }
net/ipv4/udp.c +4 -17
@@ -2703,26 +2703,13 @@ int udp4_seq_show(struct seq_file *seq, void *v)return 0 ; } -static const struct seq_operations udp_seq_ops = { +const struct seq_operations udp_seq_ops = { .start = udp_seq_start, .next = udp_seq_next, .stop = udp_seq_stop, .show = udp4_seq_show, }; - -static int udp_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &udp_seq_ops, -sizeof (struct udp_iter_state )); -} - -const struct file_operations udp_afinfo_seq_fops = { - .open = udp_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net -}; -EXPORT_SYMBOL (udp_afinfo_seq_fops); +EXPORT_SYMBOL (udp_seq_ops);static struct udp_seq_afinfo udp4_seq_afinfo = { .family =AF_INET ,
@@ -2731,8 +2718,8 @@ static struct udp_seq_afinfo udp4_seq_afinfo = {static int __net_init udp4_proc_init_net (struct net *net) { -if (!proc_create_data ("udp" ,0444 , net->proc_net, &udp_afinfo_seq_fops, - &udp4_seq_afinfo)) +if (!proc_create_net_data ("udp" ,0444 , net->proc_net, &udp_seq_ops, +sizeof (struct udp_iter_state ), &udp4_seq_afinfo))return -ENOMEM ;return 0 ; }
net/ipv4/udplite.c +2 -2
@@ -81,8 +81,8 @@ static struct udp_seq_afinfo udplite4_seq_afinfo = {static int __net_init udplite4_proc_init_net (struct net *net) { -if (!proc_create_data ("udplite" ,0444 , net->proc_net, - &udp_afinfo_seq_fops, &udplite4_seq_afinfo)) +if (!proc_create_net_data ("udplite" ,0444 , net->proc_net, &udp_seq_ops, +sizeof (struct udp_iter_state ), &udplite4_seq_afinfo))return -ENOMEM ;return 0 ; }
net/ipv6/addrconf.c +2 -14
@@ -4254,22 +4254,10 @@ static const struct seq_operations if6_seq_ops = { .stop = if6_seq_stop, }; -static int if6_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &if6_seq_ops, -sizeof (struct if6_iter_state )); -} - -static const struct file_operations if6_fops = { - .open = if6_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static int __net_init if6_proc_net_init (struct net *net) { -if (!proc_create ("if_inet6" ,0444 , net->proc_net, &if6_fops)) +if (!proc_create_net ("if_inet6" ,0444 , net->proc_net, &if6_seq_ops, +sizeof (struct if6_iter_state )))return -ENOMEM ;return 0 ; }
net/ipv6/anycast.c +2 -14
@@ -529,22 +529,10 @@ static const struct seq_operations ac6_seq_ops = { .show = ac6_seq_show, }; -static int ac6_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ac6_seq_ops, -sizeof (struct ac6_iter_state )); -} - -static const struct file_operations ac6_seq_fops = { - .open = ac6_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -int __net_init ac6_proc_init (struct net *net) { -if (!proc_create ("anycast6" ,0444 , net->proc_net, &ac6_seq_fops)) +if (!proc_create_net ("anycast6" ,0444 , net->proc_net, &ac6_seq_ops, +sizeof (struct ac6_iter_state )))return -ENOMEM ;return 0 ;
net/ipv6/ip6_fib.c +1 -17
@@ -2209,15 +2209,6 @@ void fib6_gc_cleanup(void) }#ifdef CONFIG_PROC_FS - -struct ipv6_route_iter { -struct seq_net_private p; -struct fib6_walker w; -loff_t skip; -struct fib6_table *tbl; -int sernum; -}; -static int ipv6_route_seq_show (struct seq_file *seq,void *v) {struct rt6_info *rt = v;
@@ -2383,17 +2374,10 @@ static void ipv6_route_seq_stop(struct seq_file *seq, void *v) rcu_read_unlock_bh(); } -static const struct seq_operations ipv6_route_seq_ops = { +const struct seq_operations ipv6_route_seq_ops = { .start = ipv6_route_seq_start, .next = ipv6_route_seq_next, .stop = ipv6_route_seq_stop, .show = ipv6_route_seq_show }; - -int ipv6_route_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ipv6_route_seq_ops, -sizeof (struct ipv6_route_iter )); -} -#endif /* CONFIG_PROC_FS */
net/ipv6/ip6_flowlabel.c +2 -15
@@ -811,23 +811,10 @@ static const struct seq_operations ip6fl_seq_ops = { .show = ip6fl_seq_show, }; -static int ip6fl_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ip6fl_seq_ops, -sizeof (struct ip6fl_iter_state )); -} - -static const struct file_operations ip6fl_seq_fops = { - .open = ip6fl_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static int __net_init ip6_flowlabel_proc_init (struct net *net) { -if (!proc_create ("ip6_flowlabel" ,0444 , net->proc_net, - &ip6fl_seq_fops)) +if (!proc_create_net ("ip6_flowlabel" ,0444 , net->proc_net, + &ip6fl_seq_ops,sizeof (struct ip6fl_iter_state )))return -ENOMEM ;return 0 ; }
net/ipv6/ip6mr.c +4 -28
@@ -439,19 +439,6 @@ static const struct seq_operations ip6mr_vif_seq_ops = { .show = ip6mr_vif_seq_show, }; -static int ip6mr_vif_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ip6mr_vif_seq_ops, -sizeof (struct mr_vif_iter )); -} - -static const struct file_operations ip6mr_vif_fops = { - .open = ip6mr_vif_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static void *ipmr_mfc_seq_start (struct seq_file *seq,loff_t *pos) {struct net *net =seq_file_net (seq);
@@ -512,19 +499,6 @@ static const struct seq_operations ipmr_mfc_seq_ops = { .stop = mr_mfc_seq_stop, .show = ipmr_mfc_seq_show, }; - -static int ipmr_mfc_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ipmr_mfc_seq_ops, -sizeof (struct mr_mfc_iter )); -} - -static const struct file_operations ip6mr_mfc_fops = { - .open = ipmr_mfc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -};#endif #ifdef CONFIG_IPV6_PIMSM_V2
@@ -1316,9 +1290,11 @@ static int __net_init ip6mr_net_init(struct net *net)#ifdef CONFIG_PROC_FS err = -ENOMEM ; -if (!proc_create ("ip6_mr_vif" ,0 , net->proc_net, &ip6mr_vif_fops)) +if (!proc_create_net ("ip6_mr_vif" ,0 , net->proc_net, &ip6mr_vif_seq_ops, +sizeof (struct mr_vif_iter ))) goto proc_vif_fail; -if (!proc_create ("ip6_mr_cache" ,0 , net->proc_net, &ip6mr_mfc_fops)) +if (!proc_create_net ("ip6_mr_cache" ,0 , net->proc_net, &ipmr_mfc_seq_ops, +sizeof (struct mr_mfc_iter ))) goto proc_cache_fail;#endif
net/ipv6/mcast.c +5 -29
@@ -2749,19 +2749,6 @@ static const struct seq_operations igmp6_mc_seq_ops = { .show = igmp6_mc_seq_show, }; -static int igmp6_mc_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &igmp6_mc_seq_ops, -sizeof (struct igmp6_mc_iter_state )); -} - -static const struct file_operations igmp6_mc_seq_fops = { - .open = igmp6_mc_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -struct igmp6_mcf_iter_state {struct seq_net_private p;struct net_device *dev;
@@ -2903,28 +2890,17 @@ static const struct seq_operations igmp6_mcf_seq_ops = { .show = igmp6_mcf_seq_show, }; -static int igmp6_mcf_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &igmp6_mcf_seq_ops, -sizeof (struct igmp6_mcf_iter_state )); -} - -static const struct file_operations igmp6_mcf_seq_fops = { - .open = igmp6_mcf_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static int __net_init igmp6_proc_init (struct net *net) {int err; err = -ENOMEM ; -if (!proc_create ("igmp6" ,0444 , net->proc_net, &igmp6_mc_seq_fops)) +if (!proc_create_net ("igmp6" ,0444 , net->proc_net, &igmp6_mc_seq_ops, +sizeof (struct igmp6_mc_iter_state ))) goto out; -if (!proc_create ("mcfilter6" ,0444 , net->proc_net, - &igmp6_mcf_seq_fops)) +if (!proc_create_net ("mcfilter6" ,0444 , net->proc_net, + &igmp6_mcf_seq_ops, +sizeof (struct igmp6_mcf_iter_state ))) goto out_proc_net_igmp6; err =0 ;
net/ipv6/ping.c +2 -14
@@ -223,22 +223,10 @@ static const struct seq_operations ping_v6_seq_ops = { .stop = ping_seq_stop, }; -static int ping_v6_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ping_v6_seq_ops, -sizeof (struct ping_iter_state )); -} - -const struct file_operations ping_v6_seq_fops = { - .open = ping_v6_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static int __net_init ping_v6_proc_init_net (struct net *net) { -if (!proc_create ("icmp6" ,0444 , net->proc_net, &ping_v6_seq_fops)) +if (!proc_create_net ("icmp6" ,0444 , net->proc_net, &ping_v6_seq_ops, +sizeof (struct ping_iter_state )))return -ENOMEM ;return 0 ; }
net/ipv6/raw.c +2 -15
@@ -1304,23 +1304,10 @@ static const struct seq_operations raw6_seq_ops = { .show = raw6_seq_show, }; -static int raw6_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &raw6_seq_ops, -sizeof (struct raw_iter_state )); -} - -static const struct file_operations raw6_seq_fops = { - .open = raw6_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static int __net_init raw6_init_net (struct net *net) { -if (!proc_create_data ("raw6" ,0444 , net->proc_net, &raw6_seq_fops, - &raw_v6_hashinfo)) +if (!proc_create_net_data ("raw6" ,0444 , net->proc_net, &raw6_seq_ops, +sizeof (struct raw_iter_state ), &raw_v6_hashinfo))return -ENOMEM ;return 0 ;
net/ipv6/route.c +2 -9
@@ -4855,14 +4855,6 @@ static int ip6_route_dev_notify(struct notifier_block *this,*/ #ifdef CONFIG_PROC_FS - -static const struct file_operations ipv6_route_proc_fops = { - .open = ipv6_route_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static int rt6_stats_seq_show (struct seq_file *seq,void *v) {struct net *net = (struct net *)seq->private;
@@ -5093,7 +5085,8 @@ static void __net_exit ip6_route_net_exit(struct net *net)static int __net_init ip6_route_net_init_late (struct net *net) {#ifdef CONFIG_PROC_FS -proc_create ("ipv6_route" ,0 , net->proc_net, &ipv6_route_proc_fops); +proc_create_net ("ipv6_route" ,0 , net->proc_net, &ipv6_route_seq_ops, +sizeof (struct ipv6_route_iter ));proc_create ("rt6_stats" ,0444 , net->proc_net, &rt6_stats_seq_fops);#endif return 0 ;
net/ipv6/tcp_ipv6.c +2 -15
@@ -1916,27 +1916,14 @@ static const struct seq_operations tcp6_seq_ops = { .stop = tcp_seq_stop, }; -static int tcp6_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &tcp6_seq_ops, -sizeof (struct tcp_iter_state )); -} - -static const struct file_operations tcp6_afinfo_seq_fops = { - .open = tcp6_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net -}; -static struct tcp_seq_afinfo tcp6_seq_afinfo = { .family =AF_INET6 , };int __net_init tcp6_proc_init (struct net *net) { -if (!proc_create_data ("tcp6" ,0444 , net->proc_net, - &tcp6_afinfo_seq_fops, &tcp6_seq_afinfo)) +if (!proc_create_net_data ("tcp6" ,0444 , net->proc_net, &tcp6_seq_ops, +sizeof (struct tcp_iter_state ), &tcp6_seq_afinfo))return -ENOMEM ;return 0 ; }
net/ipv6/udp.c +4 -17
@@ -1480,26 +1480,13 @@ int udp6_seq_show(struct seq_file *seq, void *v)return 0 ; } -static const struct seq_operations udp6_seq_ops = { +const struct seq_operations udp6_seq_ops = { .start = udp_seq_start, .next = udp_seq_next, .stop = udp_seq_stop, .show = udp6_seq_show, }; - -static int udp6_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &udp6_seq_ops, -sizeof (struct udp_iter_state )); -} - -const struct file_operations udp6_afinfo_seq_fops = { - .open = udp6_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net -}; -EXPORT_SYMBOL (udp6_afinfo_seq_fops); +EXPORT_SYMBOL (udp6_seq_ops);static struct udp_seq_afinfo udp6_seq_afinfo = { .family =AF_INET6 ,
@@ -1508,8 +1495,8 @@ static struct udp_seq_afinfo udp6_seq_afinfo = {int __net_init udp6_proc_init (struct net *net) { -if (!proc_create_data ("udp6" ,0444 , net->proc_net, - &udp6_afinfo_seq_fops, &udp6_seq_afinfo)) +if (!proc_create_net_data ("udp6" ,0444 , net->proc_net, &udp6_seq_ops, +sizeof (struct udp_iter_state ), &udp6_seq_afinfo))return -ENOMEM ;return 0 ; }
net/ipv6/udplite.c +3 -2
@@ -100,8 +100,9 @@ static struct udp_seq_afinfo udplite6_seq_afinfo = {static int __net_init udplite6_proc_init_net (struct net *net) { -if (!proc_create_data ("udplite6" ,0444 , net->proc_net, - &udp6_afinfo_seq_fops, &udplite6_seq_afinfo)) +if (!proc_create_net_data ("udplite6" ,0444 , net->proc_net, + &udp6_seq_ops,sizeof (struct udp_iter_state ), + &udplite6_seq_afinfo))return -ENOMEM ;return 0 ; }
net/kcm/kcmproc.c +2 -14
@@ -239,19 +239,6 @@ static const struct seq_operations kcm_seq_ops = { .stop = kcm_seq_stop, }; -static int kcm_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &kcm_seq_ops, -sizeof (struct kcm_proc_mux_state )); -} - -static const struct file_operations kcm_seq_fops = { - .open = kcm_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static int kcm_stats_seq_show (struct seq_file *seq,void *v) {struct kcm_psock_stats psock_stats;
@@ -376,7 +363,8 @@ static int kcm_proc_init_net(struct net *net) &kcm_stats_seq_fops)) goto out_kcm_stats; -if (!proc_create ("kcm" ,0444 , net->proc_net, &kcm_seq_fops)) +if (!proc_create_net ("kcm" ,0444 , net->proc_net, &kcm_seq_ops, +sizeof (struct kcm_proc_mux_state ))) goto out_kcm;return 0 ;
net/key/af_key.c +2 -14
@@ -3787,24 +3787,12 @@ static const struct seq_operations pfkey_seq_ops = { .show = pfkey_seq_show, }; -static int pfkey_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &pfkey_seq_ops, -sizeof (struct seq_net_private )); -} - -static const struct file_operations pfkey_proc_ops = { - .open = pfkey_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static int __net_init pfkey_init_proc (struct net *net) {struct proc_dir_entry *e; - e =proc_create ("pfkey" ,0 , net->proc_net, &pfkey_proc_ops); + e =proc_create_net ("pfkey" ,0 , net->proc_net, &pfkey_seq_ops, +sizeof (struct seq_net_private ));if (e ==NULL )return -ENOMEM ;
net/l2tp/l2tp_ppp.c +2 -20
@@ -1722,24 +1722,6 @@ static const struct seq_operations pppol2tp_seq_ops = { .stop = pppol2tp_seq_stop, .show = pppol2tp_seq_show, }; - -/* Called when our /proc file is opened. We allocate data for use when -* iterating our tunnel / session contexts and store it in the private -* data of the seq_file. -*/ -static int pppol2tp_proc_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &pppol2tp_seq_ops, -sizeof (struct pppol2tp_seq_data )); -} - -static const struct file_operations pppol2tp_proc_fops = { - .open = pppol2tp_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -#endif /* CONFIG_PROC_FS */ /*****************************************************************************
@@ -1751,8 +1733,8 @@ static __net_init int pppol2tp_init_net(struct net *net)struct proc_dir_entry *pde;int err =0 ; - pde =proc_create ("pppol2tp" ,0444 , net->proc_net, - &pppol2tp_proc_fops); + pde =proc_create_net ("pppol2tp" ,0444 , net->proc_net, + &pppol2tp_seq_ops,sizeof (struct pppol2tp_seq_data ));if (!pde) { err = -ENOMEM ; goto out;
net/netfilter/ipvs/ip_vs_app.c +2 -14
@@ -587,25 +587,13 @@ static const struct seq_operations ip_vs_app_seq_ops = { .stop = ip_vs_app_seq_stop, .show = ip_vs_app_seq_show, }; - -static int ip_vs_app_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ip_vs_app_seq_ops, -sizeof (struct seq_net_private )); -} - -static const struct file_operations ip_vs_app_fops = { - .open = ip_vs_app_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -};#endif int __net_init ip_vs_app_net_init (struct netns_ipvs *ipvs) {INIT_LIST_HEAD (&ipvs->app_list); -proc_create ("ip_vs_app" ,0 , ipvs->net->proc_net, &ip_vs_app_fops); +proc_create_net ("ip_vs_app" ,0 , ipvs->net->proc_net, &ip_vs_app_seq_ops, +sizeof (struct seq_net_private ));return 0 ; }
net/netfilter/ipvs/ip_vs_conn.c +5 -30
@@ -1136,19 +1136,6 @@ static const struct seq_operations ip_vs_conn_seq_ops = { .show = ip_vs_conn_seq_show, }; -static int ip_vs_conn_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ip_vs_conn_seq_ops, -sizeof (struct ip_vs_iter_state )); -} - -static const struct file_operations ip_vs_conn_fops = { - .open = ip_vs_conn_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static const char *ip_vs_origin_name (unsigned int flags) {if (flags &IP_VS_CONN_F_SYNC )
@@ -1212,20 +1199,6 @@ static const struct seq_operations ip_vs_conn_sync_seq_ops = { .stop = ip_vs_conn_seq_stop, .show = ip_vs_conn_sync_seq_show, }; - -static int ip_vs_conn_sync_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ip_vs_conn_sync_seq_ops, -sizeof (struct ip_vs_iter_state )); -} - -static const struct file_operations ip_vs_conn_sync_fops = { - .open = ip_vs_conn_sync_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -#endif
@@ -1385,9 +1358,11 @@ int __net_init ip_vs_conn_net_init(struct netns_ipvs *ipvs) {atomic_set (&ipvs->conn_count,0 ); -proc_create ("ip_vs_conn" ,0 , ipvs->net->proc_net, &ip_vs_conn_fops); -proc_create ("ip_vs_conn_sync" ,0 , ipvs->net->proc_net, - &ip_vs_conn_sync_fops); +proc_create_net ("ip_vs_conn" ,0 , ipvs->net->proc_net, + &ip_vs_conn_seq_ops,sizeof (struct ip_vs_iter_state )); +proc_create_net ("ip_vs_conn_sync" ,0 , ipvs->net->proc_net, + &ip_vs_conn_sync_seq_ops, +sizeof (struct ip_vs_iter_state ));return 0 ; }
net/netfilter/ipvs/ip_vs_ctl.c +2 -14
@@ -2109,19 +2109,6 @@ static const struct seq_operations ip_vs_info_seq_ops = { .show = ip_vs_info_seq_show, }; -static int ip_vs_info_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ip_vs_info_seq_ops, -sizeof (struct ip_vs_iter )); -} - -static const struct file_operations ip_vs_info_fops = { - .open = ip_vs_info_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static int ip_vs_stats_show (struct seq_file *seq,void *v) {struct net *net =seq_file_single_net (seq);
@@ -4038,7 +4025,8 @@ int __net_init ip_vs_control_net_init(struct netns_ipvs *ipvs)spin_lock_init (&ipvs->tot_stats.lock); -proc_create ("ip_vs" ,0 , ipvs->net->proc_net, &ip_vs_info_fops); +proc_create_net ("ip_vs" ,0 , ipvs->net->proc_net, &ip_vs_info_seq_ops, +sizeof (struct ip_vs_iter ));proc_create ("ip_vs_stats" ,0 , ipvs->net->proc_net, &ip_vs_stats_fops);proc_create ("ip_vs_stats_percpu" ,0 , ipvs->net->proc_net, &ip_vs_stats_percpu_fops);
net/netfilter/nf_conntrack_expect.c +2 -15
@@ -641,19 +641,6 @@ static const struct seq_operations exp_seq_ops = { .stop = exp_seq_stop, .show = exp_seq_show }; - -static int exp_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &exp_seq_ops, -sizeof (struct ct_expect_iter_state )); -} - -static const struct file_operations exp_file_ops = { - .open = exp_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -};#endif /* CONFIG_NF_CONNTRACK_PROCFS */ static int exp_proc_init (struct net *net)
@@ -663,8 +650,8 @@ static int exp_proc_init(struct net *net)kuid_t root_uid;kgid_t root_gid; - proc =proc_create ("nf_conntrack_expect" ,0440 , net->proc_net, - &exp_file_ops); + proc =proc_create_net ("nf_conntrack_expect" ,0440 , net->proc_net, + &exp_seq_ops,sizeof (struct ct_expect_iter_state ));if (!proc)return -ENOMEM ;
net/netfilter/nf_conntrack_standalone.c +4 -29
@@ -375,19 +375,6 @@ static const struct seq_operations ct_seq_ops = { .show = ct_seq_show }; -static int ct_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ct_seq_ops, -sizeof (struct ct_iter_state )); -} - -static const struct file_operations ct_file_ops = { - .open = ct_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static void *ct_cpu_seq_start (struct seq_file *seq,loff_t *pos) {struct net *net =seq_file_net (seq);
@@ -467,26 +454,14 @@ static const struct seq_operations ct_cpu_seq_ops = { .show = ct_cpu_seq_show, }; -static int ct_cpu_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &ct_cpu_seq_ops, -sizeof (struct seq_net_private )); -} - -static const struct file_operations ct_cpu_seq_fops = { - .open = ct_cpu_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static int nf_conntrack_standalone_init_proc (struct net *net) {struct proc_dir_entry *pde;kuid_t root_uid;kgid_t root_gid; - pde =proc_create ("nf_conntrack" ,0440 , net->proc_net, &ct_file_ops); + pde =proc_create_net ("nf_conntrack" ,0440 , net->proc_net, &ct_seq_ops, +sizeof (struct ct_iter_state ));if (!pde) goto out_nf_conntrack;
@@ -495,8 +470,8 @@ static int nf_conntrack_standalone_init_proc(struct net *net)if (uid_valid (root_uid) &&gid_valid (root_gid))proc_set_user (pde, root_uid, root_gid); - pde =proc_create ("nf_conntrack" ,0444 , net->proc_net_stat, - &ct_cpu_seq_fops); + pde =proc_create_net ("nf_conntrack" ,0444 , net->proc_net_stat, + &ct_cpu_seq_ops,sizeof (struct seq_net_private ));if (!pde) goto out_stat_nf_conntrack;return 0 ;
net/netfilter/nf_log.c +2 -17
@@ -394,21 +394,6 @@ static const struct seq_operations nflog_seq_ops = { .stop = seq_stop, .show = seq_show, }; - -static int nflog_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &nflog_seq_ops, -sizeof (struct seq_net_private )); -} - -static const struct file_operations nflog_file_ops = { - .open = nflog_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; - -#endif /* PROC_FS */ #ifdef CONFIG_SYSCTL
@@ -549,8 +534,8 @@ static int __net_init nf_log_net_init(struct net *net)int ret = -ENOMEM ;#ifdef CONFIG_PROC_FS -if (!proc_create ("nf_log" ,0444 , - net->nf.proc_netfilter, &nflog_file_ops)) +if (!proc_create_net ("nf_log" ,0444 , net->nf.proc_netfilter, + &nflog_seq_ops,sizeof (struct seq_net_private )))return ret;#endif ret =netfilter_log_sysctl_init (net);
net/netfilter/nf_synproxy_core.c +2 -15
@@ -310,23 +310,10 @@ static const struct seq_operations synproxy_cpu_seq_ops = { .show = synproxy_cpu_seq_show, }; -static int synproxy_cpu_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &synproxy_cpu_seq_ops, -sizeof (struct seq_net_private )); -} - -static const struct file_operations synproxy_cpu_seq_fops = { - .open = synproxy_cpu_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -static int __net_init synproxy_proc_init (struct net *net) { -if (!proc_create ("synproxy" ,0444 , net->proc_net_stat, - &synproxy_cpu_seq_fops)) +if (!proc_create_net ("synproxy" ,0444 , net->proc_net_stat, + &synproxy_cpu_seq_ops,sizeof (struct seq_net_private )))return -ENOMEM ;return 0 ; }
net/netfilter/nfnetlink_log.c +2 -16
@@ -1046,20 +1046,6 @@ static const struct seq_operations nful_seq_ops = { .stop = seq_stop, .show = seq_show, }; - -static int nful_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &nful_seq_ops, -sizeof (struct iter_state )); -} - -static const struct file_operations nful_file_ops = { - .open = nful_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -#endif /* PROC_FS */ static int __net_init nfnl_log_net_init (struct net *net)
@@ -1077,8 +1063,8 @@ static int __net_init nfnl_log_net_init(struct net *net)spin_lock_init (&log->instances_lock);#ifdef CONFIG_PROC_FS - proc =proc_create ("nfnetlink_log" ,0440 , - net->nf.proc_netfilter, &nful_file_ops); + proc =proc_create_net ("nfnetlink_log" ,0440 , net->nf.proc_netfilter, + &nful_seq_ops,sizeof (struct iter_state ));if (!proc)return -ENOMEM ;
net/netfilter/nfnetlink_queue.c +2 -16
@@ -1469,20 +1469,6 @@ static const struct seq_operations nfqnl_seq_ops = { .stop = seq_stop, .show = seq_show, }; - -static int nfqnl_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &nfqnl_seq_ops, -sizeof (struct iter_state )); -} - -static const struct file_operations nfqnl_file_ops = { - .open = nfqnl_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -#endif /* PROC_FS */ static int __net_init nfnl_queue_net_init (struct net *net)
@@ -1496,8 +1482,8 @@ static int __net_init nfnl_queue_net_init(struct net *net)spin_lock_init (&q->instances_lock);#ifdef CONFIG_PROC_FS -if (!proc_create ("nfnetlink_queue" ,0440 , - net->nf.proc_netfilter, &nfqnl_file_ops)) +if (!proc_create_net ("nfnetlink_queue" ,0440 , net->nf.proc_netfilter, + &nfqnl_seq_ops,sizeof (struct iter_state )))return -ENOMEM ;#endif nf_register_queue_handler (net, &nfqh);
net/netfilter/x_tables.c +3 -15
@@ -1529,19 +1529,6 @@ static const struct seq_operations xt_table_seq_ops = { .show = xt_table_seq_show, }; -static int xt_table_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &xt_table_seq_ops, -sizeof (struct seq_net_private )); -} - -static const struct file_operations xt_table_ops = { - .open = xt_table_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -/* * Traverse state for ip{,6}_{tables,matches} for helping crossing * the multi-AF mutexes.
@@ -1790,8 +1777,9 @@ int xt_proto_init(struct net *net, u_int8_t af)strlcpy (buf, xt_prefix[af],sizeof (buf));strlcat (buf,FORMAT_TABLES ,sizeof (buf)); - proc =proc_create_data (buf,0440 , net->proc_net, &xt_table_ops, - (void *)(unsigned long )af); + proc =proc_create_net_data (buf,0440 , net->proc_net, &xt_table_seq_ops, +sizeof (struct seq_net_private ), + (void *)(unsigned long )af);if (!proc) goto out;if (uid_valid (root_uid) &&gid_valid (root_gid))
net/netlink/af_netlink.c +2 -16
@@ -2635,21 +2635,6 @@ static const struct seq_operations netlink_seq_ops = { .stop = netlink_seq_stop, .show = netlink_seq_show, }; - - -static int netlink_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &netlink_seq_ops, -sizeof (struct nl_seq_iter )); -} - -static const struct file_operations netlink_seq_fops = { - .open = netlink_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -#endif int netlink_register_notifier (struct notifier_block *nb)
@@ -2694,7 +2679,8 @@ static const struct net_proto_family netlink_family_ops = {static int __net_init netlink_net_init (struct net *net) {#ifdef CONFIG_PROC_FS -if (!proc_create ("netlink" ,0 , net->proc_net, &netlink_seq_fops)) +if (!proc_create_net ("netlink" ,0 , net->proc_net, &netlink_seq_ops, +sizeof (struct nl_seq_iter )))return -ENOMEM ;#endif return 0 ;
net/packet/af_packet.c +2 -15
@@ -4521,20 +4521,6 @@ static const struct seq_operations packet_seq_ops = { .stop = packet_seq_stop, .show = packet_seq_show, }; - -static int packet_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &packet_seq_ops, -sizeof (struct seq_net_private )); -} - -static const struct file_operations packet_seq_fops = { - .open = packet_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -#endif static int __net_init packet_net_init (struct net *net)
@@ -4542,7 +4528,8 @@ static int __net_init packet_net_init(struct net *net)mutex_init (&net->packet.sklist_lock);INIT_HLIST_HEAD (&net->packet.sklist); -if (!proc_create ("packet" ,0 , net->proc_net, &packet_seq_fops)) +if (!proc_create_net ("packet" ,0 , net->proc_net, &packet_seq_ops, +sizeof (struct seq_net_private )))return -ENOMEM ;return 0 ;
net/phonet/pn_dev.c +4 -2
@@ -320,7 +320,8 @@ static int __net_init phonet_init_net(struct net *net) {struct phonet_net *pnn =phonet_pernet (net); -if (!proc_create ("phonet" ,0 , net->proc_net, &pn_sock_seq_fops)) +if (!proc_create_net ("phonet" ,0 , net->proc_net, &pn_sock_seq_ops, +sizeof (struct seq_net_private )))return -ENOMEM ;INIT_LIST_HEAD (&pnn->pndevs.list);
@@ -351,7 +352,8 @@ int __init phonet_device_init(void)if (err)return err; -proc_create ("pnresource" ,0 , init_net.proc_net, &pn_res_seq_fops); +proc_create_net ("pnresource" ,0 , init_net.proc_net, &pn_res_seq_ops, +sizeof (struct seq_net_private ));register_netdevice_notifier (&phonet_device_notifier); err =phonet_netlink_register ();if (err)
net/phonet/socket.c +2 -28
@@ -620,25 +620,12 @@ static int pn_sock_seq_show(struct seq_file *seq, void *v)return 0 ; } -static const struct seq_operations pn_sock_seq_ops = { +const struct seq_operations pn_sock_seq_ops = { .start = pn_sock_seq_start, .next = pn_sock_seq_next, .stop = pn_sock_seq_stop, .show = pn_sock_seq_show, }; - -static int pn_sock_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &pn_sock_seq_ops, -sizeof (struct seq_net_private )); -} - -const struct file_operations pn_sock_seq_fops = { - .open = pn_sock_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -};#endif static struct {
@@ -802,23 +789,10 @@ static int pn_res_seq_show(struct seq_file *seq, void *v) return 0; } -static const struct seq_operations pn_res_seq_ops = { +const struct seq_operations pn_res_seq_ops = { .start = pn_res_seq_start, .next = pn_res_seq_next, .stop = pn_res_seq_stop, .show = pn_res_seq_show, }; - -static int pn_res_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &pn_res_seq_ops, -sizeof (struct seq_net_private )); -} - -const struct file_operations pn_res_seq_fops = { - .open = pn_res_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -};#endif
net/rxrpc/ar-internal.h +2 -2
@@ -1050,8 +1050,8 @@ void __rxrpc_queue_peer_error(struct rxrpc_peer *);/* * proc.c */ -extern const struct file_operations rxrpc_call_seq_fops; -extern const struct file_operations rxrpc_connection_seq_fops; +extern const struct seq_operations rxrpc_call_seq_ops; +extern const struct seq_operations rxrpc_connection_seq_ops;/* * recvmsg.c
net/rxrpc/net_ns.c +5 -2
@@ -97,8 +97,11 @@ static __net_init int rxrpc_init_net(struct net *net)if (!rxnet->proc_net) goto err_proc; -proc_create ("calls" ,0444 , rxnet->proc_net, &rxrpc_call_seq_fops); -proc_create ("conns" ,0444 , rxnet->proc_net, &rxrpc_connection_seq_fops); +proc_create_net ("calls" ,0444 , rxnet->proc_net, &rxrpc_call_seq_ops, +sizeof (struct seq_net_private )); +proc_create_net ("conns" ,0444 , rxnet->proc_net, + &rxrpc_connection_seq_ops, +sizeof (struct seq_net_private ));return 0 ; err_proc:
net/rxrpc/proc.c +2 -29
@@ -115,26 +115,13 @@ static int rxrpc_call_seq_show(struct seq_file *seq, void *v)return 0 ; } -static const struct seq_operations rxrpc_call_seq_ops = { +const struct seq_operations rxrpc_call_seq_ops = { .start = rxrpc_call_seq_start, .next = rxrpc_call_seq_next, .stop = rxrpc_call_seq_stop, .show = rxrpc_call_seq_show, }; -static int rxrpc_call_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &rxrpc_call_seq_ops, -sizeof (struct seq_net_private )); -} - -const struct file_operations rxrpc_call_seq_fops = { - .open = rxrpc_call_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -/* * generate a list of extant virtual connections in /proc/net/rxrpc_conns */
@@ -207,23 +194,9 @@ static int rxrpc_connection_seq_show(struct seq_file *seq, void *v)return 0 ; } -static const struct seq_operations rxrpc_connection_seq_ops = { +const struct seq_operations rxrpc_connection_seq_ops = { .start = rxrpc_connection_seq_start, .next = rxrpc_connection_seq_next, .stop = rxrpc_connection_seq_stop, .show = rxrpc_connection_seq_show, }; - - -static int rxrpc_connection_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &rxrpc_connection_seq_ops, -sizeof (struct seq_net_private )); -} - -const struct file_operations rxrpc_connection_seq_fops = { - .open = rxrpc_connection_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -};
net/sctp/proc.c +6 -48
80 lines not on this page · raw message
net/unix/af_unix.c +2 -15
@@ -2852,20 +2852,6 @@ static const struct seq_operations unix_seq_ops = { .stop = unix_seq_stop, .show = unix_seq_show, }; - -static int unix_seq_open (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &unix_seq_ops, -sizeof (struct seq_net_private )); -} - -static const struct file_operations unix_seq_fops = { - .open = unix_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -#endif static const struct net_proto_family unix_family_ops = {
@@ -2884,7 +2870,8 @@ static int __net_init unix_net_init(struct net *net) goto out;#ifdef CONFIG_PROC_FS -if (!proc_create ("unix" ,0 , net->proc_net, &unix_seq_fops)) { +if (!proc_create_net ("unix" ,0 , net->proc_net, &unix_seq_ops, +sizeof (struct seq_net_private ))) {unix_sysctl_unregister (net); goto out; }
net/wireless/wext-proc.c +2 -15
@@ -126,24 +126,11 @@ static const struct seq_operations wireless_seq_ops = { .show = wireless_dev_seq_show, }; -static int seq_open_wireless (struct inode *inode,struct file *file) -{ -return seq_open_net (inode, file, &wireless_seq_ops, -sizeof (struct seq_net_private )); -} - -static const struct file_operations wireless_seq_fops = { - .open = seq_open_wireless, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; -int __net_init wext_proc_init (struct net *net) {/* Create /proc/net/wireless entry */ -if (!proc_create ("wireless" ,0444 , net->proc_net, - &wireless_seq_fops)) +if (!proc_create_net ("wireless" ,0444 , net->proc_net, + &wireless_seq_ops,sizeof (struct seq_net_private )))return -ENOMEM ;return 0 ;
Signature · 1 line
2.17.0
PATCH 14/39 proc: introduce proc_create_net_single
In reply to Christoph HellwigVariant of proc_create_data that directly take a seq_file show callback and deals with network namespaces in ->open and ->release. All callers of proc_create + single_open_net converted over, and single_{open,release}_net are removed entirely.
--- fs/proc/proc_net.c | 47 +++++++----- include/linux/proc_fs.h | 4 ++ include/linux/seq_file_net.h | 7 +- net/can/bcm.c | 16 +---- net/can/proc.c | 127 ++++++--------------------------- net/ipv4/fib_trie.c | 16 +---- net/ipv4/proc.c | 48 ++----------- net/ipv6/proc.c | 31 ++------ net/ipv6/route.c | 15 +--- net/kcm/kcmproc.c | 16 +---- net/netfilter/ipvs/ip_vs_ctl.c | 31 ++------ net/sctp/proc.c | 17 +---- net/xfrm/xfrm_proc.c | 16 +---- 13 files changed, 84 insertions(+), 307 deletions(-)
fs/proc/proc_net.c +29 -18
@@ -93,37 +93,48 @@ struct proc_dir_entry *proc_create_net_data(const char *name, umode_t mode, }EXPORT_SYMBOL_GPL (proc_create_net_data); -int single_open_net (struct inode *inode,struct file *file, -int (*show)(struct seq_file *,void *)) +static int single_open_net (struct inode *inode,struct file *file) { -int err; +struct proc_dir_entry *de =PDE (inode);struct net *net; +int err; - err = -ENXIO ; net =get_proc_net (inode); -if (net ==NULL ) - goto err_net; - - err =single_open (file, show, net); -if (err <0 ) - goto err_open; - -return 0 ; +if (!net) +return -ENXIO ; -err_open: -put_net (net); -err_net: + err =single_open (file, de->single_show, net); +if (err) +put_net (net);return err; } -EXPORT_SYMBOL_GPL (single_open_net); -int single_release_net (struct inode *ino,struct file *f) +static int single_release_net (struct inode *ino,struct file *f) {struct seq_file *seq = f->private_data;put_net (seq->private);return single_release (ino, f); } -EXPORT_SYMBOL_GPL (single_release_net); + +static const struct file_operations proc_net_single_fops = { + .open = single_open_net, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release_net, +}; + +struct proc_dir_entry *proc_create_net_single (const char *name,umode_t mode, +struct proc_dir_entry *parent, +int (*show)(struct seq_file *,void *),void *data) +{ +struct proc_dir_entry *p; + + p =proc_create_data (name, mode, parent, &proc_net_single_fops, data); +if (p) + p->single_show = show; +return p; +} +EXPORT_SYMBOL_GPL (proc_create_net_single);static struct net *get_proc_task_net (struct inode *dir) {
include/linux/proc_fs.h +4 -0
@@ -58,6 +58,9 @@ struct proc_dir_entry *proc_create_net_data(const char *name, umode_t mode, size_t state_size, void *data);#define proc_create_net (name, mode, parent, state_size, ops) \ proc_create_net_data(name, mode, parent, state_size, ops, NULL) +struct proc_dir_entry *proc_create_net_single (const char *name,umode_t mode, +struct proc_dir_entry *parent, +int (*show)(struct seq_file *,void *),void *data);#else /* CONFIG_PROC_FS */
@@ -97,6 +100,7 @@ static inline int remove_proc_subtree(const char *name, struct proc_dir_entry *p#define proc_create_net_data (name, mode, parent, ops, state_size, data) ({NULL;})#define proc_create_net (name, mode, parent, state_size, ops) ({NULL;}) +#define proc_create_net_single (name, mode, parent, show, data) ({NULL;})#endif /* CONFIG_PROC_FS */
include/linux/seq_file_net.h +2 -5
@@ -13,9 +13,6 @@ struct seq_net_private {#endif }; -int single_open_net (struct inode *,struct file *file, -int (*show)(struct seq_file *,void *)); -int single_release_net (struct inode *,struct file *);static inline struct net *seq_file_net (struct seq_file *seq) {#ifdef CONFIG_NET_NS
@@ -26,8 +23,8 @@ static inline struct net *seq_file_net(struct seq_file *seq) }/* -* This one is needed for single_open_net since net is stored directly in -* private not as a struct i.e. seq_file_net can't be used. +* This one is needed for proc_create_net_single since net is stored directly +* in private not as a struct i.e. seq_file_net can't be used. */ static inline struct net *seq_file_single_net (struct seq_file *seq) {
net/can/bcm.c +2 -14
@@ -239,18 +239,6 @@ static int bcm_proc_show(struct seq_file *m, void *v)seq_putc (m,'\n' ); return 0; } - -static int bcm_proc_open (struct inode *inode,struct file *file) -{ -return single_open_net (inode, file, bcm_proc_show); -} - -static const struct file_operations bcm_proc_fops = { - .open = bcm_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release_net, -};#endif /* CONFIG_PROC_FS */ /*
@@ -1606,9 +1594,9 @@ static int bcm_connect(struct socket *sock, struct sockaddr *uaddr, int len,if (net->can.bcmproc_dir) {/* unique socket address as filename */ sprintf (bo->procname,"%lu" ,sock_i_ino (sk)); - bo->bcm_proc_read =proc_create_data (bo->procname,0644 , + bo->bcm_proc_read =proc_create_net_single (bo->procname,0644 , net->can.bcmproc_dir, - &bcm_proc_fops, sk); + bcm_proc_show, sk);if (!bo->bcm_proc_read) { ret = -ENOMEM ; goto fail;
net/can/proc.c +23 -104
169 lines not on this page · raw message
net/ipv4/fib_trie.c +2 -14
@@ -2348,18 +2348,6 @@ static int fib_triestat_seq_show(struct seq_file *seq, void *v)return 0 ; } -static int fib_triestat_seq_open (struct inode *inode,struct file *file) -{ -return single_open_net (inode, file, fib_triestat_seq_show); -} - -static const struct file_operations fib_triestat_fops = { - .open = fib_triestat_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release_net, -}; -static struct key_vector *fib_trie_get_idx (struct seq_file *seq,loff_t pos) {struct fib_trie_iter *iter = seq->private;
@@ -2719,8 +2707,8 @@ int __net_init fib_proc_init(struct net *net) sizeof(struct fib_trie_iter))) goto out1; -if (!proc_create ("fib_triestat" ,0444 , net->proc_net, - &fib_triestat_fops)) +if (!proc_create_net_single ("fib_triestat" ,0444 , net->proc_net, + fib_triestat_seq_show,NULL )) goto out2; if (!proc_create_net("route", 0444, net->proc_net, &fib_route_seq_ops,
net/ipv4/proc.c +6 -42
70 lines not on this page · raw message
net/ipv6/proc.c +4 -27
@@ -53,18 +53,6 @@ static int sockstat6_seq_show(struct seq_file *seq, void *v)return 0 ; } -static int sockstat6_seq_open (struct inode *inode,struct file *file) -{ -return single_open_net (inode, file, sockstat6_seq_show); -} - -static const struct file_operations sockstat6_seq_fops = { - .open = sockstat6_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release_net, -}; -static const struct snmp_mib snmp6_ipstats_list[] = {/* ipv6 mib according to RFC 2465 */ SNMP_MIB_ITEM ("Ip6InReceives" ,IPSTATS_MIB_INPKTS ),
@@ -242,18 +230,6 @@ static int snmp6_seq_show(struct seq_file *seq, void *v)return 0 ; } -static int snmp6_seq_open (struct inode *inode,struct file *file) -{ -return single_open_net (inode, file, snmp6_seq_show); -} - -static const struct file_operations snmp6_seq_fops = { - .open = snmp6_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release_net, -}; -static int snmp6_dev_seq_show (struct seq_file *seq,void *v) {struct inet6_dev *idev = (struct inet6_dev *)seq->private;
@@ -302,11 +278,12 @@ int snmp6_unregister_dev(struct inet6_dev *idev)static int __net_init ipv6_proc_init_net (struct net *net) { -if (!proc_create ("sockstat6" ,0444 , net->proc_net, - &sockstat6_seq_fops)) +if (!proc_create_net_single ("sockstat6" ,0444 , net->proc_net, + sockstat6_seq_show,NULL ))return -ENOMEM ; -if (!proc_create ("snmp6" ,0444 , net->proc_net, &snmp6_seq_fops)) +if (!proc_create_net_single ("snmp6" ,0444 , net->proc_net, + snmp6_seq_show,NULL )) goto proc_snmp6_fail; net->mib.proc_net_devsnmp6 =proc_mkdir ("dev_snmp6" , net->proc_net);
net/ipv6/route.c +2 -13
@@ -4869,18 +4869,6 @@ static int rt6_stats_seq_show(struct seq_file *seq, void *v) return 0; } - -static int rt6_stats_seq_open (struct inode *inode,struct file *file) -{ -return single_open_net (inode, file, rt6_stats_seq_show); -} - -static const struct file_operations rt6_stats_seq_fops = { - .open = rt6_stats_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release_net, -};#endif /* CONFIG_PROC_FS */ #ifdef CONFIG_SYSCTL
@@ -5087,7 +5075,8 @@ static int __net_init ip6_route_net_init_late(struct net *net)#ifdef CONFIG_PROC_FS proc_create_net ("ipv6_route" ,0 , net->proc_net, &ipv6_route_seq_ops,sizeof (struct ipv6_route_iter )); -proc_create ("rt6_stats" ,0444 , net->proc_net, &rt6_stats_seq_fops); +proc_create_net_single ("rt6_stats" ,0444 , net->proc_net, + rt6_stats_seq_show,NULL );#endif return 0 ; }
net/kcm/kcmproc.c +2 -14
@@ -345,22 +345,10 @@ static int kcm_stats_seq_show(struct seq_file *seq, void *v)return 0 ; } -static int kcm_stats_seq_open (struct inode *inode,struct file *file) -{ -return single_open_net (inode, file, kcm_stats_seq_show); -} - -static const struct file_operations kcm_stats_seq_fops = { - .open = kcm_stats_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release_net, -}; - static int kcm_proc_init_net(struct net *net) { - if (!proc_create("kcm_stats", 0444, net->proc_net, - &kcm_stats_seq_fops)) + if (!proc_create_net_single("kcm_stats", 0444, net->proc_net, + kcm_stats_seq_show, NULL)) goto out_kcm_stats; if (!proc_create_net("kcm", 0444, net->proc_net, &kcm_seq_ops,
net/netfilter/ipvs/ip_vs_ctl.c +4 -27
@@ -2141,18 +2141,6 @@ static int ip_vs_stats_show(struct seq_file *seq, void *v)return 0 ; } -static int ip_vs_stats_seq_open (struct inode *inode,struct file *file) -{ -return single_open_net (inode, file, ip_vs_stats_show); -} - -static const struct file_operations ip_vs_stats_fops = { - .open = ip_vs_stats_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release_net, -}; -static int ip_vs_stats_percpu_show (struct seq_file *seq,void *v) {struct net *net =seq_file_single_net (seq);
@@ -2208,18 +2196,6 @@ static int ip_vs_stats_percpu_show(struct seq_file *seq, void *v) return 0; } - -static int ip_vs_stats_percpu_seq_open (struct inode *inode,struct file *file) -{ -return single_open_net (inode, file, ip_vs_stats_percpu_show); -} - -static const struct file_operations ip_vs_stats_percpu_fops = { - .open = ip_vs_stats_percpu_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release_net, -};#endif /*
@@ -4027,9 +4003,10 @@ int __net_init ip_vs_control_net_init(struct netns_ipvs *ipvs)proc_create_net ("ip_vs" ,0 , ipvs->net->proc_net, &ip_vs_info_seq_ops,sizeof (struct ip_vs_iter )); -proc_create ("ip_vs_stats" ,0 , ipvs->net->proc_net, &ip_vs_stats_fops); -proc_create ("ip_vs_stats_percpu" ,0 , ipvs->net->proc_net, - &ip_vs_stats_percpu_fops); +proc_create_net_single ("ip_vs_stats" ,0 , ipvs->net->proc_net, + ip_vs_stats_show,NULL ); +proc_create_net_single ("ip_vs_stats_percpu" ,0 , ipvs->net->proc_net, + ip_vs_stats_percpu_show,NULL );if (ip_vs_control_net_init_sysctl (ipvs)) goto err;
net/sctp/proc.c +2 -15
@@ -88,19 +88,6 @@ static int sctp_snmp_seq_show(struct seq_file *seq, void *v)return 0 ; } -/* Initialize the seq file operations for 'snmp' object. */ -static int sctp_snmp_seq_open (struct inode *inode,struct file *file) -{ -return single_open_net (inode, file, sctp_snmp_seq_show); -} - -static const struct file_operations sctp_snmp_seq_fops = { - .open = sctp_snmp_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release_net, -}; -/* Dump local addresses of an association/endpoint. */ static void sctp_seq_dump_local_addrs (struct seq_file *seq,struct sctp_ep_common *epb) {
@@ -408,8 +395,8 @@ int __net_init sctp_proc_init(struct net *net) net->sctp.proc_net_sctp =proc_net_mkdir (net,"sctp" , net->proc_net);if (!net->sctp.proc_net_sctp)return -ENOMEM ; -if (!proc_create ("snmp" ,0444 , net->sctp.proc_net_sctp, - &sctp_snmp_seq_fops)) +if (!proc_create_net_single ("snmp" ,0444 , net->sctp.proc_net_sctp, + sctp_snmp_seq_show,NULL )) goto cleanup;if (!proc_create_net ("eps" ,0444 , net->sctp.proc_net_sctp, &sctp_eps_ops,sizeof (struct seq_net_private )))
net/xfrm/xfrm_proc.c +2 -14
@@ -65,22 +65,10 @@ static int xfrm_statistics_seq_show(struct seq_file *seq, void *v)return 0 ; } -static int xfrm_statistics_seq_open (struct inode *inode,struct file *file) -{ -return single_open_net (inode, file, xfrm_statistics_seq_show); -} - -static const struct file_operations xfrm_statistics_seq_fops = { - .open = xfrm_statistics_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release_net, -}; -int __net_init xfrm_proc_init (struct net *net) { -if (!proc_create ("xfrm_stat" ,0444 , net->proc_net, - &xfrm_statistics_seq_fops)) +if (!proc_create_net_single ("xfrm_stat" ,0444 , net->proc_net, + xfrm_statistics_seq_show,NULL ))return -ENOMEM ;return 0 ; }
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Re: [PATCH 14/39] proc: introduce proc_create_net_single
fs/proc/proc_net.c struct proc_dir_entry *proc_create_net_data(const char *name, umode_t mode, · line 136
Quoted 13 lines · Christoph Hellwig
Variant of
proc_create_datathat directly take aseq_fileshowfs/proc/proc_net.c +11
-0+struct proc_dir_entry *proc_create_net_single (const char *name,umode_t mode, +struct proc_dir_entry *parent, +int (*show)(struct seq_file *,void *),void *data) +{ +struct proc_dir_entry *p; + + p =proc_create_data (name, mode, parent, &proc_net_single_fops, data); +if (p) + p->single_show = show; +return p; +}
Ditto, should be oopsable.
PATCH 15/39 acpi/battery: simplify procfs code
In reply to Christoph HellwigUse remove_proc_subtree to remove the whole subtree on cleanup, and unwind the registration loop into individual calls. Switch to use proc_create_seq where applicable.
--- drivers/acpi/battery.c | 121 +++++++++-------------------------------- 1 file changed, 26 insertions(+), 95 deletions(-)
drivers/acpi/battery.c +26 -95
@@ -81,14 +81,6 @@ MODULE_PARM_DESC(cache_time, "cache time in milliseconds");#ifdef CONFIG_ACPI_PROCFS_POWER extern struct proc_dir_entry *acpi_lock_battery_dir (void );extern void *acpi_unlock_battery_dir (struct proc_dir_entry *acpi_battery_dir); - -enum acpi_battery_files { - info_tag =0 , - state_tag, - alarm_tag, -ACPI_BATTERY_NUMFILES , -}; -#endif static const struct acpi_device_id battery_device_ids[] = {
@@ -985,9 +977,10 @@ static const char *acpi_battery_units(const struct acpi_battery *battery) "mA" : "mW"; } -static int acpi_battery_print_info (struct seq_file *seq,int result) +static int acpi_battery_info_proc_show (struct seq_file *seq,void *offset) {struct acpi_battery *battery = seq->private; +int result =acpi_battery_update (battery, false);if (result) goto end;
@@ -1041,9 +1034,10 @@ static int acpi_battery_print_info(struct seq_file *seq, int result)return result; } -static int acpi_battery_print_state (struct seq_file *seq,int result) +static int acpi_battery_state_proc_show (struct seq_file *seq,void *offset) {struct acpi_battery *battery = seq->private; +int result =acpi_battery_update (battery, false);if (result) goto end;
@@ -1088,9 +1082,10 @@ static int acpi_battery_print_state(struct seq_file *seq, int result)return result; } -static int acpi_battery_print_alarm (struct seq_file *seq,int result) +static int acpi_battery_alarm_proc_show (struct seq_file *seq,void *offset) {struct acpi_battery *battery = seq->private; +int result =acpi_battery_update (battery, false);if (result) goto end;
@@ -1142,82 +1137,22 @@ static ssize_t acpi_battery_write_alarm(struct file *file,return result; } -typedef int (*print_func )(struct seq_file *seq,int result); - -static print_func acpi_print_funcs[ACPI_BATTERY_NUMFILES ] = { - acpi_battery_print_info, - acpi_battery_print_state, - acpi_battery_print_alarm, -}; - -static int acpi_battery_read (int fid,struct seq_file *seq) +static int acpi_battery_alarm_proc_open (struct inode *inode,struct file *file) { -struct acpi_battery *battery = seq->private; -int result =acpi_battery_update (battery, false); -return acpi_print_funcs[fid](seq, result); +return single_open (file, acpi_battery_alarm_proc_show,PDE_DATA (inode)); } -#define DECLARE_FILE_FUNCTIONS (_name) \ -static int acpi_battery_read_##_name(struct seq_file *seq, void *offset) \ -{ \ - return acpi_battery_read(_name##_tag, seq); \ -} \ -static int acpi_battery_##_name##_open_fs(struct inode *inode, struct file *file) \ -{ \ - return single_open(file, acpi_battery_read_##_name, PDE_DATA(inode)); \ -} - -DECLARE_FILE_FUNCTIONS (info); -DECLARE_FILE_FUNCTIONS (state); -DECLARE_FILE_FUNCTIONS (alarm); - -#undef DECLARE_FILE_FUNCTIONS - -#define FILE_DESCRIPTION_RO (_name) \ - { \ - .name = __stringify(_name), \ - .mode = S_IRUGO, \ - .ops = { \ - .open = acpi_battery_##_name##_open_fs, \ - .read = seq_read, \ - .llseek = seq_lseek, \ - .release = single_release, \ - .owner = THIS_MODULE, \ - }, \ - } - -#define FILE_DESCRIPTION_RW (_name) \ - { \ - .name = __stringify(_name), \ - .mode = S_IFREG | S_IRUGO | S_IWUSR, \ - .ops = { \ - .open = acpi_battery_##_name##_open_fs, \ - .read = seq_read, \ - .llseek = seq_lseek, \ - .write = acpi_battery_write_##_name, \ - .release = single_release, \ - .owner = THIS_MODULE, \ - }, \ - } - -static const struct battery_file { -struct file_operations ops; -umode_t mode; -const char *name; -} acpi_battery_file[] = { -FILE_DESCRIPTION_RO (info), -FILE_DESCRIPTION_RO (state), -FILE_DESCRIPTION_RW (alarm), +static const struct file_operations acpi_battery_alarm_fops = { + .owner =THIS_MODULE , + .open = acpi_battery_alarm_proc_open, + .read = seq_read, + .write = acpi_battery_write_alarm, + .llseek = seq_lseek, + .release = single_release, }; -#undef FILE_DESCRIPTION_RO -#undef FILE_DESCRIPTION_RW -static int acpi_battery_add_fs (struct acpi_device *device) { -struct proc_dir_entry *entry =NULL ; -int i; - printk(KERN_WARNING PREFIX "Deprecated procfs I/F for battery is loaded," " please retry with CONFIG_ACPI_PROCFS_POWER cleared\n");if (!acpi_device_dir (device)) {
@@ -1227,28 +1162,24 @@ static int acpi_battery_add_fs(struct acpi_device *device)return -ENODEV ; } -for (i =0 ; i <ACPI_BATTERY_NUMFILES ; ++i) { - entry =proc_create_data (acpi_battery_file[i].name, - acpi_battery_file[i].mode, -acpi_device_dir (device), - &acpi_battery_file[i].ops, -acpi_driver_data (device)); -if (!entry) -return -ENODEV ; - } +if (!proc_create_single_data ("info" ,S_IRUGO ,acpi_device_dir (device), + acpi_battery_info_proc_show,acpi_driver_data (device))) +return -ENODEV ; +if (!proc_create_single_data ("state" ,S_IRUGO ,acpi_device_dir (device), + acpi_battery_state_proc_show,acpi_driver_data (device))) +return -ENODEV ; +if (!proc_create_data ("alarm" ,S_IFREG |S_IRUGO |S_IWUSR , +acpi_device_dir (device), &acpi_battery_alarm_fops, +acpi_driver_data (device))) +return -ENODEV ;return 0 ; }static void acpi_battery_remove_fs (struct acpi_device *device) { -int i;if (!acpi_device_dir (device))return ; -for (i =0 ; i <ACPI_BATTERY_NUMFILES ; ++i) -remove_proc_entry (acpi_battery_file[i].name, -acpi_device_dir (device)); - -remove_proc_entry (acpi_device_bid (device), acpi_battery_dir); +remove_proc_subtree (acpi_device_bid (device), acpi_battery_dir);acpi_device_dir (device) =NULL ; }
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Re: [PATCH 15/39] acpi/battery: simplify procfs code
Quoted 5 lines · Christoph Hellwig
Use
remove_proc_subtreeto remove the whole subtree on cleanup, and unwind the registration loop into individual calls. Switch to useproc_create_seqwhere applicable.Signed-off-by Christoph Hellwig <[email protected]>
It is OK AFAICS.
PATCH 16/39 ipmi: simplify procfs code
In reply to Christoph HellwigUse remove_proc_subtree to remove the whole subtree on cleanup instead of a hand rolled list of proc entries, unwind the registration loop into individual calls. Switch to use proc_create_single to further simplify the code.
--- drivers/char/ipmi/ipmi_msghandler.c | 150 +++++----------------------- drivers/char/ipmi/ipmi_si_intf.c | 47 +-------- drivers/char/ipmi/ipmi_ssif.c | 34 +------ include/linux/ipmi_smi.h | 8 +- 4 files changed, 33 insertions(+), 206 deletions(-)
drivers/char/ipmi/ipmi_msghandler.c +25 -125
@@ -247,13 +247,6 @@ struct ipmi_my_addrinfo {unsigned char lun; }; -#ifdef CONFIG_IPMI_PROC_INTERFACE -struct ipmi_proc_entry { -char *name; -struct ipmi_proc_entry *next; -}; -#endif -/* * Note that the product id, manufacturer id, guid, and device id are * immutable in this structure, so dyn_mutex is not required for
@@ -430,10 +423,6 @@ struct ipmi_smi {void *send_info;#ifdef CONFIG_IPMI_PROC_INTERFACE -/* A list of proc entries for this interface. */ -struct mutex proc_entry_lock; -struct ipmi_proc_entry *proc_entries; -struct proc_dir_entry *proc_dir;char proc_dir_name[10 ];#endif
@@ -2358,18 +2347,6 @@ static int smi_ipmb_proc_show(struct seq_file *m, void *v)return 0 ; } -static int smi_ipmb_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, smi_ipmb_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations smi_ipmb_proc_ops = { - .open = smi_ipmb_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int smi_version_proc_show (struct seq_file *m,void *v) {ipmi_smi_t intf = m->private;
@@ -2387,18 +2364,6 @@ static int smi_version_proc_show(struct seq_file *m, void *v)return 0 ; } -static int smi_version_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, smi_version_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations smi_version_proc_ops = { - .open = smi_version_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int smi_stats_proc_show (struct seq_file *m,void *v) {ipmi_smi_t intf = m->private;
@@ -2462,95 +2427,45 @@ static int smi_stats_proc_show(struct seq_file *m, void *v)return 0 ; } -static int smi_stats_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, smi_stats_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations smi_stats_proc_ops = { - .open = smi_stats_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -int ipmi_smi_add_proc_entry (ipmi_smi_t smi,char *name, -const struct file_operations *proc_ops, -void *data) +int (*show)(struct seq_file *,void *),void *data) { -int rv =0 ; -struct proc_dir_entry *file; -struct ipmi_proc_entry *entry; - -/* Create a list element. */ - entry =kmalloc (sizeof (*entry),GFP_KERNEL ); -if (!entry) +if (!proc_create_single_data (name,0 , smi->proc_dir, show, data))return -ENOMEM ; - entry->name =kstrdup (name,GFP_KERNEL ); -if (!entry->name) { -kfree (entry); -return -ENOMEM ; - } - - file =proc_create_data (name,0 , smi->proc_dir, proc_ops, data); -if (!file) { -kfree (entry->name); -kfree (entry); - rv = -ENOMEM ; - }else { -mutex_lock (&smi->proc_entry_lock); -/* Stick it on the list. */ - entry->next = smi->proc_entries; - smi->proc_entries = entry; -mutex_unlock (&smi->proc_entry_lock); - } - -return rv; +return 0 ; }EXPORT_SYMBOL (ipmi_smi_add_proc_entry);static int add_proc_entries (ipmi_smi_t smi,int num) { -int rv =0 ; -sprintf (smi->proc_dir_name,"%d" , num); smi->proc_dir =proc_mkdir (smi->proc_dir_name, proc_ipmi_root);if (!smi->proc_dir) - rv = -ENOMEM ; - -if (rv ==0 ) - rv =ipmi_smi_add_proc_entry (smi,"stats" , - &smi_stats_proc_ops, - smi); - -if (rv ==0 ) - rv =ipmi_smi_add_proc_entry (smi,"ipmb" , - &smi_ipmb_proc_ops, - smi); - -if (rv ==0 ) - rv =ipmi_smi_add_proc_entry (smi,"version" , - &smi_version_proc_ops, - smi); - -return rv; +return -ENOMEM ; +if (!proc_create_single_data ("stats" ,0 , smi->proc_dir, + smi_stats_proc_show, smi)) +return -ENOMEM ; +if (!proc_create_single_data ("ipmb" ,0 , smi->proc_dir, + smi_ipmb_proc_show, smi)) +return -ENOMEM ; +if (!proc_create_single_data ("version" ,0 , smi->proc_dir, + smi_version_proc_show, smi)) +return -ENOMEM ; +return 0 ; }static void remove_proc_entries (ipmi_smi_t smi) { -struct ipmi_proc_entry *entry; - -mutex_lock (&smi->proc_entry_lock); -while (smi->proc_entries) { - entry = smi->proc_entries; - smi->proc_entries = entry->next; - -remove_proc_entry (entry->name, smi->proc_dir); -kfree (entry->name); -kfree (entry); - } -mutex_unlock (&smi->proc_entry_lock); -remove_proc_entry (smi->proc_dir_name, proc_ipmi_root); +if (smi->proc_dir) +remove_proc_subtree (smi->proc_dir_name, proc_ipmi_root); +} +#else +static int add_proc_entries (ipmi_smi_t smi,int num) +{ +return 0 ; +} +static void remove_proc_entries (ipmi_smi_t smi) +{ }#endif /* CONFIG_IPMI_PROC_INTERFACE */
@@ -3386,9 +3301,6 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers, intf->seq_table[j].seqid =0 ; } intf->curr_seq =0 ; -#ifdef CONFIG_IPMI_PROC_INTERFACE -mutex_init (&intf->proc_entry_lock); -#endif spin_lock_init (&intf->waiting_rcv_msgs_lock);INIT_LIST_HEAD (&intf->waiting_rcv_msgs); tasklet_init(&intf->recv_tasklet,
@@ -3410,10 +3322,6 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers,for (i =0 ; i <IPMI_NUM_STATS ; i++)atomic_set (&intf->stats[i],0 ); -#ifdef CONFIG_IPMI_PROC_INTERFACE - intf->proc_dir =NULL ; -#endif -mutex_lock (&smi_watchers_mutex);mutex_lock (&ipmi_interfaces_mutex);/* Look for a hole in the numbers. */
@@ -3448,17 +3356,11 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers,if (rv) goto out; -#ifdef CONFIG_IPMI_PROC_INTERFACE rv =add_proc_entries (intf, i); -#endif - out:if (rv) {ipmi_bmc_unregister (intf); -#ifdef CONFIG_IPMI_PROC_INTERFACE -if (intf->proc_dir) -remove_proc_entries (intf); -#endif +remove_proc_entries (intf); intf->handlers =NULL ;list_del_rcu (&intf->link);mutex_unlock (&ipmi_interfaces_mutex);
@@ -3563,9 +3465,7 @@ int ipmi_unregister_smi(ipmi_smi_t intf) intf->handlers =NULL ;mutex_unlock (&ipmi_interfaces_mutex); -#ifdef CONFIG_IPMI_PROC_INTERFACE remove_proc_entries (intf); -#endif ipmi_bmc_unregister (intf);/*
drivers/char/ipmi/ipmi_si_intf.c +3 -44
89 lines not on this page · raw message
drivers/char/ipmi/ipmi_ssif.c +2 -32
@@ -1349,18 +1349,6 @@ static int smi_type_proc_show(struct seq_file *m, void *v)return 0 ; } -static int smi_type_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, smi_type_proc_show, inode->i_private); -} - -static const struct file_operations smi_type_proc_ops = { - .open = smi_type_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int smi_stats_proc_show (struct seq_file *m,void *v) {struct ssif_info *ssif_info = m->private;
@@ -1393,18 +1381,6 @@ static int smi_stats_proc_show(struct seq_file *m, void *v) ssif_get_stat(ssif_info, alerts)); return 0; } - -static int smi_stats_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, smi_stats_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations smi_stats_proc_ops = { - .open = smi_stats_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif static int strcmp_nospace (char *s1,char *s2)
@@ -1740,23 +1716,19 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id) goto out_remove_attr; } -#ifdef CONFIG_IPMI_PROC_INTERFACE rv =ipmi_smi_add_proc_entry (ssif_info->intf,"type" , - &smi_type_proc_ops, - ssif_info); + smi_type_proc_show, ssif_info);if (rv) {pr_err (PFX "Unable to create proc entry: %d\n" , rv); goto out_err_unreg; } rv =ipmi_smi_add_proc_entry (ssif_info->intf,"ssif_stats" , - &smi_stats_proc_ops, - ssif_info); + smi_stats_proc_show, ssif_info);if (rv) {pr_err (PFX "Unable to create proc entry: %d\n" , rv); goto out_err_unreg; } -#endif out:if (rv) {
@@ -1775,10 +1747,8 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)kfree (resp);return rv; -#ifdef CONFIG_IPMI_PROC_INTERFACE out_err_unreg:ipmi_unregister_smi (ssif_info->intf); -#endif out_remove_attr:device_remove_group (&ssif_info->client->dev, &ipmi_ssif_dev_attr_group);
include/linux/ipmi_smi.h +3 -5
@@ -223,12 +223,10 @@ static inline void ipmi_free_smi_msg(struct ipmi_smi_msg *msg) }#ifdef CONFIG_IPMI_PROC_INTERFACE -/* Allow the lower layer to add things to the proc filesystem -directory for this interface. Note that the entry will -automatically be dstroyed when the interface is destroyed. */ int ipmi_smi_add_proc_entry (ipmi_smi_t smi,char *name, -const struct file_operations *proc_ops, -void *data); +int (*show)(struct seq_file *,void *),void *data); +#else +#define ipmi_smi_add_proc_entry (smi, name, show, data) 0#endif #endif /* __LINUX_IPMI_SMI_H */
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Re: [PATCH 16/39] ipmi: simplify procfs code
Quoted 4 lines · Christoph Hellwig
Use
remove_proc_subtreeto remove the whole subtree on cleanup instead of a hand rolled list of proc entries, unwind the registration loop into individual calls. Switch to useproc_create_singleto further simplify the code.
I'm yanking all the proc code out of the IPMI driver in 3.18. So this is probably not necessary.
Thanks,
-corey
Quoted 433 lines
Signed-off-by Christoph Hellwig <[email protected]>--- drivers/char/ipmi/ipmi_msghandler.c | 150 +++++----------------------- drivers/char/ipmi/ipmi_si_intf.c | 47 +-------- drivers/char/ipmi/ipmi_ssif.c | 34 +------ include/linux/ipmi_smi.h | 8 +- 4 files changed, 33 insertions(+), 206 deletions(-)drivers/char/ipmi/ipmi_msghandler.c +25
-125@@ -247,13 +247,6 @@ struct ipmi_my_addrinfo {unsigned char lun; }; -#ifdef CONFIG_IPMI_PROC_INTERFACE -struct ipmi_proc_entry { -char *name; -struct ipmi_proc_entry *next; -}; -#endif -/* * Note that the product id, manufacturer id, guid, and device id are * immutable in this structure, so dyn_mutex is not required for @@ -430,10 +423,6 @@ struct ipmi_smi {void *send_info;#ifdef CONFIG_IPMI_PROC_INTERFACE -/* A list of proc entries for this interface. */ -struct mutex proc_entry_lock; -struct ipmi_proc_entry *proc_entries; -struct proc_dir_entry *proc_dir;char proc_dir_name[10 ];#endif @@ -2358,18 +2347,6 @@ static int smi_ipmb_proc_show(struct seq_file *m, void *v)return 0 ; } -static int smi_ipmb_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, smi_ipmb_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations smi_ipmb_proc_ops = { - .open = smi_ipmb_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int smi_version_proc_show (struct seq_file *m,void *v) {ipmi_smi_t intf = m->private;@@ -2387,18 +2364,6 @@ static int smi_version_proc_show(struct seq_file *m, void *v)return 0 ; } -static int smi_version_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, smi_version_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations smi_version_proc_ops = { - .open = smi_version_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int smi_stats_proc_show (struct seq_file *m,void *v) {ipmi_smi_t intf = m->private;@@ -2462,95 +2427,45 @@ static int smi_stats_proc_show(struct seq_file *m, void *v)return 0 ; } -static int smi_stats_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, smi_stats_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations smi_stats_proc_ops = { - .open = smi_stats_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -int ipmi_smi_add_proc_entry (ipmi_smi_t smi,char *name, -const struct file_operations *proc_ops, -void *data) +int (*show)(struct seq_file *,void *),void *data) { -int rv =0 ; -struct proc_dir_entry *file; -struct ipmi_proc_entry *entry; - -/* Create a list element. */ - entry =kmalloc (sizeof (*entry),GFP_KERNEL ); -if (!entry) +if (!proc_create_single_data (name,0 , smi->proc_dir, show, data))return -ENOMEM ; - entry->name =kstrdup (name,GFP_KERNEL ); -if (!entry->name) { -kfree (entry); -return -ENOMEM ; - } - - file =proc_create_data (name,0 , smi->proc_dir, proc_ops, data); -if (!file) { -kfree (entry->name); -kfree (entry); - rv = -ENOMEM ; - }else { -mutex_lock (&smi->proc_entry_lock); -/* Stick it on the list. */ - entry->next = smi->proc_entries; - smi->proc_entries = entry; -mutex_unlock (&smi->proc_entry_lock); - } - -return rv; +return 0 ; }EXPORT_SYMBOL (ipmi_smi_add_proc_entry);static int add_proc_entries (ipmi_smi_t smi,int num) { -int rv =0 ; -sprintf (smi->proc_dir_name,"%d" , num); smi->proc_dir =proc_mkdir (smi->proc_dir_name, proc_ipmi_root);if (!smi->proc_dir) - rv = -ENOMEM ; - -if (rv ==0 ) - rv =ipmi_smi_add_proc_entry (smi,"stats" , - &smi_stats_proc_ops, - smi); - -if (rv ==0 ) - rv =ipmi_smi_add_proc_entry (smi,"ipmb" , - &smi_ipmb_proc_ops, - smi); - -if (rv ==0 ) - rv =ipmi_smi_add_proc_entry (smi,"version" , - &smi_version_proc_ops, - smi); - -return rv; +return -ENOMEM ; +if (!proc_create_single_data ("stats" ,0 , smi->proc_dir, + smi_stats_proc_show, smi)) +return -ENOMEM ; +if (!proc_create_single_data ("ipmb" ,0 , smi->proc_dir, + smi_ipmb_proc_show, smi)) +return -ENOMEM ; +if (!proc_create_single_data ("version" ,0 , smi->proc_dir, + smi_version_proc_show, smi)) +return -ENOMEM ; +return 0 ; }static void remove_proc_entries (ipmi_smi_t smi) { -struct ipmi_proc_entry *entry; - -mutex_lock (&smi->proc_entry_lock); -while (smi->proc_entries) { - entry = smi->proc_entries; - smi->proc_entries = entry->next; - -remove_proc_entry (entry->name, smi->proc_dir); -kfree (entry->name); -kfree (entry); - } -mutex_unlock (&smi->proc_entry_lock); -remove_proc_entry (smi->proc_dir_name, proc_ipmi_root); +if (smi->proc_dir) +remove_proc_subtree (smi->proc_dir_name, proc_ipmi_root); +} +#else +static int add_proc_entries (ipmi_smi_t smi,int num) +{ +return 0 ; +} +static void remove_proc_entries (ipmi_smi_t smi) +{ }#endif /* CONFIG_IPMI_PROC_INTERFACE */ @@ -3386,9 +3301,6 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers, intf->seq_table[j].seqid =0 ; } intf->curr_seq =0 ; -#ifdef CONFIG_IPMI_PROC_INTERFACE -mutex_init (&intf->proc_entry_lock); -#endif spin_lock_init (&intf->waiting_rcv_msgs_lock);INIT_LIST_HEAD (&intf->waiting_rcv_msgs); tasklet_init(&intf->recv_tasklet,@@ -3410,10 +3322,6 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers,for (i =0 ; i <IPMI_NUM_STATS ; i++)atomic_set (&intf->stats[i],0 ); -#ifdef CONFIG_IPMI_PROC_INTERFACE - intf->proc_dir =NULL ; -#endif -mutex_lock (&smi_watchers_mutex);mutex_lock (&ipmi_interfaces_mutex);/* Look for a hole in the numbers. */ @@ -3448,17 +3356,11 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers,if (rv) goto out; -#ifdef CONFIG_IPMI_PROC_INTERFACE rv =add_proc_entries (intf, i); -#endif - out:if (rv) {ipmi_bmc_unregister (intf); -#ifdef CONFIG_IPMI_PROC_INTERFACE -if (intf->proc_dir) -remove_proc_entries (intf); -#endif +remove_proc_entries (intf); intf->handlers =NULL ;list_del_rcu (&intf->link);mutex_unlock (&ipmi_interfaces_mutex);@@ -3563,9 +3465,7 @@ int ipmi_unregister_smi(ipmi_smi_t intf) intf->handlers =NULL ;mutex_unlock (&ipmi_interfaces_mutex); -#ifdef CONFIG_IPMI_PROC_INTERFACE remove_proc_entries (intf); -#endif ipmi_bmc_unregister (intf);/* drivers/char/ipmi/ipmi_si_intf.c +3
-44@@ -1602,18 +1602,6 @@ static int smi_type_proc_show(struct seq_file *m, void *v)return 0 ; } -static int smi_type_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, smi_type_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations smi_type_proc_ops = { - .open = smi_type_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int smi_si_stats_proc_show (struct seq_file *m,void *v) {struct smi_info *smi = m->private;@@ -1645,18 +1633,6 @@ static int smi_si_stats_proc_show(struct seq_file *m, void *v)return 0 ; } -static int smi_si_stats_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, smi_si_stats_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations smi_si_stats_proc_ops = { - .open = smi_si_stats_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int smi_params_proc_show (struct seq_file *m,void *v) {struct smi_info *smi = m->private;@@ -1674,18 +1650,6 @@ static int smi_params_proc_show(struct seq_file *m, void *v) return 0; } - -static int smi_params_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, smi_params_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations smi_params_proc_ops = { - .open = smi_params_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif #define IPMI_SI_ATTR (name) \@@ -2182,10 +2146,8 @@ static int try_smi_init(struct smi_info *new_smi) goto out_err; } -#ifdef CONFIG_IPMI_PROC_INTERFACE rv =ipmi_smi_add_proc_entry (new_smi->intf,"type" , - &smi_type_proc_ops, - new_smi); + smi_type_proc_show, new_smi);if (rv) {dev_err (new_smi->io.dev,"Unable to create proc entry: %d\n" , rv);@@ -2193,8 +2155,7 @@ static int try_smi_init(struct smi_info *new_smi) } rv =ipmi_smi_add_proc_entry (new_smi->intf,"si_stats" , - &smi_si_stats_proc_ops, - new_smi); + smi_si_stats_proc_show, new_smi);if (rv) {dev_err (new_smi->io.dev,"Unable to create proc entry: %d\n" , rv);@@ -2202,14 +2163,12 @@ static int try_smi_init(struct smi_info *new_smi) } rv =ipmi_smi_add_proc_entry (new_smi->intf,"params" , - &smi_params_proc_ops, - new_smi); + smi_params_proc_show, new_smi);if (rv) {dev_err (new_smi->io.dev,"Unable to create proc entry: %d\n" , rv); goto out_err; } -#endif /* Don't increment till we know we have succeeded. */ smi_num++;drivers/char/ipmi/ipmi_ssif.c +2
-32@@ -1349,18 +1349,6 @@ static int smi_type_proc_show(struct seq_file *m, void *v)return 0 ; } -static int smi_type_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, smi_type_proc_show, inode->i_private); -} - -static const struct file_operations smi_type_proc_ops = { - .open = smi_type_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int smi_stats_proc_show (struct seq_file *m,void *v) {struct ssif_info *ssif_info = m->private;@@ -1393,18 +1381,6 @@ static int smi_stats_proc_show(struct seq_file *m, void *v) ssif_get_stat(ssif_info, alerts)); return 0; } - -static int smi_stats_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, smi_stats_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations smi_stats_proc_ops = { - .open = smi_stats_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif static int strcmp_nospace (char *s1,char *s2)@@ -1740,23 +1716,19 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id) goto out_remove_attr; } -#ifdef CONFIG_IPMI_PROC_INTERFACE rv =ipmi_smi_add_proc_entry (ssif_info->intf,"type" , - &smi_type_proc_ops, - ssif_info); + smi_type_proc_show, ssif_info);if (rv) {pr_err (PFX "Unable to create proc entry: %d\n" , rv); goto out_err_unreg; } rv =ipmi_smi_add_proc_entry (ssif_info->intf,"ssif_stats" , - &smi_stats_proc_ops, - ssif_info); + smi_stats_proc_show, ssif_info);if (rv) {pr_err (PFX "Unable to create proc entry: %d\n" , rv); goto out_err_unreg; } -#endif out:if (rv) {@@ -1775,10 +1747,8 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)kfree (resp);return rv; -#ifdef CONFIG_IPMI_PROC_INTERFACE out_err_unreg:ipmi_unregister_smi (ssif_info->intf); -#endif out_remove_attr:device_remove_group (&ssif_info->client->dev, &ipmi_ssif_dev_attr_group);include/linux/ipmi_smi.h +0
-2@@ -223,12 +223,10 @@ static inline void ipmi_free_smi_msg(struct ipmi_smi_msg *msg) }#ifdef CONFIG_IPMI_PROC_INTERFACE -/* Allow the lower layer to add things to the proc filesystem -directory for this interface. Note that the entry will
include/linux/ipmi_smi.h static inline void ipmi_free_smi_msg(struct ipmi_smi_msg *msg) · line 232
Quoted 10 lines
include/linux/ipmi_smi.h +3
-3-automatically be dstroyed when the interface is destroyed. */ int ipmi_smi_add_proc_entry (ipmi_smi_t smi,char *name, -const struct file_operations *proc_ops, -void *data); +int (*show)(struct seq_file *,void *),void *data); +#else +#define ipmi_smi_add_proc_entry (smi, name, show, data) 0#endif #endif /* __LINUX_IPMI_SMI_H */
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH 16/39] ipmi: simplify procfs code
Quoted 9 lines · Corey Minyard
Quoted 4 lines · Christoph Hellwig
Use
remove_proc_subtreeto remove the whole subtree on cleanup instead of a hand rolled list of proc entries, unwind the registration loop into individual calls. Switch to useproc_create_singleto further simplify the code.I'm yanking all the proc code out of the IPMI driver in 3.18. So this is probably
not necessary.
Ok, I'll drop this patch.
PATCH 17/39 sgi-gru: simplify procfs code
In reply to Christoph HellwigUse remove_proc_subtree to remove the whole subtree on cleanup, and unwind the registration loop into individual calls. Switch to use proc_create_seq where applicable.
--- drivers/misc/sgi-gru/gruprocfs.c | 81 ++++++-------------------------- 1 file changed, 14 insertions(+), 67 deletions(-)
drivers/misc/sgi-gru/gruprocfs.c +14 -67
@@ -270,16 +270,6 @@ static int options_open(struct inode *inode, struct file *file)return single_open (file, options_show,NULL ); } -static int cch_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &cch_seq_ops); -} - -static int gru_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &gru_seq_ops); -} -/* *INDENT-OFF* */ static const struct file_operations statistics_fops = { .open = statistics_open,
@@ -305,73 +295,30 @@ static const struct file_operations options_fops = { .release = single_release, }; -static const struct file_operations cch_fops = { - .open = cch_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static const struct file_operations gru_fops = { - .open = gru_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; - -static struct proc_entry { -char *name; -umode_t mode; -const struct file_operations *fops; -struct proc_dir_entry *entry; -} proc_files[] = { - {"statistics" ,0644 , &statistics_fops}, - {"mcs_statistics" ,0644 , &mcs_statistics_fops}, - {"debug_options" ,0644 , &options_fops}, - {"cch_status" ,0444 , &cch_fops}, - {"gru_status" ,0444 , &gru_fops}, - {NULL } -}; -/* *INDENT-ON* */ -static struct proc_dir_entry *proc_gru__read_mostly ; -static int create_proc_file (struct proc_entry *p) -{ - p->entry =proc_create (p->name, p->mode, proc_gru, p->fops); -if (!p->entry) -return -1 ; -return 0 ; -} - -static void delete_proc_files (void ) -{ -struct proc_entry *p; - -if (proc_gru) { -for (p = proc_files; p->name; p++) -if (p->entry) -remove_proc_entry (p->name, proc_gru); -proc_remove (proc_gru); - } -} -int gru_proc_init (void ) { -struct proc_entry *p; - proc_gru =proc_mkdir ("sgi_uv/gru" ,NULL ); - -for (p = proc_files; p->name; p++) -if (create_proc_file (p)) - goto err; +if (!proc_gru) +return -1 ; +if (!proc_create ("statistics" ,0644 , proc_gru, &statistics_fops)) + goto err; +if (!proc_create ("mcs_statistics" ,0644 , proc_gru, &mcs_statistics_fops)) + goto err; +if (!proc_create ("debug_options" ,0644 , proc_gru, &options_fops)) + goto err; +if (!proc_create_seq ("cch_status" ,0444 , proc_gru, &cch_seq_ops)) + goto err; +if (!proc_create_seq ("gru_status" ,0444 , proc_gru, &gru_seq_ops)) + goto err;return 0 ; - err: -delete_proc_files (); +remove_proc_subtree ("sgi_uv/gru" ,NULL );return -1 ; }void gru_proc_exit (void ) { -delete_proc_files (); +remove_proc_subtree ("sgi_uv/gru" ,NULL ); }
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 18/39 megaraid: simplify procfs code
In reply to Christoph HellwigUse remove_proc_subtree to remove the whole subtree on cleanup, and unwind the registration loop into individual calls. Switch to use proc_create_single.
--- drivers/scsi/megaraid.c | 140 +++++++++++----------------------------- drivers/scsi/megaraid.h | 12 ---- 2 files changed, 36 insertions(+), 116 deletions(-)
drivers/scsi/megaraid.c +36 -104
@@ -2731,53 +2731,6 @@ proc_show_rdrv_40(struct seq_file *m, void *v)return proc_show_rdrv (m, m->private,30 ,39 ); } - -/* -* seq_file wrappers for procfile show routines. -*/ -static int mega_proc_open (struct inode *inode,struct file *file) -{ -adapter_t *adapter =proc_get_parent_data (inode); -int (*show)(struct seq_file *,void *) =PDE_DATA (inode); - -return single_open (file, show, adapter); -} - -static const struct file_operations mega_proc_fops = { - .open = mega_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -/* -* Table of proc files we need to create. -*/ -struct mega_proc_file { -const char *name; -unsigned short ptr_offset; -int (*show) (struct seq_file *m,void *v); -}; - -static const struct mega_proc_file mega_proc_files[] = { - {"config" , offsetof(adapter_t , proc_read), proc_show_config }, - {"stat" , offsetof(adapter_t , proc_stat), proc_show_stat }, - {"mailbox" , offsetof(adapter_t , proc_mbox), proc_show_mbox }, -#if MEGA_HAVE_ENH_PROC - {"rebuild-rate" , offsetof(adapter_t , proc_rr), proc_show_rebuild_rate }, - {"battery-status" , offsetof(adapter_t , proc_battery), proc_show_battery }, - { "diskdrives-ch0", offsetof(adapter_t, proc_pdrvstat[0]), proc_show_pdrv_ch0 }, - { "diskdrives-ch1", offsetof(adapter_t, proc_pdrvstat[1]), proc_show_pdrv_ch1 }, - { "diskdrives-ch2", offsetof(adapter_t, proc_pdrvstat[2]), proc_show_pdrv_ch2 }, - { "diskdrives-ch3", offsetof(adapter_t, proc_pdrvstat[3]), proc_show_pdrv_ch3 }, - { "raiddrives-0-9", offsetof(adapter_t, proc_rdrvstat[0]), proc_show_rdrv_10 }, - { "raiddrives-10-19", offsetof(adapter_t, proc_rdrvstat[1]), proc_show_rdrv_20 }, - { "raiddrives-20-29", offsetof(adapter_t, proc_rdrvstat[2]), proc_show_rdrv_30 }, - { "raiddrives-30-39", offsetof(adapter_t, proc_rdrvstat[3]), proc_show_rdrv_40 }, -#endif - {NULL } -}; -/** * mega_create_proc_entry() * @index - index in soft state array
@@ -2788,31 +2741,45 @@ static const struct mega_proc_file mega_proc_files[] = {static void mega_create_proc_entry (int index,struct proc_dir_entry *parent) { -const struct mega_proc_file *f; -adapter_t *adapter = hba_soft_state[index]; -struct proc_dir_entry *dir, *de, **ppde; -u8 string[16 ]; +adapter_t *adapter = hba_soft_state[index]; +struct proc_dir_entry *dir; +u8 string[16 ];sprintf (string,"hba%d" , adapter->host->host_no); - - dir = adapter->controller_proc_dir_entry = -proc_mkdir_data (string,0 , parent, adapter); -if (!dir) { + dir =proc_mkdir_data (string,0 , parent, adapter); +if (!dir) {dev_warn (&adapter->dev->dev,"proc_mkdir failed\n" );return ; } -for (f = mega_proc_files; f->name; f++) { - de =proc_create_data (f->name,S_IRUSR , dir, &mega_proc_fops, - f->show); -if (!de) { -dev_warn (&adapter->dev->dev,"proc_create failed\n" ); -return ; - } - - ppde = (void *)adapter + f->ptr_offset; - *ppde = de; - } +proc_create_single_data ("config" ,S_IRUSR , dir, + proc_show_config, adapter); +proc_create_single_data ("stat" ,S_IRUSR , dir, + proc_show_stat, adapter); +proc_create_single_data ("mailbox" ,S_IRUSR , dir, + proc_show_mbox, adapter); +#if MEGA_HAVE_ENH_PROC +proc_create_single_data ("rebuild-rate" ,S_IRUSR , dir, + proc_show_rebuild_rate, adapter); +proc_create_single_data ("battery-status" ,S_IRUSR , dir, + proc_show_battery, adapter); +proc_create_single_data ("diskdrives-ch0" ,S_IRUSR , dir, + proc_show_pdrv_ch0, adapter); +proc_create_single_data ("diskdrives-ch1" ,S_IRUSR , dir, + proc_show_pdrv_ch1, adapter); +proc_create_single_data ("diskdrives-ch2" ,S_IRUSR , dir, + proc_show_pdrv_ch2, adapter); +proc_create_single_data ("diskdrives-ch3" ,S_IRUSR , dir, + proc_show_pdrv_ch3, adapter); +proc_create_single_data ("raiddrives-0-9" ,S_IRUSR , dir, + proc_show_rdrv_10, adapter); +proc_create_single_data ("raiddrives-10-19" ,S_IRUSR , dir, + proc_show_rdrv_20, adapter); +proc_create_single_data ("raiddrives-20-29" ,S_IRUSR , dir, + proc_show_rdrv_30, adapter); +proc_create_single_data ("raiddrives-30-39" ,S_IRUSR , dir, + proc_show_rdrv_40, adapter); +#endif }#else
@@ -4580,6 +4547,7 @@ megaraid_remove_one(struct pci_dev *pdev) {struct Scsi_Host *host =pci_get_drvdata (pdev);adapter_t *adapter = (adapter_t *)host->hostdata; +char buf[12 ] = {0 };scsi_remove_host (host);
@@ -4594,44 +4562,8 @@ megaraid_remove_one(struct pci_dev *pdev)mega_free_sgl (adapter); -#ifdef CONFIG_PROC_FS -if (adapter->controller_proc_dir_entry) { -remove_proc_entry ("stat" , adapter->controller_proc_dir_entry); -remove_proc_entry ("config" , - adapter->controller_proc_dir_entry); -remove_proc_entry ("mailbox" , - adapter->controller_proc_dir_entry); -#if MEGA_HAVE_ENH_PROC -remove_proc_entry ("rebuild-rate" , - adapter->controller_proc_dir_entry); -remove_proc_entry ("battery-status" , - adapter->controller_proc_dir_entry); - -remove_proc_entry ("diskdrives-ch0" , - adapter->controller_proc_dir_entry); -remove_proc_entry ("diskdrives-ch1" , - adapter->controller_proc_dir_entry); -remove_proc_entry ("diskdrives-ch2" , - adapter->controller_proc_dir_entry); -remove_proc_entry ("diskdrives-ch3" , - adapter->controller_proc_dir_entry); - -remove_proc_entry ("raiddrives-0-9" , - adapter->controller_proc_dir_entry); -remove_proc_entry ("raiddrives-10-19" , - adapter->controller_proc_dir_entry); -remove_proc_entry ("raiddrives-20-29" , - adapter->controller_proc_dir_entry); -remove_proc_entry ("raiddrives-30-39" , - adapter->controller_proc_dir_entry); -#endif - { -char buf[12 ] = {0 }; -sprintf (buf,"hba%d" , adapter->host->host_no); -remove_proc_entry (buf, mega_proc_dir_entry); - } - } -#endif +sprintf (buf,"hba%d" , adapter->host->host_no); +remove_proc_subtree (buf, mega_proc_dir_entry);pci_free_consistent (adapter->dev,MEGA_BUFFER_SIZE , adapter->mega_buffer, adapter->buf_dma_handle);
drivers/scsi/megaraid.h +0 -12
@@ -814,18 +814,6 @@ typedef struct {#ifdef CONFIG_PROC_FS struct proc_dir_entry *controller_proc_dir_entry; -struct proc_dir_entry *proc_read; -struct proc_dir_entry *proc_stat; -struct proc_dir_entry *proc_mbox; - -#if MEGA_HAVE_ENH_PROC -struct proc_dir_entry *proc_rr; -struct proc_dir_entry *proc_battery; -#define MAX_PROC_CHANNELS 4 -struct proc_dir_entry *proc_pdrvstat[MAX_PROC_CHANNELS ]; -struct proc_dir_entry *proc_rdrvstat[MAX_PROC_CHANNELS ]; -#endif -#endif int has_64bit_addr;/* are we using 64-bit addressing */
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 19/39 sg: simplify procfs code
In reply to Christoph HellwigUse remove_proc_subtree to remove the whole subtree on cleanup, and unwind the registration loop into individual calls. Switch to use proc_create_seq where applicable.
--- drivers/scsi/sg.c | 124 +++++----------------------------------------- 1 file changed, 12 insertions(+), 112 deletions(-)
drivers/scsi/sg.c +12 -112
@@ -66,7 +66,6 @@ static int sg_version_num = 30536; /* 2 digits for each component */static char *sg_version_date ="20140603" ;static int sg_proc_init (void ); -static void sg_proc_cleanup (void );#endif #define SG_ALLOW_DIO_DEF 0
@@ -1661,7 +1660,7 @@ static void __exitexit_sg (void) {#ifdef CONFIG_SCSI_PROC_FS -sg_proc_cleanup (); +remove_proc_subtree ("scsi/sg" ,NULL );#endif /* CONFIG_SCSI_PROC_FS */ scsi_unregister_interface (&sg_interface);class_destroy (sg_sysfs_class);
@@ -2274,11 +2273,6 @@ sg_get_dev(int dev) }#ifdef CONFIG_SCSI_PROC_FS - -static struct proc_dir_entry *sg_proc_sgp =NULL ; - -static char sg_proc_sg_dirname[] ="scsi/sg" ; -static int sg_proc_seq_show_int (struct seq_file *s,void *v);static int sg_proc_single_open_adio (struct inode *inode,struct file *file);
@@ -2306,37 +2300,11 @@ static const struct file_operations dressz_fops = { };static int sg_proc_seq_show_version (struct seq_file *s,void *v); -static int sg_proc_single_open_version (struct inode *inode,struct file *file); -static const struct file_operations version_fops = { - .owner =THIS_MODULE , - .open = sg_proc_single_open_version, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int sg_proc_seq_show_devhdr (struct seq_file *s,void *v); -static int sg_proc_single_open_devhdr (struct inode *inode,struct file *file); -static const struct file_operations devhdr_fops = { - .owner =THIS_MODULE , - .open = sg_proc_single_open_devhdr, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int sg_proc_seq_show_dev (struct seq_file *s,void *v); -static int sg_proc_open_dev (struct inode *inode,struct file *file);static void *dev_seq_start (struct seq_file *s,loff_t *pos);static void *dev_seq_next (struct seq_file *s,void *v,loff_t *pos);static void dev_seq_stop (struct seq_file *s,void *v); -static const struct file_operations dev_fops = { - .owner =THIS_MODULE , - .open = sg_proc_open_dev, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -};static const struct seq_operations dev_seq_ops = { .start = dev_seq_start, .next = dev_seq_next,
@@ -2345,14 +2313,6 @@ static const struct seq_operations dev_seq_ops = { };static int sg_proc_seq_show_devstrs (struct seq_file *s,void *v); -static int sg_proc_open_devstrs (struct inode *inode,struct file *file); -static const struct file_operations devstrs_fops = { - .owner =THIS_MODULE , - .open = sg_proc_open_devstrs, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -};static const struct seq_operations devstrs_seq_ops = { .start = dev_seq_start, .next = dev_seq_next,
@@ -2361,14 +2321,6 @@ static const struct seq_operations devstrs_seq_ops = { };static int sg_proc_seq_show_debug (struct seq_file *s,void *v); -static int sg_proc_open_debug (struct inode *inode,struct file *file); -static const struct file_operations debug_fops = { - .owner =THIS_MODULE , - .open = sg_proc_open_debug, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -};static const struct seq_operations debug_seq_ops = { .start = dev_seq_start, .next = dev_seq_next,
@@ -2376,50 +2328,23 @@ static const struct seq_operations debug_seq_ops = { .show = sg_proc_seq_show_debug, }; - -struct sg_proc_leaf { -const char * name; -const struct file_operations * fops; -}; - -static const struct sg_proc_leaf sg_proc_leaf_arr[] = { - {"allow_dio" , &adio_fops}, - {"debug" , &debug_fops}, - {"def_reserved_size" , &dressz_fops}, - {"device_hdr" , &devhdr_fops}, - {"devices" , &dev_fops}, - {"device_strs" , &devstrs_fops}, - {"version" , &version_fops} -}; -static int sg_proc_init (void ) { -int num_leaves =ARRAY_SIZE (sg_proc_leaf_arr); -int k; +struct proc_dir_entry *p; - sg_proc_sgp =proc_mkdir (sg_proc_sg_dirname,NULL ); -if (!sg_proc_sgp) + p =proc_mkdir ("scsi/sg" ,NULL ); +if (!p)return 1 ; -for (k =0 ; k < num_leaves; ++k) { -const struct sg_proc_leaf *leaf = &sg_proc_leaf_arr[k]; -umode_t mask = leaf->fops->write ?S_IRUGO |S_IWUSR :S_IRUGO ; -proc_create (leaf->name, mask, sg_proc_sgp, leaf->fops); - } -return 0 ; -} -static void -sg_proc_cleanup (void ) -{ -int k; -int num_leaves =ARRAY_SIZE (sg_proc_leaf_arr); - -if (!sg_proc_sgp) -return ; -for (k =0 ; k < num_leaves; ++k) -remove_proc_entry (sg_proc_leaf_arr[k].name, sg_proc_sgp); -remove_proc_entry (sg_proc_sg_dirname,NULL ); +proc_create ("allow_dio" ,S_IRUGO |S_IWUSR , p, &adio_fops); +proc_create_seq ("debug" ,S_IRUGO , p, &debug_seq_ops); +proc_create ("def_reserved_size" ,S_IRUGO |S_IWUSR , p, &dressz_fops); +proc_create_single ("device_hdr" ,S_IRUGO , p, sg_proc_seq_show_devhdr); +proc_create_seq ("devices" ,S_IRUGO , p, &dev_seq_ops); +proc_create_seq ("device_strs" ,S_IRUGO , p, &devstrs_seq_ops); +proc_create_single ("version" ,S_IRUGO , p, sg_proc_seq_show_version); +return 0 ; }
@@ -2482,22 +2407,12 @@ static int sg_proc_seq_show_version(struct seq_file *s, void *v)return 0 ; } -static int sg_proc_single_open_version (struct inode *inode,struct file *file) -{ -return single_open (file, sg_proc_seq_show_version,NULL ); -} -static int sg_proc_seq_show_devhdr (struct seq_file *s,void *v) {seq_puts (s,"host\tchan\tid\tlun\ttype\topens\tqdepth\tbusy\tonline\n" );return 0 ; } -static int sg_proc_single_open_devhdr (struct inode *inode,struct file *file) -{ -return single_open (file, sg_proc_seq_show_devhdr,NULL ); -} -struct sg_proc_deviter {loff_t index;size_t max;
@@ -2531,11 +2446,6 @@ static void dev_seq_stop(struct seq_file *s, void *v)kfree (s->private); } -static int sg_proc_open_dev (struct inode *inode,struct file *file) -{ -return seq_open (file, &dev_seq_ops); -} -static int sg_proc_seq_show_dev (struct seq_file *s,void *v) {struct sg_proc_deviter * it = (struct sg_proc_deviter *) v;
@@ -2562,11 +2472,6 @@ static int sg_proc_seq_show_dev(struct seq_file *s, void *v)return 0 ; } -static int sg_proc_open_devstrs (struct inode *inode,struct file *file) -{ -return seq_open (file, &devstrs_seq_ops); -} -static int sg_proc_seq_show_devstrs (struct seq_file *s,void *v) {struct sg_proc_deviter * it = (struct sg_proc_deviter *) v;
@@ -2650,11 +2555,6 @@ static void sg_proc_debug_helper(struct seq_file *s, Sg_device * sdp) } } -static int sg_proc_open_debug (struct inode *inode,struct file *file) -{ -return seq_open (file, &debug_seq_ops); -} -static int sg_proc_seq_show_debug (struct seq_file *s,void *v) {struct sg_proc_deviter * it = (struct sg_proc_deviter *) v;
Signature · 1 line
2.17.0
PATCH 20/39 afs: simplify procfs code
In reply to Christoph HellwigUse remove_proc_subtree to remove the whole subtree on cleanup, and unwind the registration loop into individual calls. Switch to use proc_create_seq where applicable.
--- fs/afs/proc.c | 134 ++++++-------------------------------------------- 1 file changed, 15 insertions(+), 119 deletions(-)
fs/afs/proc.c +15 -119
@@ -62,7 +62,6 @@ static const struct file_operations afs_proc_rootcell_fops = { .llseek = no_llseek, }; -static int afs_proc_cell_volumes_open (struct inode *inode,struct file *file);static void *afs_proc_cell_volumes_start (struct seq_file *p,loff_t *pos);static void *afs_proc_cell_volumes_next (struct seq_file *p,void *v,loff_t *pos);
@@ -76,15 +75,6 @@ static const struct seq_operations afs_proc_cell_volumes_ops = { .show = afs_proc_cell_volumes_show, }; -static const struct file_operations afs_proc_cell_volumes_fops = { - .open = afs_proc_cell_volumes_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; - -static int afs_proc_cell_vlservers_open (struct inode *inode, -struct file *file);static void *afs_proc_cell_vlservers_start (struct seq_file *p,loff_t *pos);static void *afs_proc_cell_vlservers_next (struct seq_file *p,void *v,loff_t *pos);
@@ -98,14 +88,6 @@ static const struct seq_operations afs_proc_cell_vlservers_ops = { .show = afs_proc_cell_vlservers_show, }; -static const struct file_operations afs_proc_cell_vlservers_fops = { - .open = afs_proc_cell_vlservers_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; - -static int afs_proc_servers_open (struct inode *inode,struct file *file);static void *afs_proc_servers_start (struct seq_file *p,loff_t *pos);static void *afs_proc_servers_next (struct seq_file *p,void *v,loff_t *pos);
@@ -119,13 +101,6 @@ static const struct seq_operations afs_proc_servers_ops = { .show = afs_proc_servers_show, }; -static const struct file_operations afs_proc_servers_fops = { - .open = afs_proc_servers_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static int afs_proc_sysname_open (struct inode *inode,struct file *file);static int afs_proc_sysname_release (struct inode *inode,struct file *file);static void *afs_proc_sysname_start (struct seq_file *p,loff_t *pos);
@@ -152,7 +127,7 @@ static const struct file_operations afs_proc_sysname_fops = { .write = afs_proc_sysname_write, }; -static const struct file_operations afs_proc_stats_fops; +static int afs_proc_stats_show (struct seq_file *m,void *v);/* * initialise the /proc/fs/afs/ directory
@@ -167,8 +142,8 @@ int afs_proc_init(struct afs_net *net)if (!proc_create ("cells" ,0644 , net->proc_afs, &afs_proc_cells_fops) || !proc_create ("rootcell" ,0644 , net->proc_afs, &afs_proc_rootcell_fops) || - !proc_create ("servers" ,0644 , net->proc_afs, &afs_proc_servers_fops) || - !proc_create ("stats" ,0644 , net->proc_afs, &afs_proc_stats_fops) || + !proc_create_seq ("servers" ,0644 , net->proc_afs, &afs_proc_servers_ops) || + !proc_create_single ("stats" ,0644 , net->proc_afs, afs_proc_stats_show) || !proc_create ("sysname" ,0644 , net->proc_afs, &afs_proc_sysname_fops)) goto error_tree;
@@ -196,16 +171,7 @@ void afs_proc_cleanup(struct afs_net *net)*/ static int afs_proc_cells_open (struct inode *inode,struct file *file) { -struct seq_file *m; -int ret; - - ret =seq_open (file, &afs_proc_cells_ops); -if (ret <0 ) -return ret; - - m = file->private_data; - m->private =PDE_DATA (inode); -return 0 ; +return seq_open (file, &afs_proc_cells_ops); }/*
@@ -430,10 +396,11 @@ int afs_proc_cell_setup(struct afs_net *net, struct afs_cell *cell)if (!dir) goto error_dir; -if (!proc_create_data ("vlservers" ,0 , dir, - &afs_proc_cell_vlservers_fops, cell) || - !proc_create_data ("volumes" ,0 , dir, - &afs_proc_cell_volumes_fops, cell)) +if (!proc_create_seq_data ("vlservers" ,0 , dir, + &afs_proc_cell_vlservers_ops, cell)) + goto error_tree; +if (!proc_create_seq_data ("volumes" ,0 , dir, &afs_proc_cell_volumes_ops, + cell)) goto error_tree;_leave (" = 0" );
@@ -458,29 +425,6 @@ void afs_proc_cell_remove(struct afs_net *net, struct afs_cell *cell)_leave ("" ); } -/* -* open "/proc/fs/afs/<cell>/volumes" which provides a summary of extant cells -*/ -static int afs_proc_cell_volumes_open (struct inode *inode,struct file *file) -{ -struct afs_cell *cell; -struct seq_file *m; -int ret; - - cell =PDE_DATA (inode); -if (!cell) -return -ENOENT ; - - ret =seq_open (file, &afs_proc_cell_volumes_ops); -if (ret <0 ) -return ret; - - m = file->private_data; - m->private = cell; - -return 0 ; -} -/* * set up the iterator to start reading from the cells list and return the * first item
@@ -488,7 +432,7 @@ static int afs_proc_cell_volumes_open(struct inode *inode, struct file *file)static void *afs_proc_cell_volumes_start (struct seq_file *m,loff_t *_pos) __acquires(cell->proc_lock) { -struct afs_cell *cell = m->private; +struct afs_cell *cell =PDE_DATA (file_inode (m->file));_enter ("cell=%p pos=%Ld" , cell, *_pos);
@@ -502,7 +446,7 @@ static void *afs_proc_cell_volumes_start(struct seq_file *m, loff_t *_pos)static void *afs_proc_cell_volumes_next (struct seq_file *p,void *v,loff_t *_pos) { -struct afs_cell *cell = p->private; +struct afs_cell *cell =PDE_DATA (file_inode (p->file));_enter ("cell=%p pos=%Ld" , cell, *_pos);return seq_list_next (v, &cell->proc_volumes, _pos);
@@ -514,7 +458,7 @@ static void *afs_proc_cell_volumes_next(struct seq_file *p, void *v,static void afs_proc_cell_volumes_stop (struct seq_file *p,void *v) __releases(cell->proc_lock) { -struct afs_cell *cell = p->private; +struct afs_cell *cell =PDE_DATA (file_inode (p->file));read_unlock (&cell->proc_lock); }
@@ -530,7 +474,7 @@ static const char afs_vol_types[3][3] = {*/ static int afs_proc_cell_volumes_show (struct seq_file *m,void *v) { -struct afs_cell *cell = m->private; +struct afs_cell *cell =PDE_DATA (file_inode (m->file)); struct afs_volume *vol = list_entry(v, struct afs_volume, proc_link);/* Display header on line 1 */
@@ -546,30 +490,6 @@ static int afs_proc_cell_volumes_show(struct seq_file *m, void *v)return 0 ; } -/* -* open "/proc/fs/afs/<cell>/vlservers" which provides a list of volume -* location server -*/ -static int afs_proc_cell_vlservers_open (struct inode *inode,struct file *file) -{ -struct afs_cell *cell; -struct seq_file *m; -int ret; - - cell =PDE_DATA (inode); -if (!cell) -return -ENOENT ; - - ret =seq_open (file, &afs_proc_cell_vlservers_ops); -if (ret<0 ) -return ret; - - m = file->private_data; - m->private = cell; - -return 0 ; -} -/* * set up the iterator to start reading from the cells list and return the * first item
@@ -578,7 +498,7 @@ static void *afs_proc_cell_vlservers_start(struct seq_file *m, loff_t *_pos)__acquires (rcu) {struct afs_addr_list *alist; -struct afs_cell *cell = m->private; +struct afs_cell *cell =PDE_DATA (file_inode (m->file));loff_t pos = *_pos;rcu_read_lock ();
@@ -603,7 +523,7 @@ static void *afs_proc_cell_vlservers_next(struct seq_file *p, void *v, loff_t *_pos) {struct afs_addr_list *alist; -struct afs_cell *cell = p->private; +struct afs_cell *cell =PDE_DATA (file_inode (p->file));loff_t pos; alist =rcu_dereference (cell->vl_addrs);
@@ -643,15 +563,6 @@ static int afs_proc_cell_vlservers_show(struct seq_file *m, void *v)return 0 ; } -/* -* open "/proc/fs/afs/servers" which provides a summary of active -* servers -*/ -static int afs_proc_servers_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &afs_proc_servers_ops); -} -/* * Set up the iterator to start reading from the server list and return the * first item.
@@ -931,18 +842,3 @@ static int afs_proc_stats_show(struct seq_file *m, void *v) atomic_long_read(&net->n_store_bytes));return 0 ; } - -/* -* Open "/proc/fs/afs/stats" to allow reading of the stat counters. -*/ -static int afs_proc_stats_open (struct inode *inode,struct file *file) -{ -return single_open (file, afs_proc_stats_show,NULL ); -} - -static const struct file_operations afs_proc_stats_fops = { - .open = afs_proc_stats_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
David Howells
maintainerRe: [PATCH 20/39] afs: simplify procfs code
Quoted 3 lines · Christoph Hellwig
Use
remove_proc_subtreeto remove the whole subtree on cleanup, and unwind the registration loop into individual calls. Switch to useproc_create_seqwhere applicable.
Note that this is likely going to clash with my patch to net-namespace all of the afs proc files:
https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/commit/?h=mount-context&id=f60c26c827c073583107ebf19d87bc5c0e71c3d2
If it helps, I should be able to disentangle this from the mount-api changes since the subsequent patch connects the dots to propagate the network namespace over automount using the new fs_context to do it.
David
David Howells
maintainerRe: [PATCH 20/39] afs: simplify procfs code
Quoted 4 lines · David Howells
Quoted 3 lines
Use
remove_proc_subtreeto remove the whole subtree on cleanup, and unwind the registration loop into individual calls. Switch to useproc_create_seqwhere applicable.
Quoted 8 lines
Note that this is likely going to clash with my patch to net-namespace all of the afs proc files:
https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/commit/?h=mount-context&id=f60c26c827c073583107ebf19d87bc5c0e71c3d2If it helps, I should be able to disentangle this from the mount-api changes since the subsequent patch connects the dots to propagate the network namespace over automount using the new
fs_contextto do it.
Okay, I'll follow up this mail with a pair of patches to just use network namespacing in AFS. The first exports a function from core code only; the second is the actual modifications to AFS.
Note that this doesn't actually yet permit AFS to use any other namespace. The propagation-over-automount issue is handled by a separate patch.
David
David Howells
maintainerPATCH 1/2 net: Export get_proc_net()
Export get_proc_net() so that write() routines attached to net-namespaced proc files can find the network namespace that they're in. Currently, this is only accessible via seqfile routines.
This will permit AFS to have a separate cell database per-network namespace and to manage each one independently of the others.
--- fs/proc/proc_net.c | 3 ++- include/linux/proc_fs.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-)
fs/proc/proc_net.c +2 -1
@@ -33,10 +33,11 @@ static inline struct net *PDE_NET(struct proc_dir_entry *pde)return pde->parent->data; } -static struct net *get_proc_net (const struct inode *inode) +struct net *get_proc_net (const struct inode *inode) {return maybe_get_net (PDE_NET (PDE (inode))); } +EXPORT_SYMBOL_GPL (get_proc_net);int seq_open_net (struct inode *ino,struct file *f,const struct seq_operations *ops,int size)
include/linux/proc_fs.h +2 -0
@@ -79,6 +79,8 @@ static inline struct proc_dir_entry *proc_net_mkdir(return proc_mkdir_data (name,0 , parent, net); } +extern struct net *get_proc_net (const struct inode *inode); +struct ns_common ;int open_related_ns (struct ns_common *ns,struct ns_common *(*get_ns)(struct ns_common *ns));
David Howells
maintainerPATCH 2/2 afs: Implement namespacing
In reply to David HowellsImplement namespacing within AFS, but don't yet let mounts occur outside the init namespace. An additional patch will be required propagate the network namespace across automounts.
--- cell.c | 4 +- internal.h | 39 +++++++++++++++----------- main.c | 33 ++++++++++++++++++---- proc.c | 89 +++++++++++++++++++++++++++++++++++++++---------------------- super.c | 20 ++++++++----- 5 files changed, 121 insertions(+), 64 deletions(-)
fs/afs/cell.c +2 -2
@@ -528,7 +528,7 @@ static int afs_activate_cell(struct afs_net *net, struct afs_cell *cell)NULL ,0 , cell, 0, true);#endif - ret =afs_proc_cell_setup (net, cell); + ret =afs_proc_cell_setup (cell);if (ret <0 )return ret;spin_lock (&net->proc_cells_lock);
@@ -544,7 +544,7 @@ static void afs_deactivate_cell(struct afs_net *net, struct afs_cell *cell) {_enter ("%s" , cell->name); -afs_proc_cell_remove (net, cell); +afs_proc_cell_remove (cell);spin_lock (&net->proc_cells_lock);list_del_init (&cell->proc_link);
fs/afs/internal.h +22 -17
@@ -22,6 +22,8 @@#include <linux/backing-dev.h> #include <linux/uuid.h> #include <net/net_namespace.h> +#include <net/netns/generic.h> +#include <net/sock.h> #include <net/af_rxrpc.h> #include "afs.h"
@@ -40,7 +42,8 @@ struct afs_mount_params {afs_voltype_t type;/* type of volume requested */ int volnamesz;/* size of volume name */ const char *volname;/* name of volume to mount */ -struct afs_net *net;/* Network namespace in effect */ +struct net *net_ns;/* Network namespace in effect */ +struct afs_net *net;/* the AFS net namespace stuff */ struct afs_cell *cell;/* cell in which to find volume */ struct afs_volume *volume;/* volume record */ struct key *key;/* key to use for secure mounting */
@@ -189,7 +192,7 @@ struct afs_read {* - there's one superblock per volume */ struct afs_super_info { -struct afs_net *net;/* Network namespace */ +struct net *net_ns;/* Network namespace */ struct afs_cell *cell;/* The cell in which the volume resides */ struct afs_volume *volume;/* volume record */ bool dyn_root;/* True if dynamic root */
@@ -218,6 +221,7 @@ struct afs_sysnames {* AFS network namespace record. */ struct afs_net { +struct net *net;/* Backpointer to the owning net namespace */ struct afs_uuid uuid;bool live;/* F if this namespace is being removed */
@@ -280,7 +284,6 @@ struct afs_net { };extern const char afs_init_sysname[]; -extern struct afs_net __afs_net;// Dummy AFS network namespace; TODO: replace with real netns enum afs_cell_state {AFS_CELL_UNSET ,
@@ -787,34 +790,36 @@ extern int afs_drop_inode(struct inode *);* main.c */ extern struct workqueue_struct *afs_wq; +extern int afs_net_id; -static inline struct afs_net *afs_d2net (struct dentry *dentry) +static inline struct afs_net *afs_net (struct net *net) { -return &__afs_net; +return net_generic (net, afs_net_id); } -static inline struct afs_net *afs_i2net (struct inode *inode) +static inline struct afs_net *afs_sb2net (struct super_block *sb) { -return &__afs_net; +return afs_net (AFS_FS_S (sb)->net_ns); } -static inline struct afs_net *afs_v2net (struct afs_vnode *vnode) +static inline struct afs_net *afs_d2net (struct dentry *dentry) { -return &__afs_net; +return afs_sb2net (dentry->d_sb); } -static inline struct afs_net *afs_sock2net (struct sock *sk) +static inline struct afs_net *afs_i2net (struct inode *inode) { -return &__afs_net; +return afs_sb2net (inode->i_sb); } -static inline struct afs_net *afs_get_net (struct afs_net *net) +static inline struct afs_net *afs_v2net (struct afs_vnode *vnode) { -return net; +return afs_i2net (&vnode->vfs_inode); } -static inline void afs_put_net (struct afs_net *net) +static inline struct afs_net *afs_sock2net (struct sock *sk) { +return net_generic (sock_net (sk), afs_net_id); }static inline void __afs_stat (atomic_t *s)
@@ -849,8 +854,8 @@ extern int afs_get_ipv4_interfaces(struct afs_interface *, size_t, bool);*/ extern int __net_init afs_proc_init (struct afs_net *); extern void __net_exit afs_proc_cleanup(struct afs_net *); -extern int afs_proc_cell_setup (struct afs_net *,struct afs_cell *); -extern void afs_proc_cell_remove (struct afs_net *,struct afs_cell *); +extern int afs_proc_cell_setup (struct afs_cell *); +extern void afs_proc_cell_remove (struct afs_cell *);extern void afs_put_sysnames (struct afs_sysnames *);/*
@@ -983,7 +988,7 @@ extern bool afs_annotate_server_list(struct afs_server_list *, struct afs_server* super.c */ extern int __init afs_fs_init (void ); -extern void __exit afs_fs_exit(void); +extern void afs_fs_exit (void );/* * vlclient.c
fs/afs/main.c +27 -6
@@ -15,6 +15,7 @@#include <linux/completion.h> #include <linux/sched.h> #include <linux/random.h> +#include <linux/proc_fs.h> #define CREATE_TRACE_POINTS #include "internal.h"
@@ -32,7 +33,7 @@ module_param(rootcell, charp, 0);MODULE_PARM_DESC (rootcell,"root AFS cell name and VL server IP addr list" );struct workqueue_struct *afs_wq; -struct afs_net __afs_net; +static struct proc_dir_entry *afs_proc_symlink;#if defined(CONFIG_ALPHA )const char afs_init_sysname[] ="alpha_linux26" ;
@@ -67,11 +68,13 @@ const char afs_init_sysname[] = "unknown_linux26";/* * Initialise an AFS network namespace record. */ -static int __net_init afs_net_init (struct afs_net *net) +static int __net_init afs_net_init (struct net *net_ns) {struct afs_sysnames *sysnames; +struct afs_net *net =afs_net (net_ns);int ret; + net->net = net_ns; net->live = true;generate_random_uuid ((unsigned char *)&net->uuid);
@@ -142,8 +145,10 @@ static int __net_init afs_net_init(struct afs_net *net)/* * Clean up and destroy an AFS network namespace record. */ -static void __net_exit afs_net_exit(struct afs_net *net) +static void __net_exit afs_net_exit(struct net *net_ns) { +struct afs_net *net =afs_net (net_ns); + net->live = false;afs_cell_purge (net);afs_purge_servers (net);
@@ -152,6 +157,13 @@ static void __net_exit afs_net_exit(struct afs_net *net)afs_put_sysnames (net->sysnames); } +static struct pernet_operations afs_net_ops = { + .init = afs_net_init, + .exit = afs_net_exit, + .id = &afs_net_id, + .size =sizeof (struct afs_net ), +}; +/* * initialise the AFS client FS module */
@@ -178,7 +190,7 @@ static int __init afs_init(void) goto error_cache;#endif - ret =afs_net_init (&__afs_net); + ret =register_pernet_subsys (&afs_net_ops);if (ret <0 ) goto error_net;
@@ -187,10 +199,18 @@ static int __init afs_init(void)if (ret <0 ) goto error_fs; + afs_proc_symlink =proc_symlink ("fs/afs" ,NULL ,"../self/net/afs" ); +if (IS_ERR (afs_proc_symlink)) { + ret =PTR_ERR (afs_proc_symlink); + goto error_proc; + } +return ret; +error_proc: +afs_fs_exit (); error_fs: -afs_net_exit (&__afs_net); +unregister_pernet_subsys (&afs_net_ops); error_net:#ifdef CONFIG_AFS_FSCACHE fscache_unregister_netfs (&afs_cache_netfs);
@@ -219,8 +239,9 @@ static void __exit afs_exit(void) {printk (KERN_INFO "kAFS: Red Hat AFS client v0.1 unregistering.\n" ); +proc_remove (afs_proc_symlink);afs_fs_exit (); -afs_net_exit (&__afs_net); +unregister_pernet_subsys (&afs_net_ops);#ifdef CONFIG_AFS_FSCACHE fscache_unregister_netfs (&afs_cache_netfs);#endif
fs/afs/proc.c +58 -31
209 lines not on this page · raw message
fs/afs/super.c +12 -8
@@ -48,6 +48,8 @@ struct file_system_type afs_fs_type = { };MODULE_ALIAS_FS ("afs" ); +int afs_net_id; +static const struct super_operations afs_super_ops = { .statfs = afs_statfs, .alloc_inode = afs_alloc_inode,
@@ -117,7 +119,7 @@ int __init afs_fs_init(void)/* * clean up the filesystem */ -void __exit afs_fs_exit(void) +void afs_fs_exit (void ) {_enter ("" );
@@ -351,7 +353,7 @@ static int afs_test_super(struct super_block *sb, void *data)struct afs_super_info *as1 = data;struct afs_super_info *as =AFS_FS_S (sb); -return (as->net == as1->net && +return (as->net_ns == as1->net_ns && as->volume && as->volume->vid == as1->volume->vid); }
@@ -437,7 +439,7 @@ static struct afs_super_info *afs_alloc_sbi(struct afs_mount_params *params) as =kzalloc (sizeof (struct afs_super_info ),GFP_KERNEL );if (as) { - as->net =afs_get_net (params->net); + as->net_ns =get_net (params->net_ns);if (params->dyn_root) as->dyn_root = true;else
@@ -450,8 +452,8 @@ static void afs_destroy_sbi(struct afs_super_info *as) {if (as) {afs_put_volume (as->cell, as->volume); -afs_put_cell (as->net, as->cell); -afs_put_net (as->net); +afs_put_cell (afs_net (as->net_ns), as->cell); +put_net (as->net_ns);kfree (as); } }
@@ -472,12 +474,13 @@ static struct dentry *afs_mount(struct file_system_type *fs_type,_enter (",,%s,%p" , dev_name, options);memset (¶ms,0 ,sizeof (params)); - params.net = &__afs_net; ret = -EINVAL ;if (current->nsproxy->net_ns != &init_net) goto error; - + params.net_ns = current->nsproxy->net_ns; + params.net =afs_net (params.net_ns); +/* parse the options and device name */ if (options) { ret =afs_parse_options (¶ms, options, &dev_name);
@@ -571,7 +574,8 @@ static void afs_kill_super(struct super_block *sb)* deactivating the superblock. */ if (as->volume) -afs_clear_callback_interests (as->net, as->volume->servers); +afs_clear_callback_interests (afs_net (as->net_ns), + as->volume->servers);kill_anon_super (sb);if (as->volume)afs_deactivate_volume (as->volume);
Re: [PATCH 20/39] afs: simplify procfs code
In reply to David HowellsQuoted 11 lines · David Howells
Quoted 9 lines · David Howells
Quoted 3 lines
Use
remove_proc_subtreeto remove the whole subtree on cleanup, and unwind the registration loop into individual calls. Switch to useproc_create_seqwhere applicable.Note that this is likely going to clash with my patch to net-namespace all of the afs proc files:
https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/commit/?h=mount-context&id=f60c26c827c073583107ebf19d87bc5c0e71c3d2
Quoted 7 lines
Quoted 3 lines
If it helps, I should be able to disentangle this from the mount-api changes since the subsequent patch connects the dots to propagate the network namespace over automount using the new
fs_contextto do it.Okay, I'll follow up this mail with a pair of patches to just use network namespacing in AFS. The first exports a function from core code only; the second is the actual modifications to AFS.
I don't think you should need any of these. seq_file_net or seq_file_single_net will return you the net_ns based on a struct seq_file. And even from your write routines you can reach the seq_file in file->private pretty easily.
David Howells
maintainerRe: [PATCH 20/39] afs: simplify procfs code
Quoted 4 lines · Christoph Hellwig
I don't think you should need any of these.
seq_file_netorseq_file_single_netwill return you thenet_nsbased on a structseq_file. And even from your write routines you can reach theseq_fileinfile->privatepretty easily.
You've taken away things like single_open/release_net() which means I can't supply my own fops and use the proc_net stuff. I wonder if I should add a write op to struct proc_dir_entry.
David
PATCH 21/39 ext4: simplify procfs code
In reply to Christoph HellwigUse remove_proc_subtree to remove the whole subtree on cleanup, and unwind the registration loop into individual calls. Switch to use proc_create_seq where applicable.
--- fs/ext4/ext4.h | 2 +- fs/ext4/mballoc.c | 29 ++++------------------------ fs/ext4/sysfs.c | 49 +++++++++-------------------------------------- 3 files changed, 14 insertions(+), 66 deletions(-)
fs/ext4/ext4.h +1 -1
@@ -2390,7 +2390,7 @@ extern int ext4_init_inode_table(struct super_block *sb,extern void ext4_end_bitmap_read (struct buffer_head *bh,int uptodate);/* mballoc.c */ -extern const struct file_operations ext4_seq_mb_groups_fops; +extern const struct seq_operations ext4_mb_seq_groups_ops;extern long ext4_mb_stats;extern long ext4_mb_max_to_scan;extern int ext4_mb_init (struct super_block *);
fs/ext4/mballoc.c +4 -25
@@ -2254,7 +2254,7 @@ ext4_mb_regular_allocator(struct ext4_allocation_context *ac)static void *ext4_mb_seq_groups_start (struct seq_file *seq,loff_t *pos) { -struct super_block *sb = seq->private; +struct super_block *sb =PDE_DATA (file_inode (seq->file));ext4_group_t group;if (*pos <0 || *pos >=ext4_get_groups_count (sb))
@@ -2265,7 +2265,7 @@ static void *ext4_mb_seq_groups_start(struct seq_file *seq, loff_t *pos)static void *ext4_mb_seq_groups_next (struct seq_file *seq,void *v,loff_t *pos) { -struct super_block *sb = seq->private; +struct super_block *sb =PDE_DATA (file_inode (seq->file));ext4_group_t group; ++*pos;
@@ -2277,7 +2277,7 @@ static void *ext4_mb_seq_groups_next(struct seq_file *seq, void *v, loff_t *pos)static int ext4_mb_seq_groups_show (struct seq_file *seq,void *v) { -struct super_block *sb = seq->private; +struct super_block *sb =PDE_DATA (file_inode (seq->file));ext4_group_t group = (ext4_group_t) ((unsigned long ) v);int i;int err, buddy_loaded =0 ;
@@ -2330,34 +2330,13 @@ static void ext4_mb_seq_groups_stop(struct seq_file *seq, void *v) { } -static const struct seq_operations ext4_mb_seq_groups_ops = { +const struct seq_operations ext4_mb_seq_groups_ops = { .start = ext4_mb_seq_groups_start, .next = ext4_mb_seq_groups_next, .stop = ext4_mb_seq_groups_stop, .show = ext4_mb_seq_groups_show, }; -static int ext4_mb_seq_groups_open (struct inode *inode,struct file *file) -{ -struct super_block *sb =PDE_DATA (inode); -int rc; - - rc =seq_open (file, &ext4_mb_seq_groups_ops); -if (rc ==0 ) { -struct seq_file *m = file->private_data; - m->private = sb; - } -return rc; - -} - -const struct file_operations ext4_seq_mb_groups_fops = { - .open = ext4_mb_seq_groups_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static struct kmem_cache *get_groupinfo_cache (int blocksize_bits) {int cache_index = blocksize_bits -EXT4_MIN_BLOCK_LOG_SIZE ;
fs/ext4/sysfs.c +9 -40
72 lines not on this page · raw message
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 22/39 jfs: simplify procfs code
In reply to Christoph HellwigUse remove_proc_subtree to remove the whole subtree on cleanup, and unwind the registration loop into individual calls. Switch to use proc_create_seq where applicable.
--- fs/jfs/jfs_debug.c | 43 ++++++++++++++----------------------------- fs/jfs/jfs_debug.h | 10 +++++----- fs/jfs/jfs_logmgr.c | 14 +------------- fs/jfs/jfs_metapage.c | 14 +------------- fs/jfs/jfs_txnmgr.c | 28 ++-------------------------- fs/jfs/jfs_xtree.c | 14 +------------- 6 files changed, 24 insertions(+), 99 deletions(-)
fs/jfs/jfs_debug.c +14 -29
@@ -29,7 +29,6 @@ #ifdef PROC_FS_JFS /* see jfs_debug.h */ -static struct proc_dir_entry *base; #ifdef CONFIG_JFS_DEBUG static int jfs_loglevel_proc_show(struct seq_file *m, void *v) {
@@ -66,43 +65,29 @@ static const struct file_operations jfs_loglevel_proc_fops = { };#endif -static struct { -const char *name; -const struct file_operations *proc_fops; -} Entries[] = { -#ifdef CONFIG_JFS_STATISTICS - {"lmstats" , &jfs_lmstats_proc_fops, }, - {"txstats" , &jfs_txstats_proc_fops, }, - {"xtstat" , &jfs_xtstat_proc_fops, }, - {"mpstat" , &jfs_mpstat_proc_fops, }, -#endif -#ifdef CONFIG_JFS_DEBUG - {"TxAnchor" , &jfs_txanchor_proc_fops, }, - {"loglevel" , &jfs_loglevel_proc_fops } -#endif -}; -#define NPROCENT ARRAY_SIZE(Entries) -void jfs_proc_init (void ) { -int i; +struct proc_dir_entry *base; -if (!(base =proc_mkdir ("fs/jfs" ,NULL ))) + base =proc_mkdir ("fs/jfs" ,NULL ); +if (!base)return ; -for (i =0 ; i <NPROCENT ; i++) -proc_create (Entries[i].name,0 , base, Entries[i].proc_fops); +#ifdef CONFIG_JFS_STATISTICS +proc_create_single ("lmstats" ,0 , base, jfs_lmstats_proc_show); +proc_create_single ("txstats" ,0 , base, jfs_txstats_proc_show); +proc_create_single ("xtstat" ,0 , base, jfs_xtstat_proc_show); +proc_create_single ("mpstat" ,0 , base, jfs_mpstat_proc_show); +#endif +#ifdef CONFIG_JFS_DEBUG +proc_create_single ("TxAnchor" ,0 , base, jfs_txanchor_proc_show); +proc_create ("loglevel" ,0 , base, &jfs_loglevel_proc_fops); +#endif }void jfs_proc_clean (void ) { -int i; - -if (base) { -for (i =0 ; i <NPROCENT ; i++) -remove_proc_entry (Entries[i].name, base); -remove_proc_entry ("fs/jfs" ,NULL ); - } +remove_proc_subtree ("fs/jfs" ,NULL ); }#endif /* PROC_FS_JFS */
fs/jfs/jfs_debug.h +5 -5
@@ -62,7 +62,7 @@ extern void jfs_proc_clean(void);extern int jfsloglevel; -extern const struct file_operations jfs_txanchor_proc_fops; +int jfs_txanchor_proc_show (struct seq_file *m,void *v);/* information message: e.g., configuration, major event */ #define jfs_info(fmt, arg...) do { \
@@ -105,10 +105,10 @@ extern const struct file_operations jfs_txanchor_proc_fops;* ---------- */ #ifdef CONFIG_JFS_STATISTICS -extern const struct file_operations jfs_lmstats_proc_fops; -extern const struct file_operations jfs_txstats_proc_fops; -extern const struct file_operations jfs_mpstat_proc_fops; -extern const struct file_operations jfs_xtstat_proc_fops; +int jfs_lmstats_proc_show (struct seq_file *m,void *v); +int jfs_txstats_proc_show (struct seq_file *m,void *v); +int jfs_mpstat_proc_show (struct seq_file *m,void *v); +int jfs_xtstat_proc_show (struct seq_file *m,void *v);#define INCREMENT (x) ((x)++)#define DECREMENT (x) ((x)--)
fs/jfs/jfs_logmgr.c +1 -13
@@ -2493,7 +2493,7 @@ int lmLogFormat(struct jfs_log *log, s64 logAddress, int logSize) }#ifdef CONFIG_JFS_STATISTICS -static int jfs_lmstats_proc_show (struct seq_file *m,void *v) +int jfs_lmstats_proc_show (struct seq_file *m,void *v) {seq_printf (m, "JFS Logmgr stats\n"
@@ -2510,16 +2510,4 @@ static int jfs_lmstats_proc_show(struct seq_file *m, void *v) lmStat.partial_page); return 0; } - -static int jfs_lmstats_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, jfs_lmstats_proc_show,NULL ); -} - -const struct file_operations jfs_lmstats_proc_fops = { - .open = jfs_lmstats_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif /* CONFIG_JFS_STATISTICS */
fs/jfs/jfs_metapage.c +1 -13
@@ -815,7 +815,7 @@ void __invalidate_metapages(struct inode *ip, s64 addr, int len) }#ifdef CONFIG_JFS_STATISTICS -static int jfs_mpstat_proc_show (struct seq_file *m,void *v) +int jfs_mpstat_proc_show (struct seq_file *m,void *v) {seq_printf (m, "JFS Metapage statistics\n"
@@ -828,16 +828,4 @@ static int jfs_mpstat_proc_show(struct seq_file *m, void *v) mpStat.lockwait); return 0; } - -static int jfs_mpstat_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, jfs_mpstat_proc_show,NULL ); -} - -const struct file_operations jfs_mpstat_proc_fops = { - .open = jfs_mpstat_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif
fs/jfs/jfs_txnmgr.c +2 -26
@@ -2998,7 +2998,7 @@ int jfs_sync(void *arg) }#if defined(CONFIG_PROC_FS ) && defined(CONFIG_JFS_DEBUG ) -static int jfs_txanchor_proc_show (struct seq_file *m,void *v) +int jfs_txanchor_proc_show (struct seq_file *m,void *v) {char *freewait;char *freelockwait;
@@ -3032,22 +3032,10 @@ static int jfs_txanchor_proc_show(struct seq_file *m, void *v) list_empty(&TxAnchor.unlock_queue) ? "" : "not ");return 0 ; } - -static int jfs_txanchor_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, jfs_txanchor_proc_show,NULL ); -} - -const struct file_operations jfs_txanchor_proc_fops = { - .open = jfs_txanchor_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif #if defined(CONFIG_PROC_FS ) && defined(CONFIG_JFS_STATISTICS ) -static int jfs_txstats_proc_show (struct seq_file *m,void *v) +int jfs_txstats_proc_show (struct seq_file *m,void *v) {seq_printf (m, "JFS TxStats\n"
@@ -3072,16 +3060,4 @@ static int jfs_txstats_proc_show(struct seq_file *m, void *v) TxStat.txLockAlloc_freelock); return 0; } - -static int jfs_txstats_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, jfs_txstats_proc_show,NULL ); -} - -const struct file_operations jfs_txstats_proc_fops = { - .open = jfs_txstats_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif
fs/jfs/jfs_xtree.c +1 -13
@@ -3874,7 +3874,7 @@ s64 xtTruncate_pmap(tid_t tid, struct inode *ip, s64 committed_size) }#ifdef CONFIG_JFS_STATISTICS -static int jfs_xtstat_proc_show (struct seq_file *m,void *v) +int jfs_xtstat_proc_show (struct seq_file *m,void *v) {seq_printf (m, "JFS Xtree statistics\n"
@@ -3887,16 +3887,4 @@ static int jfs_xtstat_proc_show(struct seq_file *m, void *v) xtStat.split); return 0; } - -static int jfs_xtstat_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, jfs_xtstat_proc_show,NULL ); -} - -const struct file_operations jfs_xtstat_proc_fops = { - .open = jfs_xtstat_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif
Signature · 1 line
2.17.0
PATCH 23/39 staging/rtl8192u: simplify procfs code
In reply to Christoph HellwigUnwind the registration loop into individual calls. Switch to use proc_create_single where applicable.
--- drivers/staging/rtl8192u/r8192U_core.c | 67 ++++++-------------------- 1 file changed, 14 insertions(+), 53 deletions(-)
drivers/staging/rtl8192u/r8192U_core.c +14 -53
@@ -646,64 +646,25 @@ static void rtl8192_proc_module_init(void) rtl8192_proc =proc_mkdir (RTL819xU_MODULE_NAME, init_net.proc_net); } -/* -* seq_file wrappers for procfile show routines. -*/ -static int rtl8192_proc_open (struct inode *inode,struct file *file) -{ -struct net_device *dev =proc_get_parent_data (inode); -int (*show)(struct seq_file *,void *) =PDE_DATA (inode); - -return single_open (file, show, dev); -} - -static const struct file_operations rtl8192_proc_fops = { - .open = rtl8192_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -/* -* Table of proc files we need to create. -*/ -struct rtl8192_proc_file { -char name[12 ]; -int (*show)(struct seq_file *,void *); -}; - -static const struct rtl8192_proc_file rtl8192_proc_files[] = { - {"stats-rx" , &proc_get_stats_rx }, - {"stats-tx" , &proc_get_stats_tx }, - {"stats-ap" , &proc_get_stats_ap }, - {"registers" , &proc_get_registers }, - {"" } -}; -static void rtl8192_proc_init_one (struct net_device *dev) { -const struct rtl8192_proc_file *f;struct proc_dir_entry *dir; -if (rtl8192_proc) { - dir =proc_mkdir_data (dev->name,0 , rtl8192_proc, dev); -if (!dir) { -RT_TRACE (COMP_ERR , -"Unable to initialize /proc/net/rtl8192/%s\n" , - dev->name); -return ; - } +if (!rtl8192_proc) +return ; -for (f = rtl8192_proc_files; f->name[0 ]; f++) { -if (!proc_create_data (f->name,S_IFREG |S_IRUGO , dir, - &rtl8192_proc_fops, f->show)) { -RT_TRACE (COMP_ERR , -"Unable to initialize /proc/net/rtl8192/%s/%s\n" , - dev->name, f->name); -return ; - } - } - } + dir =proc_mkdir_data (dev->name,0 , rtl8192_proc, dev); +if (!dir) +return ; + +proc_create_single ("stats-rx" ,S_IFREG |S_IRUGO , dir, + proc_get_stats_rx); +proc_create_single ("stats-tx" ,S_IFREG |S_IRUGO , dir, + proc_get_stats_tx); +proc_create_single ("stats-ap" ,S_IFREG |S_IRUGO , dir, + proc_get_stats_ap); +proc_create_single ("registers" ,S_IFREG |S_IRUGO , dir, + proc_get_registers); }static void rtl8192_proc_remove_one (struct net_device *dev)
Signature · 1 line
2.17.0
PATCH 24/39 resource: switch to proc_create_seq_data
In reply to Christoph HellwigAnd use the root resource directly from the proc private data.
--- kernel/resource.c | 43 +++++-------------------------------------- 1 file changed, 5 insertions(+), 38 deletions(-)
kernel/resource.c +5 -38
@@ -87,7 +87,7 @@ enum { MAX_IORES_LEVEL = 5 };static void *r_start (struct seq_file *m,loff_t *pos)__acquires (resource_lock) { -struct resource *p = m->private; +struct resource *p =PDE_DATA (file_inode (m->file));loff_t l =0 ;read_lock (&resource_lock);for (p = p->child; p && l < *pos; p =r_next (m, p, &l))
@@ -103,7 +103,7 @@ static void r_stop(struct seq_file *m, void *v)static int r_show (struct seq_file *m,void *v) { -struct resource *root = m->private; +struct resource *root =PDE_DATA (file_inode (m->file));struct resource *r = v, *p;unsigned long long start, end;int width = root->end <0x10000 ?4 :8 ;
@@ -135,44 +135,11 @@ static const struct seq_operations resource_op = { .show = r_show, }; -static int ioports_open (struct inode *inode,struct file *file) -{ -int res =seq_open (file, &resource_op); -if (!res) { -struct seq_file *m = file->private_data; - m->private = &ioport_resource; - } -return res; -} - -static int iomem_open (struct inode *inode,struct file *file) -{ -int res =seq_open (file, &resource_op); -if (!res) { -struct seq_file *m = file->private_data; - m->private = &iomem_resource; - } -return res; -} - -static const struct file_operations proc_ioports_operations = { - .open = ioports_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; - -static const struct file_operations proc_iomem_operations = { - .open = iomem_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static int __init ioresources_init (void ) { -proc_create ("ioports" ,0 ,NULL , &proc_ioports_operations); -proc_create ("iomem" ,0 ,NULL , &proc_iomem_operations); +proc_create_seq_data ("ioports" ,0 ,NULL , &resource_op, + &ioport_resource); +proc_create_seq_data ("iomem" ,0 ,NULL , &resource_op, &iomem_resource);return 0 ; }__initcall (ioresources_init);
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 25/39 drbd: switch to proc_create_single
In reply to Christoph HellwigAnd stop messing with try_module_get on THIS_MODULE, which doesn't make any sense here.
--- drivers/block/drbd/drbd_int.h | 2 +- drivers/block/drbd/drbd_main.c | 3 ++- drivers/block/drbd/drbd_proc.c | 34 +--------------------------------- 3 files changed, 4 insertions(+), 35 deletions(-)
drivers/block/drbd/drbd_int.h +1 -1
@@ -1643,7 +1643,7 @@ void drbd_bump_write_ordering(struct drbd_resource *resource, struct drbd_backin/* drbd_proc.c */ extern struct proc_dir_entry *drbd_proc; -extern const struct file_operations drbd_proc_fops; +int drbd_seq_show (struct seq_file *seq,void *v);/* drbd_actlog.c */ extern bool drbd_al_begin_io_prepare (struct drbd_device *device,struct drbd_interval *i);
drivers/block/drbd/drbd_main.c +2 -1
@@ -3010,7 +3010,8 @@ static int __init drbd_init(void) goto fail; err = -ENOMEM ; - drbd_proc =proc_create_data ("drbd" ,S_IFREG |S_IRUGO ,NULL , &drbd_proc_fops,NULL ); + drbd_proc =proc_create_single ("drbd" ,S_IFREG |S_IRUGO ,NULL , + drbd_seq_show);if (!drbd_proc) {pr_err ("unable to register proc file\n" ); goto fail;
drivers/block/drbd/drbd_proc.c +1 -33
@@ -33,18 +33,7 @@#include <linux/drbd.h> #include "drbd_int.h" -static int drbd_proc_open (struct inode *inode,struct file *file); -static int drbd_proc_release (struct inode *inode,struct file *file); - -struct proc_dir_entry *drbd_proc; -const struct file_operations drbd_proc_fops = { - .owner =THIS_MODULE , - .open = drbd_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = drbd_proc_release, -};static void seq_printf_with_thousands_grouping (struct seq_file *seq,long v) {
@@ -235,7 +224,7 @@ static void drbd_syncer_progress(struct drbd_device *device, struct seq_file *se } } -static int drbd_seq_show (struct seq_file *seq,void *v) +int drbd_seq_show (struct seq_file *seq,void *v) {int i, prev_i =-1 ;const char *sn;
@@ -345,24 +334,3 @@ static int drbd_seq_show(struct seq_file *seq, void *v)return 0 ; } - -static int drbd_proc_open (struct inode *inode,struct file *file) -{ -int err; - -if (try_module_get (THIS_MODULE )) { - err =single_open (file, drbd_seq_show,NULL ); -if (err) -module_put (THIS_MODULE ); -return err; - } -return -ENODEV ; -} - -static int drbd_proc_release (struct inode *inode,struct file *file) -{ -module_put (THIS_MODULE ); -return single_release (inode, file); -} - -/* PROC FS stuff end */
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 26/39 rtc/proc: switch to proc_create_single_data
In reply to Christoph HellwigAnd stop trying to get a reference on the submodule, procfs code deals with release after and unloaded module and thus removed proc entry.
--- drivers/rtc/rtc-proc.c | 33 ++------------------------------- 1 file changed, 2 insertions(+), 31 deletions(-)
drivers/rtc/rtc-proc.c +2 -31
@@ -107,40 +107,11 @@ static int rtc_proc_show(struct seq_file *seq, void *offset)return 0 ; } -static int rtc_proc_open (struct inode *inode,struct file *file) -{ -int ret; -struct rtc_device *rtc =PDE_DATA (inode); - -if (!try_module_get (rtc->owner)) -return -ENODEV ; - - ret =single_open (file, rtc_proc_show, rtc); -if (ret) -module_put (rtc->owner); -return ret; -} - -static int rtc_proc_release (struct inode *inode,struct file *file) -{ -int res =single_release (inode, file); -struct rtc_device *rtc =PDE_DATA (inode); - -module_put (rtc->owner); -return res; -} - -static const struct file_operations rtc_proc_fops = { - .open = rtc_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = rtc_proc_release, -}; -void rtc_proc_add_device (struct rtc_device *rtc) {if (is_rtc_hctosys (rtc)) -proc_create_data ("driver/rtc" ,0 ,NULL , &rtc_proc_fops, rtc); +proc_create_single_data ("driver/rtc" ,0 ,NULL , rtc_proc_show, + rtc); }void rtc_proc_del_device (struct rtc_device *rtc)
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Alexandre Belloni
maintainerRe: [PATCH 26/39] rtc/proc: switch to proc_create_single_data
Quoted 3 lines · Christoph Hellwig
And stop trying to get a reference on the submodule, procfs code deals with release after and unloaded module and thus removed proc entry.
Are you sure about that? The rtc module is not the one adding the procfs file so I'm not sure how the procfs code can handle it.
Quoted 55 lines
Signed-off-by Christoph Hellwig <[email protected]>--- drivers/rtc/rtc-proc.c | 33 ++------------------------------- 1 file changed, 2 insertions(+), 31 deletions(-)drivers/rtc/rtc-proc.c +2
-31@@ -107,40 +107,11 @@ static int rtc_proc_show(struct seq_file *seq, void *offset)return 0 ; } -static int rtc_proc_open (struct inode *inode,struct file *file) -{ -int ret; -struct rtc_device *rtc =PDE_DATA (inode); - -if (!try_module_get (rtc->owner)) -return -ENODEV ; - - ret =single_open (file, rtc_proc_show, rtc); -if (ret) -module_put (rtc->owner); -return ret; -} - -static int rtc_proc_release (struct inode *inode,struct file *file) -{ -int res =single_release (inode, file); -struct rtc_device *rtc =PDE_DATA (inode); - -module_put (rtc->owner); -return res; -} - -static const struct file_operations rtc_proc_fops = { - .open = rtc_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = rtc_proc_release, -}; -void rtc_proc_add_device (struct rtc_device *rtc) {if (is_rtc_hctosys (rtc)) -proc_create_data ("driver/rtc" ,0 ,NULL , &rtc_proc_fops, rtc); +proc_create_single_data ("driver/rtc" ,0 ,NULL , rtc_proc_show, + rtc); }void rtc_proc_del_device (struct rtc_device *rtc)Signature · 1 line
2.17.0
Signature · 3 lines
Alexandre Belloni, Bootlin (formerly Free Electrons) Embedded Linux and Kernel engineering https://bootlin.com
Re: [PATCH 26/39] rtc/proc: switch to proc_create_single_data
Quoted 7 lines · Alexandre Belloni
Quoted 3 lines · Christoph Hellwig
And stop trying to get a reference on the submodule, procfs code deals with release after and unloaded module and thus removed proc entry.
Are you sure about that? The rtc module is not the one adding the procfs file so I'm not sure how the procfs code can handle it.
The proc file is removed from this call chain:
<driver>_exit (module_exit handler)
-> rtc_device_unregister
-> rtc_proc_del_device
-> remove_proc_entryremove_proc_entry takes care of waiting for currently active file operation instances and makes sure every new operation never calls into the actual proc file ops. Same behavior as in RTC exists all over the kernel.
PATCH 27/39 bonding: switch to proc_create_seq_data
In reply to Christoph HellwigAnd use proc private data directly instead of doing a detour through seq->private.
--- drivers/net/bonding/bond_procfs.c | 36 ++++++------------------------- 1 file changed, 6 insertions(+), 30 deletions(-)
drivers/net/bonding/bond_procfs.c +6 -30
@@ -10,7 +10,7 @@static void *bond_info_seq_start (struct seq_file *seq,loff_t *pos)__acquires (RCU ) { -struct bonding *bond = seq->private; +struct bonding *bond =PDE_DATA (file_inode (seq->file));struct list_head *iter;struct slave *slave;loff_t off =0 ;
@@ -29,7 +29,7 @@ static void *bond_info_seq_start(struct seq_file *seq, loff_t *pos)static void *bond_info_seq_next (struct seq_file *seq,void *v,loff_t *pos) { -struct bonding *bond = seq->private; +struct bonding *bond =PDE_DATA (file_inode (seq->file));struct list_head *iter;struct slave *slave;bool found = false;
@@ -56,7 +56,7 @@ static void bond_info_seq_stop(struct seq_file *seq, void *v)static void bond_info_show_master (struct seq_file *seq) { -struct bonding *bond = seq->private; +struct bonding *bond =PDE_DATA (file_inode (seq->file));const struct bond_opt_value *optval;struct slave *curr, *primary;int i;
@@ -167,7 +167,7 @@ static void bond_info_show_master(struct seq_file *seq)static void bond_info_show_slave (struct seq_file *seq,const struct slave *slave) { -struct bonding *bond = seq->private; +struct bonding *bond =PDE_DATA (file_inode (seq->file));seq_printf (seq,"\nSlave Interface: %s\n" , slave->dev->name);seq_printf (seq,"MII Status: %s\n" ,bond_slave_link_status (slave->link));
@@ -257,38 +257,14 @@ static const struct seq_operations bond_info_seq_ops = { .show = bond_info_seq_show, }; -static int bond_info_open (struct inode *inode,struct file *file) -{ -struct seq_file *seq; -int res; - - res =seq_open (file, &bond_info_seq_ops); -if (!res) { -/* recover the pointer buried in proc_dir_entry data */ - seq = file->private_data; - seq->private =PDE_DATA (inode); - } - -return res; -} - -static const struct file_operations bond_info_fops = { - .owner =THIS_MODULE , - .open = bond_info_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -void bond_create_proc_entry (struct bonding *bond) {struct net_device *bond_dev = bond->dev;struct bond_net *bn =net_generic (dev_net (bond_dev), bond_net_id);if (bn->proc_dir) { - bond->proc_entry =proc_create_data (bond_dev->name, -0444 , bn->proc_dir, - &bond_info_fops, bond); + bond->proc_entry =proc_create_seq_data (bond_dev->name,0444 , + bn->proc_dir, &bond_info_seq_ops, bond);if (bond->proc_entry ==NULL )netdev_warn (bond_dev,"Cannot create /proc/net/%s/%s\n" ,DRV_NAME , bond_dev->name);
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 28/39 hostap: switch to proc_create_{seq,single}_data
In reply to Christoph HellwigAnd use proc private data directly instead of doing a detour through seq->private.
--- .../net/wireless/intersil/hostap/hostap_ap.c | 70 ++------- .../net/wireless/intersil/hostap/hostap_hw.c | 17 +-- .../wireless/intersil/hostap/hostap_proc.c | 143 +++--------------- 3 files changed, 39 insertions(+), 191 deletions(-)
drivers/net/wireless/intersil/hostap/hostap_ap.c +12 -58
@@ -69,7 +69,7 @@ static void prism2_send_mgmt(struct net_device *dev,#ifndef PRISM2_NO_PROCFS_DEBUG static int ap_debug_proc_show (struct seq_file *m,void *v) { -struct ap_data *ap = m->private; +struct ap_data *ap =PDE_DATA (file_inode (m->file));seq_printf (m,"BridgedUnicastFrames=%u\n" , ap->bridged_unicast);seq_printf (m,"BridgedMulticastFrames=%u\n" , ap->bridged_multicast);
@@ -81,18 +81,6 @@ static int ap_debug_proc_show(struct seq_file *m, void *v)seq_printf (m,"tx_drop_nonassoc=%u\n" , ap->tx_drop_nonassoc); return 0; } - -static int ap_debug_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, ap_debug_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations ap_debug_proc_fops = { - .open = ap_debug_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif /* PRISM2_NO_PROCFS_DEBUG */
@@ -333,7 +321,7 @@ void hostap_deauth_all_stas(struct net_device *dev, struct ap_data *ap,static int ap_control_proc_show (struct seq_file *m,void *v) { -struct ap_data *ap = m->private; +struct ap_data *ap =PDE_DATA (file_inode (m->file));char *policy_txt;struct mac_entry *entry;
@@ -365,20 +353,20 @@ static int ap_control_proc_show(struct seq_file *m, void *v)static void *ap_control_proc_start (struct seq_file *m,loff_t *_pos) { -struct ap_data *ap = m->private; +struct ap_data *ap =PDE_DATA (file_inode (m->file));spin_lock_bh (&ap->mac_restrictions.lock);return seq_list_start_head (&ap->mac_restrictions.mac_list, *_pos); }static void *ap_control_proc_next (struct seq_file *m,void *v,loff_t *_pos) { -struct ap_data *ap = m->private; +struct ap_data *ap =PDE_DATA (file_inode (m->file));return seq_list_next (v, &ap->mac_restrictions.mac_list, _pos); }static void ap_control_proc_stop (struct seq_file *m,void *v) { -struct ap_data *ap = m->private; +struct ap_data *ap =PDE_DATA (file_inode (m->file));spin_unlock_bh (&ap->mac_restrictions.lock); }
@@ -389,24 +377,6 @@ static const struct seq_operations ap_control_proc_seqops = { .show = ap_control_proc_show, }; -static int ap_control_proc_open (struct inode *inode,struct file *file) -{ -int ret =seq_open (file, &ap_control_proc_seqops); -if (ret ==0 ) { -struct seq_file *m = file->private_data; - m->private =PDE_DATA (inode); - } -return ret; -} - -static const struct file_operations ap_control_proc_fops = { - .open = ap_control_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; - -int ap_control_add_mac (struct mac_restrictions *mac_restrictions,u8 *mac) {struct mac_entry *entry;
@@ -585,20 +555,20 @@ static int prism2_ap_proc_show(struct seq_file *m, void *v)static void *prism2_ap_proc_start (struct seq_file *m,loff_t *_pos) { -struct ap_data *ap = m->private; +struct ap_data *ap =PDE_DATA (file_inode (m->file));spin_lock_bh (&ap->sta_table_lock);return seq_list_start_head (&ap->sta_list, *_pos); }static void *prism2_ap_proc_next (struct seq_file *m,void *v,loff_t *_pos) { -struct ap_data *ap = m->private; +struct ap_data *ap =PDE_DATA (file_inode (m->file));return seq_list_next (v, &ap->sta_list, _pos); }static void prism2_ap_proc_stop (struct seq_file *m,void *v) { -struct ap_data *ap = m->private; +struct ap_data *ap =PDE_DATA (file_inode (m->file));spin_unlock_bh (&ap->sta_table_lock); }
@@ -608,23 +578,6 @@ static const struct seq_operations prism2_ap_proc_seqops = { .stop = prism2_ap_proc_stop, .show = prism2_ap_proc_show, }; - -static int prism2_ap_proc_open (struct inode *inode,struct file *file) -{ -int ret =seq_open (file, &prism2_ap_proc_seqops); -if (ret ==0 ) { -struct seq_file *m = file->private_data; - m->private =PDE_DATA (inode); - } -return ret; -} - -static const struct file_operations prism2_ap_proc_fops = { - .open = prism2_ap_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -};#endif /* PRISM2_NO_KERNEL_IEEE80211_MGMT */
@@ -896,12 +849,13 @@ void hostap_init_ap_proc(local_info_t *local)return ;#ifndef PRISM2_NO_PROCFS_DEBUG -proc_create_data ("ap_debug" ,0 , ap->proc, &ap_debug_proc_fops, ap); +proc_create_single_data ("ap_debug" ,0 , ap->proc, ap_debug_proc_show, ap);#endif /* PRISM2_NO_PROCFS_DEBUG */ #ifndef PRISM2_NO_KERNEL_IEEE80211_MGMT -proc_create_data ("ap_control" ,0 , ap->proc, &ap_control_proc_fops, ap); -proc_create_data ("ap" ,0 , ap->proc, &prism2_ap_proc_fops, ap); +proc_create_seq_data ("ap_control" ,0 , ap->proc, &ap_control_proc_seqops, + ap); +proc_create_seq_data ("ap" ,0 , ap->proc, &prism2_ap_proc_seqops, ap);#endif /* PRISM2_NO_KERNEL_IEEE80211_MGMT */ }
drivers/net/wireless/intersil/hostap/hostap_hw.c +2 -15
@@ -2951,19 +2951,6 @@ static int prism2_registers_proc_show(struct seq_file *m, void *v) return 0; } - -static int prism2_registers_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, prism2_registers_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations prism2_registers_proc_fops = { - .open = prism2_registers_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -#endif /* PRISM2_NO_PROCFS_DEBUG */
@@ -3279,8 +3266,8 @@ static int hostap_hw_ready(struct net_device *dev) }hostap_init_proc (local);#ifndef PRISM2_NO_PROCFS_DEBUG -proc_create_data ("registers" ,0 , local->proc, - &prism2_registers_proc_fops, local); +proc_create_single_data ("registers" ,0 , local->proc, + prism2_registers_proc_show, local);#endif /* PRISM2_NO_PROCFS_DEBUG */ hostap_init_ap_proc (local);return 0 ;
drivers/net/wireless/intersil/hostap/hostap_proc.c +25 -118
254 lines not on this page · raw message
Signature · 1 line
2.17.0
PATCH 29/39 neigh: switch to proc_create_seq_data
In reply to Christoph HellwigAnd use proc private data directly instead of doing a detour through seq->private.
--- net/core/neighbour.c | 31 ++++++------------------------- 1 file changed, 6 insertions(+), 25 deletions(-)
net/core/neighbour.c +6 -25
@@ -58,7 +58,7 @@ static void neigh_update_notify(struct neighbour *neigh, u32 nlmsg_pid);static int pneigh_ifdown (struct neigh_table *tbl,struct net_device *dev);#ifdef CONFIG_PROC_FS -static const struct file_operations neigh_stat_seq_fops; +static const struct seq_operations neigh_stat_seq_ops;#endif /*
@@ -1550,8 +1550,8 @@ void neigh_table_init(int index, struct neigh_table *tbl)panic ("cannot create neighbour cache statistics" );#ifdef CONFIG_PROC_FS -if (!proc_create_data (tbl->id,0 , init_net.proc_net_stat, - &neigh_stat_seq_fops, tbl)) +if (!proc_create_seq_data (tbl->id,0 , init_net.proc_net_stat, + &neigh_stat_seq_ops, tbl))panic ("cannot create neighbour proc dir entry" );#endif
@@ -2774,7 +2774,7 @@ EXPORT_SYMBOL(neigh_seq_stop);static void *neigh_stat_seq_start (struct seq_file *seq,loff_t *pos) { -struct neigh_table *tbl = seq->private; +struct neigh_table *tbl =PDE_DATA (file_inode (seq->file));int cpu;if (*pos ==0 )
@@ -2791,7 +2791,7 @@ static void *neigh_stat_seq_start(struct seq_file *seq, loff_t *pos)static void *neigh_stat_seq_next (struct seq_file *seq,void *v,loff_t *pos) { -struct neigh_table *tbl = seq->private; +struct neigh_table *tbl =PDE_DATA (file_inode (seq->file));int cpu;for (cpu = *pos; cpu < nr_cpu_ids; ++cpu) {
@@ -2810,7 +2810,7 @@ static void neigh_stat_seq_stop(struct seq_file *seq, void *v)static int neigh_stat_seq_show (struct seq_file *seq,void *v) { -struct neigh_table *tbl = seq->private; +struct neigh_table *tbl =PDE_DATA (file_inode (seq->file));struct neigh_statistics *st = v;if (v ==SEQ_START_TOKEN ) {
@@ -2849,25 +2849,6 @@ static const struct seq_operations neigh_stat_seq_ops = { .stop = neigh_stat_seq_stop, .show = neigh_stat_seq_show, }; - -static int neigh_stat_seq_open (struct inode *inode,struct file *file) -{ -int ret =seq_open (file, &neigh_stat_seq_ops); - -if (!ret) { -struct seq_file *sf = file->private_data; - sf->private =PDE_DATA (inode); - } -return ret; -}; - -static const struct file_operations neigh_stat_seq_fops = { - .open = neigh_stat_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -#endif /* CONFIG_PROC_FS */ static inline size_t neigh_nlmsg_size (void )
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 30/39 netfilter/xt_hashlimit: switch to proc_create_{seq,single}_data
In reply to Christoph HellwigAnd use proc private data directly instead of doing a detour through seq->private.
--- net/netfilter/xt_hashlimit.c | 92 +++++++----------------------------- 1 file changed, 18 insertions(+), 74 deletions(-)
net/netfilter/xt_hashlimit.c +18 -74
@@ -57,9 +57,9 @@ static inline struct hashlimit_net *hashlimit_pernet(struct net *net) }/* need to declare this at the top */ -static const struct file_operations dl_file_ops_v2; -static const struct file_operations dl_file_ops_v1; -static const struct file_operations dl_file_ops; +static const struct seq_operations dl_seq_ops_v2; +static const struct seq_operations dl_seq_ops_v1; +static const struct seq_operations dl_seq_ops;/* hash table crap */ struct dsthash_dst {
@@ -272,7 +272,7 @@ static int htable_create(struct net *net, struct hashlimit_cfg3 *cfg, {struct hashlimit_net *hashlimit_net =hashlimit_pernet (net);struct xt_hashlimit_htable *hinfo; -const struct file_operations *fops; +const struct seq_operations *ops;unsigned int size, i;int ret;
@@ -321,19 +321,19 @@ static int htable_create(struct net *net, struct hashlimit_cfg3 *cfg,switch (revision) {case 1 : - fops = &dl_file_ops_v1; + ops = &dl_seq_ops_v1;break ;case 2 : - fops = &dl_file_ops_v2; + ops = &dl_seq_ops_v2;break ;default : - fops = &dl_file_ops; + ops = &dl_seq_ops; } - hinfo->pde =proc_create_data (name,0 , + hinfo->pde =proc_create_seq_data (name,0 , (family ==NFPROTO_IPV4 ) ? hashlimit_net->ipt_hashlimit : hashlimit_net->ip6t_hashlimit, - fops, hinfo); + ops, hinfo);if (hinfo->pde ==NULL ) {kfree (hinfo->name);vfree (hinfo);
@@ -1057,7 +1057,7 @@ static struct xt_match hashlimit_mt_reg[] __read_mostly = {static void *dl_seq_start (struct seq_file *s,loff_t *pos) __acquires(htable->lock) { -struct xt_hashlimit_htable *htable = s->private; +struct xt_hashlimit_htable *htable =PDE_DATA (file_inode (s->private));unsigned int *bucket;spin_lock_bh (&htable->lock);
@@ -1074,7 +1074,7 @@ static void *dl_seq_start(struct seq_file *s, loff_t *pos)static void *dl_seq_next (struct seq_file *s,void *v,loff_t *pos) { -struct xt_hashlimit_htable *htable = s->private; +struct xt_hashlimit_htable *htable =PDE_DATA (file_inode (s->private));unsigned int *bucket = v; *pos = ++(*bucket);
@@ -1088,7 +1088,7 @@ static void *dl_seq_next(struct seq_file *s, void *v, loff_t *pos)static void dl_seq_stop (struct seq_file *s,void *v) __releases(htable->lock) { -struct xt_hashlimit_htable *htable = s->private; +struct xt_hashlimit_htable *htable =PDE_DATA (file_inode (s->private));unsigned int *bucket = v;if (!IS_ERR (bucket))
@@ -1130,7 +1130,7 @@ static void dl_seq_print(struct dsthash_ent *ent, u_int8_t family,static int dl_seq_real_show_v2 (struct dsthash_ent *ent,u_int8_t family,struct seq_file *s) { -const struct xt_hashlimit_htable *ht = s->private; +struct xt_hashlimit_htable *ht =PDE_DATA (file_inode (s->private));spin_lock (&ent->lock);/* recalculate to show accurate numbers */
@@ -1145,7 +1145,7 @@ static int dl_seq_real_show_v2(struct dsthash_ent *ent, u_int8_t family,static int dl_seq_real_show_v1 (struct dsthash_ent *ent,u_int8_t family,struct seq_file *s) { -const struct xt_hashlimit_htable *ht = s->private; +struct xt_hashlimit_htable *ht =PDE_DATA (file_inode (s->private));spin_lock (&ent->lock);/* recalculate to show accurate numbers */
@@ -1160,7 +1160,7 @@ static int dl_seq_real_show_v1(struct dsthash_ent *ent, u_int8_t family,static int dl_seq_real_show (struct dsthash_ent *ent,u_int8_t family,struct seq_file *s) { -const struct xt_hashlimit_htable *ht = s->private; +struct xt_hashlimit_htable *ht =PDE_DATA (file_inode (s->private));spin_lock (&ent->lock);/* recalculate to show accurate numbers */
@@ -1174,7 +1174,7 @@ static int dl_seq_real_show(struct dsthash_ent *ent, u_int8_t family,static int dl_seq_show_v2 (struct seq_file *s,void *v) { -struct xt_hashlimit_htable *htable = s->private; +struct xt_hashlimit_htable *htable =PDE_DATA (file_inode (s->private));unsigned int *bucket = (unsigned int *)v;struct dsthash_ent *ent;
@@ -1188,7 +1188,7 @@ static int dl_seq_show_v2(struct seq_file *s, void *v)static int dl_seq_show_v1 (struct seq_file *s,void *v) { -struct xt_hashlimit_htable *htable = s->private; +struct xt_hashlimit_htable *htable =PDE_DATA (file_inode (s->private));unsigned int *bucket = v;struct dsthash_ent *ent;
@@ -1202,7 +1202,7 @@ static int dl_seq_show_v1(struct seq_file *s, void *v)static int dl_seq_show (struct seq_file *s,void *v) { -struct xt_hashlimit_htable *htable = s->private; +struct xt_hashlimit_htable *htable =PDE_DATA (file_inode (s->private));unsigned int *bucket = v;struct dsthash_ent *ent;
@@ -1235,62 +1235,6 @@ static const struct seq_operations dl_seq_ops = { .show = dl_seq_show }; -static int dl_proc_open_v2 (struct inode *inode,struct file *file) -{ -int ret =seq_open (file, &dl_seq_ops_v2); - -if (!ret) { -struct seq_file *sf = file->private_data; - - sf->private =PDE_DATA (inode); - } -return ret; -} - -static int dl_proc_open_v1 (struct inode *inode,struct file *file) -{ -int ret =seq_open (file, &dl_seq_ops_v1); - -if (!ret) { -struct seq_file *sf = file->private_data; - sf->private =PDE_DATA (inode); - } -return ret; -} - -static int dl_proc_open (struct inode *inode,struct file *file) -{ -int ret =seq_open (file, &dl_seq_ops); - -if (!ret) { -struct seq_file *sf = file->private_data; - - sf->private =PDE_DATA (inode); - } -return ret; -} - -static const struct file_operations dl_file_ops_v2 = { - .open = dl_proc_open_v2, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release -}; - -static const struct file_operations dl_file_ops_v1 = { - .open = dl_proc_open_v1, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release -}; - -static const struct file_operations dl_file_ops = { - .open = dl_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release -}; -static int __net_init hashlimit_proc_net_init (struct net *net) {struct hashlimit_net *hashlimit_net =hashlimit_pernet (net);
Signature · 1 line
2.17.0
PATCH 31/39 netfilter/x_tables: switch to proc_create_seq_private
In reply to Christoph HellwigAnd remove proc boilerplate code.
--- net/netfilter/x_tables.c | 42 ++++++---------------------------------- 1 file changed, 6 insertions(+), 36 deletions(-)
net/netfilter/x_tables.c +6 -36
@@ -1648,22 +1648,6 @@ static const struct seq_operations xt_match_seq_ops = { .show = xt_match_seq_show, }; -static int xt_match_open (struct inode *inode,struct file *file) -{ -struct nf_mttg_trav *trav; - trav =__seq_open_private (file, &xt_match_seq_ops,sizeof (*trav)); -if (!trav) -return -ENOMEM ; -return 0 ; -} - -static const struct file_operations xt_match_ops = { - .open = xt_match_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, -}; -static void *xt_target_seq_start (struct seq_file *seq,loff_t *pos) {return xt_mttg_seq_start (seq, pos, true);
@@ -1698,22 +1682,6 @@ static const struct seq_operations xt_target_seq_ops = { .show = xt_target_seq_show, }; -static int xt_target_open (struct inode *inode,struct file *file) -{ -struct nf_mttg_trav *trav; - trav =__seq_open_private (file, &xt_target_seq_ops,sizeof (*trav)); -if (!trav) -return -ENOMEM ; -return 0 ; -} - -static const struct file_operations xt_target_ops = { - .open = xt_target_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, -}; -#define FORMAT_TABLES "_tables_names"#define FORMAT_MATCHES "_tables_matches"#define FORMAT_TARGETS "_tables_targets"
@@ -1787,8 +1755,9 @@ int xt_proto_init(struct net *net, u_int8_t af)strlcpy (buf, xt_prefix[af],sizeof (buf));strlcat (buf,FORMAT_MATCHES ,sizeof (buf)); - proc =proc_create_data (buf,0440 , net->proc_net, &xt_match_ops, - (void *)(unsigned long )af); + proc =proc_create_seq_private (buf,0440 , net->proc_net, + &xt_match_seq_ops,sizeof (struct nf_mttg_trav ), + (void *)(unsigned long )af);if (!proc) goto out_remove_tables;if (uid_valid (root_uid) &&gid_valid (root_gid))
@@ -1796,8 +1765,9 @@ int xt_proto_init(struct net *net, u_int8_t af)strlcpy (buf, xt_prefix[af],sizeof (buf));strlcat (buf,FORMAT_TARGETS ,sizeof (buf)); - proc =proc_create_data (buf,0440 , net->proc_net, &xt_target_ops, - (void *)(unsigned long )af); + proc =proc_create_seq_private (buf,0440 , net->proc_net, + &xt_target_seq_ops,sizeof (struct nf_mttg_trav ), + (void *)(unsigned long )af);if (!proc) goto out_remove_matches;if (uid_valid (root_uid) &&gid_valid (root_gid))
Signature · 1 line
2.17.0
PATCH 32/39 bluetooth: switch to proc_create_seq_data
In reply to Christoph HellwigAnd use proc private data directly instead of doing a detour through seq->private and private state.
--- net/bluetooth/af_bluetooth.c | 40 +++++------------------------------- 1 file changed, 5 insertions(+), 35 deletions(-)
net/bluetooth/af_bluetooth.c +5 -35
@@ -605,15 +605,10 @@ int bt_sock_wait_ready(struct sock *sk, unsigned long flags)EXPORT_SYMBOL (bt_sock_wait_ready);#ifdef CONFIG_PROC_FS -struct bt_seq_state { -struct bt_sock_list *l; -}; -static void *bt_seq_start (struct seq_file *seq,loff_t *pos) __acquires(seq->private->l->lock) { -struct bt_seq_state *s = seq->private; -struct bt_sock_list *l = s->l; +struct bt_sock_list *l =PDE_DATA (file_inode (seq->file));read_lock (&l->lock);return seq_hlist_start_head (&l->head, *pos);
@@ -621,8 +616,7 @@ static void *bt_seq_start(struct seq_file *seq, loff_t *pos)static void *bt_seq_next (struct seq_file *seq,void *v,loff_t *pos) { -struct bt_seq_state *s = seq->private; -struct bt_sock_list *l = s->l; +struct bt_sock_list *l =PDE_DATA (file_inode (seq->file));return seq_hlist_next (v, &l->head, pos); }
@@ -630,16 +624,14 @@ static void *bt_seq_next(struct seq_file *seq, void *v, loff_t *pos)static void bt_seq_stop (struct seq_file *seq,void *v) __releases(seq->private->l->lock) { -struct bt_seq_state *s = seq->private; -struct bt_sock_list *l = s->l; +struct bt_sock_list *l =PDE_DATA (file_inode (seq->file));read_unlock (&l->lock); }static int bt_seq_show (struct seq_file *seq,void *v) { -struct bt_seq_state *s = seq->private; -struct bt_sock_list *l = s->l; +struct bt_sock_list *l =PDE_DATA (file_inode (seq->file));if (v ==SEQ_START_TOKEN ) {seq_puts (seq ,"sk RefCnt Rmem Wmem User Inode Parent" );
@@ -681,35 +673,13 @@ static const struct seq_operations bt_seq_ops = { .show = bt_seq_show, }; -static int bt_seq_open (struct inode *inode,struct file *file) -{ -struct bt_sock_list *sk_list; -struct bt_seq_state *s; - - sk_list =PDE_DATA (inode); - s =__seq_open_private (file, &bt_seq_ops, -sizeof (struct bt_seq_state )); -if (!s) -return -ENOMEM ; - - s->l = sk_list; -return 0 ; -} - -static const struct file_operations bt_fops = { - .open = bt_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private -}; -int bt_procfs_init (struct net *net,const char *name,struct bt_sock_list *sk_list,int (* seq_show)(struct seq_file *,void *)) { sk_list->custom_seq_show = seq_show; -if (!proc_create_data (name,0 , net->proc_net, &bt_fops, sk_list)) +if (!proc_create_seq_data (name,0 , net->proc_net, &bt_seq_ops, sk_list))return -ENOMEM ;return 0 ; }
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 33/39 atm: simplify procfs code
In reply to Christoph HellwigUse remove_proc_subtree to remove the whole subtree on cleanup, and unwind the registration loop into individual calls. Switch to use proc_create_seq where applicable.
--- net/atm/proc.c | 65 ++++++-------------------------------------------- 1 file changed, 7 insertions(+), 58 deletions(-)
net/atm/proc.c +7 -58
@@ -257,18 +257,6 @@ static const struct seq_operations atm_dev_seq_ops = { .show = atm_dev_seq_show, }; -static int atm_dev_seq_open (struct inode *inode,struct file *file) -{ -return seq_open (file, &atm_dev_seq_ops); -} - -static const struct file_operations devices_seq_fops = { - .open = atm_dev_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -static int pvc_seq_show (struct seq_file *seq,void *v) { static char atm_pvc_banner[] =
@@ -440,58 +428,19 @@ void atm_proc_dev_deregister(struct atm_dev *dev)kfree (dev->proc_name); } -static struct atm_proc_entry { -char *name; -const struct file_operations *proc_fops; -struct proc_dir_entry *dirent; -} atm_proc_ents[] = { - { .name ="devices" , .proc_fops = &devices_seq_fops }, - { .name ="pvc" , .proc_fops = &pvc_seq_fops }, - { .name ="svc" , .proc_fops = &svc_seq_fops }, - { .name ="vc" , .proc_fops = &vcc_seq_fops }, - { .name =NULL , .proc_fops =NULL } -}; - -static void atm_proc_dirs_remove (void ) -{ -static struct atm_proc_entry *e; - -for (e = atm_proc_ents; e->name; e++) { -if (e->dirent) -remove_proc_entry (e->name, atm_proc_root); - } -remove_proc_entry ("atm" , init_net.proc_net); -} -int __init atm_proc_init (void ) { -static struct atm_proc_entry *e; -int ret; - atm_proc_root =proc_net_mkdir (&init_net,"atm" , init_net.proc_net);if (!atm_proc_root) - goto err_out; -for (e = atm_proc_ents; e->name; e++) { -struct proc_dir_entry *dirent; - - dirent =proc_create (e->name,0444 , - atm_proc_root, e->proc_fops); -if (!dirent) - goto err_out_remove; - e->dirent = dirent; - } - ret =0 ; -out: -return ret; - -err_out_remove: -atm_proc_dirs_remove (); -err_out: - ret = -ENOMEM ; - goto out; +return -ENOMEM ; +proc_create_seq ("devices" ,0444 , atm_proc_root, &atm_dev_seq_ops); +proc_create ("pvc" ,0444 , atm_proc_root, &pvc_seq_fops); +proc_create ("svc" ,0444 , atm_proc_root, &svc_seq_fops); +proc_create ("vc" ,0444 , atm_proc_root, &vcc_seq_fops); +return 0 ; }void atm_proc_exit (void ) { -atm_proc_dirs_remove (); +remove_proc_subtree ("atm" , init_net.proc_net); }
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 34/39 atm: switch to proc_create_seq_private
In reply to Christoph HellwigAnd remove proc boilerplate code.
--- net/atm/proc.c | 72 +++++++++----------------------------------------- 1 file changed, 13 insertions(+), 59 deletions(-)
net/atm/proc.c +13 -59
@@ -68,7 +68,6 @@ static void atm_dev_info(struct seq_file *seq, const struct atm_dev *dev)struct vcc_state {int bucket;struct sock *sk; -int family; };static inline int compare_family (struct sock *sk,int family)
@@ -106,23 +105,13 @@ static int __vcc_walk(struct sock **sock, int family, int *bucket, loff_t l)return (l <0 ); } -static inline void *vcc_walk (struct vcc_state *state,loff_t l) +static inline void *vcc_walk (struct seq_file *seq,loff_t l) { -return __vcc_walk (&state->sk, state->family, &state->bucket, l) ? - state :NULL ; -} - -static int __vcc_seq_open (struct inode *inode,struct file *file, -int family,const struct seq_operations *ops) -{ -struct vcc_state *state; - - state =__seq_open_private (file, ops,sizeof (*state)); -if (state ==NULL ) -return -ENOMEM ; +struct vcc_state *state = seq->private; +int family = (uintptr_t )(PDE_DATA (file_inode (seq->file))); - state->family = family; -return 0 ; +return __vcc_walk (&state->sk, family, &state->bucket, l) ? + state :NULL ; }static void *vcc_seq_start (struct seq_file *seq,loff_t *pos)
@@ -133,7 +122,7 @@ static void *vcc_seq_start(struct seq_file *seq, loff_t *pos)read_lock (&vcc_sklist_lock); state->sk =SEQ_START_TOKEN ; -return left ?vcc_walk (state, left) :SEQ_START_TOKEN ; +return left ?vcc_walk (seq, left) :SEQ_START_TOKEN ; }static void vcc_seq_stop (struct seq_file *seq,void *v)
@@ -144,9 +133,7 @@ static void vcc_seq_stop(struct seq_file *seq, void *v)static void *vcc_seq_next (struct seq_file *seq,void *v,loff_t *pos) { -struct vcc_state *state = seq->private; - - v =vcc_walk (state,1 ); + v =vcc_walk (seq,1 ); *pos += !!PTR_ERR (v);return v; }
@@ -280,18 +267,6 @@ static const struct seq_operations pvc_seq_ops = { .show = pvc_seq_show, }; -static int pvc_seq_open (struct inode *inode,struct file *file) -{ -return __vcc_seq_open (inode, file,PF_ATMPVC , &pvc_seq_ops); -} - -static const struct file_operations pvc_seq_fops = { - .open = pvc_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, -}; -static int vcc_seq_show (struct seq_file *seq,void *v) {if (v ==SEQ_START_TOKEN ) {
@@ -314,18 +289,6 @@ static const struct seq_operations vcc_seq_ops = { .show = vcc_seq_show, }; -static int vcc_seq_open (struct inode *inode,struct file *file) -{ -return __vcc_seq_open (inode, file,0 , &vcc_seq_ops); -} - -static const struct file_operations vcc_seq_fops = { - .open = vcc_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, -}; -static int svc_seq_show (struct seq_file *seq,void *v) { static const char atm_svc_banner[] =
@@ -349,18 +312,6 @@ static const struct seq_operations svc_seq_ops = { .show = svc_seq_show, }; -static int svc_seq_open (struct inode *inode,struct file *file) -{ -return __vcc_seq_open (inode, file,PF_ATMSVC , &svc_seq_ops); -} - -static const struct file_operations svc_seq_fops = { - .open = svc_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_private, -}; -static ssize_t proc_dev_atm_read (struct file *file,char __user *buf,size_t count,loff_t *pos) {
@@ -434,9 +385,12 @@ int __init atm_proc_init(void)if (!atm_proc_root)return -ENOMEM ;proc_create_seq ("devices" ,0444 , atm_proc_root, &atm_dev_seq_ops); -proc_create ("pvc" ,0444 , atm_proc_root, &pvc_seq_fops); -proc_create ("svc" ,0444 , atm_proc_root, &svc_seq_fops); -proc_create ("vc" ,0444 , atm_proc_root, &vcc_seq_fops); +proc_create_seq_private ("pvc" ,0444 , atm_proc_root, &pvc_seq_ops, +sizeof (struct vcc_state ), (void *)(uintptr_t )PF_ATMPVC ); +proc_create_seq_private ("svc" ,0444 , atm_proc_root, &svc_seq_ops, +sizeof (struct vcc_state ), (void *)(uintptr_t )PF_ATMSVC ); +proc_create_seq_private ("vc" ,0444 , atm_proc_root, &vcc_seq_ops, +sizeof (struct vcc_state ),NULL );return 0 ; }
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 35/39 isdn: replace ->proc_fops with ->proc_show
In reply to Christoph HellwigAnd switch to proc_create_single_data.
--- drivers/isdn/capi/kcapi.c | 3 ++- drivers/isdn/gigaset/capi.c | 16 +--------------- drivers/isdn/hardware/avm/avmcard.h | 4 ++-- drivers/isdn/hardware/avm/b1.c | 17 ++--------------- drivers/isdn/hardware/avm/b1dma.c | 17 ++--------------- drivers/isdn/hardware/avm/b1isa.c | 2 +- drivers/isdn/hardware/avm/b1pci.c | 4 ++-- drivers/isdn/hardware/avm/b1pcmcia.c | 2 +- drivers/isdn/hardware/avm/c4.c | 15 +-------------- drivers/isdn/hardware/avm/t1isa.c | 2 +- drivers/isdn/hardware/avm/t1pci.c | 2 +- drivers/isdn/hardware/eicon/capimain.c | 15 +-------------- drivers/isdn/hysdn/hycapi.c | 15 +-------------- include/linux/isdn/capilli.h | 2 +- net/bluetooth/cmtp/capi.c | 14 +------------- 15 files changed, 20 insertions(+), 110 deletions(-)
drivers/isdn/capi/kcapi.c +2 -1
@@ -534,7 +534,8 @@ int attach_capi_ctr(struct capi_ctr *ctr)init_waitqueue_head (&ctr->state_wait_queue);sprintf (ctr->procfn,"capi/controllers/%d" , ctr->cnr); - ctr->procent =proc_create_data (ctr->procfn,0 ,NULL , ctr->proc_fops, ctr); + ctr->procent =proc_create_single_data (ctr->procfn,0 ,NULL , + ctr->proc_show, ctr); ncontrollers++;
drivers/isdn/gigaset/capi.c +1 -15
@@ -2437,19 +2437,6 @@ static int gigaset_proc_show(struct seq_file *m, void *v)return 0 ; } -static int gigaset_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, gigaset_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations gigaset_proc_fops = { - .owner =THIS_MODULE , - .open = gigaset_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/** * gigaset_isdn_regdev() - register device to LL * @cs: device descriptor structure.
@@ -2478,8 +2465,7 @@ int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid) iif->ctr.register_appl = gigaset_register_appl; iif->ctr.release_appl = gigaset_release_appl; iif->ctr.send_message = gigaset_send_message; - iif->ctr.procinfo = gigaset_procinfo; - iif->ctr.proc_fops = &gigaset_proc_fops; + iif->ctr.proc_show = gigaset_proc_show,INIT_LIST_HEAD (&iif->appls);skb_queue_head_init (&iif->sendqueue);atomic_set (&iif->sendqlen,0 );
drivers/isdn/hardware/avm/avmcard.h +2 -2
@@ -556,7 +556,7 @@ u16 b1_send_message(struct capi_ctr *ctrl, struct sk_buff *skb);void b1_parse_version (avmctrl_info *card);irqreturn_t b1_interrupt (int interrupt,void *devptr); -extern const struct file_operations b1ctl_proc_fops; +int b1_proc_show (struct seq_file *m,void *v);avmcard_dmainfo *avmcard_dma_alloc (char *name,struct pci_dev *,long rsize,long ssize);
@@ -576,6 +576,6 @@ void b1dma_register_appl(struct capi_ctr *ctrl, capi_register_params *rp);void b1dma_release_appl (struct capi_ctr *ctrl,u16 appl);u16 b1dma_send_message (struct capi_ctr *ctrl,struct sk_buff *skb); -extern const struct file_operations b1dmactl_proc_fops; +int b1dma_proc_show (struct seq_file *m,void *v);#endif /* _AVMCARD_H_ */
drivers/isdn/hardware/avm/b1.c +2 -15
@@ -637,7 +637,7 @@ irqreturn_t b1_interrupt(int interrupt, void *devptr) }/* ------------------------------------------------------------- */ -static int b1ctl_proc_show (struct seq_file *m,void *v) +int b1_proc_show (struct seq_file *m,void *v) {struct capi_ctr *ctrl = m->private;avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata);
@@ -699,20 +699,7 @@ static int b1ctl_proc_show(struct seq_file *m, void *v)return 0 ; } - -static int b1ctl_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, b1ctl_proc_show,PDE_DATA (inode)); -} - -const struct file_operations b1ctl_proc_fops = { - .owner =THIS_MODULE , - .open = b1ctl_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -EXPORT_SYMBOL (b1ctl_proc_fops); +EXPORT_SYMBOL (b1_proc_show);/* ------------------------------------------------------------- */
drivers/isdn/hardware/avm/b1dma.c +2 -15
@@ -858,7 +858,7 @@ u16 b1dma_send_message(struct capi_ctr *ctrl, struct sk_buff *skb)/* ------------------------------------------------------------- */ -static int b1dmactl_proc_show (struct seq_file *m,void *v) +int b1dma_proc_show (struct seq_file *m,void *v) {struct capi_ctr *ctrl = m->private;avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata);
@@ -941,20 +941,7 @@ static int b1dmactl_proc_show(struct seq_file *m, void *v)return 0 ; } - -static int b1dmactl_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, b1dmactl_proc_show,PDE_DATA (inode)); -} - -const struct file_operations b1dmactl_proc_fops = { - .owner =THIS_MODULE , - .open = b1dmactl_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -EXPORT_SYMBOL (b1dmactl_proc_fops); +EXPORT_SYMBOL (b1dma_proc_show);/* ------------------------------------------------------------- */
drivers/isdn/hardware/avm/b1isa.c +1 -1
@@ -121,7 +121,7 @@ static int b1isa_probe(struct pci_dev *pdev) cinfo->capi_ctrl.load_firmware = b1_load_firmware; cinfo->capi_ctrl.reset_ctr = b1_reset_ctr; cinfo->capi_ctrl.procinfo = b1isa_procinfo; - cinfo->capi_ctrl.proc_fops = &b1ctl_proc_fops; + cinfo->capi_ctrl.proc_show = b1_proc_show;strcpy (cinfo->capi_ctrl.name, card->name); retval =attach_capi_ctr (&cinfo->capi_ctrl);
drivers/isdn/hardware/avm/b1pci.c +2 -2
@@ -112,7 +112,7 @@ static int b1pci_probe(struct capicardparams *p, struct pci_dev *pdev) cinfo->capi_ctrl.load_firmware = b1_load_firmware; cinfo->capi_ctrl.reset_ctr = b1_reset_ctr; cinfo->capi_ctrl.procinfo = b1pci_procinfo; - cinfo->capi_ctrl.proc_fops = &b1ctl_proc_fops; + cinfo->capi_ctrl.proc_show = b1_proc_show;strcpy (cinfo->capi_ctrl.name, card->name); cinfo->capi_ctrl.owner =THIS_MODULE ;
@@ -251,7 +251,7 @@ static int b1pciv4_probe(struct capicardparams *p, struct pci_dev *pdev) cinfo->capi_ctrl.load_firmware = b1dma_load_firmware; cinfo->capi_ctrl.reset_ctr = b1dma_reset_ctr; cinfo->capi_ctrl.procinfo = b1pciv4_procinfo; - cinfo->capi_ctrl.proc_fops = &b1dmactl_proc_fops; + cinfo->capi_ctrl.proc_show = b1dma_proc_show;strcpy (cinfo->capi_ctrl.name, card->name); retval =attach_capi_ctr (&cinfo->capi_ctrl);
drivers/isdn/hardware/avm/b1pcmcia.c +1 -1
@@ -108,7 +108,7 @@ static int b1pcmcia_add_card(unsigned int port, unsigned irq, cinfo->capi_ctrl.load_firmware = b1_load_firmware; cinfo->capi_ctrl.reset_ctr = b1_reset_ctr; cinfo->capi_ctrl.procinfo = b1pcmcia_procinfo; - cinfo->capi_ctrl.proc_fops = &b1ctl_proc_fops; + cinfo->capi_ctrl.proc_show = b1_proc_show;strcpy (cinfo->capi_ctrl.name, card->name); retval =attach_capi_ctr (&cinfo->capi_ctrl);
drivers/isdn/hardware/avm/c4.c +1 -14
@@ -1127,19 +1127,6 @@ static int c4_proc_show(struct seq_file *m, void *v)return 0 ; } -static int c4_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, c4_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations c4_proc_fops = { - .owner =THIS_MODULE , - .open = c4_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/* ------------------------------------------------------------- */ static int c4_add_card(struct capicardparams *p, struct pci_dev *dev,
@@ -1211,7 +1198,7 @@ static int c4_add_card(struct capicardparams *p, struct pci_dev *dev, cinfo->capi_ctrl.load_firmware = c4_load_firmware; cinfo->capi_ctrl.reset_ctr = c4_reset_ctr; cinfo->capi_ctrl.procinfo = c4_procinfo; - cinfo->capi_ctrl.proc_fops = &c4_proc_fops; + cinfo->capi_ctrl.proc_show = c4_proc_show;strcpy (cinfo->capi_ctrl.name, card->name); retval =attach_capi_ctr (&cinfo->capi_ctrl);
drivers/isdn/hardware/avm/t1isa.c +1 -1
@@ -430,7 +430,7 @@ static int t1isa_probe(struct pci_dev *pdev, int cardnr) cinfo->capi_ctrl.load_firmware = t1isa_load_firmware; cinfo->capi_ctrl.reset_ctr = t1isa_reset_ctr; cinfo->capi_ctrl.procinfo = t1isa_procinfo; - cinfo->capi_ctrl.proc_fops = &b1ctl_proc_fops; + cinfo->capi_ctrl.proc_show = b1_proc_show;strcpy (cinfo->capi_ctrl.name, card->name); retval =attach_capi_ctr (&cinfo->capi_ctrl);
drivers/isdn/hardware/avm/t1pci.c +1 -1
@@ -119,7 +119,7 @@ static int t1pci_add_card(struct capicardparams *p, struct pci_dev *pdev) cinfo->capi_ctrl.load_firmware = b1dma_load_firmware; cinfo->capi_ctrl.reset_ctr = b1dma_reset_ctr; cinfo->capi_ctrl.procinfo = t1pci_procinfo; - cinfo->capi_ctrl.proc_fops = &b1dmactl_proc_fops; + cinfo->capi_ctrl.proc_show = b1dma_proc_show;strcpy (cinfo->capi_ctrl.name, card->name); retval =attach_capi_ctr (&cinfo->capi_ctrl);
drivers/isdn/hardware/eicon/capimain.c +1 -14
@@ -90,19 +90,6 @@ static int diva_ctl_proc_show(struct seq_file *m, void *v)return 0 ; } -static int diva_ctl_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, diva_ctl_proc_show,NULL ); -} - -static const struct file_operations diva_ctl_proc_fops = { - .owner =THIS_MODULE , - .open = diva_ctl_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/* * set additional os settings in capi_ctr struct */
@@ -111,7 +98,7 @@ void diva_os_set_controller_struct(struct capi_ctr *ctrl) ctrl->driver_name =DRIVERLNAME ; ctrl->load_firmware =NULL ; ctrl->reset_ctr =NULL ; - ctrl->proc_fops = &diva_ctl_proc_fops; + ctrl->proc_show = diva_ctl_proc_show; ctrl->owner =THIS_MODULE ; }
drivers/isdn/hysdn/hycapi.c +1 -14
@@ -467,19 +467,6 @@ static int hycapi_proc_show(struct seq_file *m, void *v)return 0 ; } -static int hycapi_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, hycapi_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations hycapi_proc_fops = { - .owner =THIS_MODULE , - .open = hycapi_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/************************************************************** hycapi_load_firmware
@@ -774,7 +761,7 @@ hycapi_capi_create(hysdn_card *card) ctrl->load_firmware = hycapi_load_firmware; ctrl->reset_ctr = hycapi_reset_ctr; ctrl->procinfo = hycapi_procinfo; - ctrl->proc_fops = &hycapi_proc_fops; + ctrl->proc_show = hycapi_proc_show;strcpy (ctrl->name, cinfo->cardname); ctrl->owner =THIS_MODULE ;
include/linux/isdn/capilli.h +1 -1
@@ -50,7 +50,7 @@ struct capi_ctr {u16 (*send_message)(struct capi_ctr *,struct sk_buff *skb);char *(*procinfo)(struct capi_ctr *); -const struct file_operations *proc_fops; +int (*proc_show)(struct seq_file *,void *);/* filled in before calling ready callback */ u8 manu[CAPI_MANUFACTURER_LEN ];/* CAPI_GET_MANUFACTURER */
net/bluetooth/cmtp/capi.c +1 -13
@@ -521,18 +521,6 @@ static int cmtp_proc_show(struct seq_file *m, void *v)return 0 ; } -static int cmtp_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, cmtp_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations cmtp_proc_fops = { - .open = cmtp_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -int cmtp_attach_device (struct cmtp_session *session) {unsigned char buf[4 ];
@@ -571,7 +559,7 @@ int cmtp_attach_device(struct cmtp_session *session) session->ctrl.send_message = cmtp_send_message; session->ctrl.procinfo = cmtp_procinfo; - session->ctrl.proc_fops = &cmtp_proc_fops; + session->ctrl.proc_show = cmtp_proc_show;if (attach_capi_ctr (&session->ctrl) <0 ) {BT_ERR ("Can't attach new controller" );
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
PATCH 36/39 proc: don't detour through seq->private to get the inode
In reply to Christoph Hellwig--- fs/proc/array.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-)
fs/proc/array.c +4 -14
@@ -677,7 +677,7 @@ get_children_pid(struct inode *inode, struct pid *pid_prev, loff_t pos)static int children_seq_show (struct seq_file *seq,void *v) { -struct inode *inode = seq->private; +struct inode *inode =file_inode (seq->file);pid_t pid; pid =pid_nr_ns (v, inode->i_sb->s_fs_info);
@@ -688,14 +688,14 @@ static int children_seq_show(struct seq_file *seq, void *v)static void *children_seq_start (struct seq_file *seq,loff_t *pos) { -return get_children_pid (seq->private,NULL , *pos); +return get_children_pid (file_inode (seq->file),NULL , *pos); }static void *children_seq_next (struct seq_file *seq,void *v,loff_t *pos) {struct pid *pid; - pid =get_children_pid (seq->private, v, *pos +1 ); + pid =get_children_pid (file_inode (seq->file), v, *pos +1 );put_pid (v); ++*pos;
@@ -716,17 +716,7 @@ static const struct seq_operations children_seq_ops = {static int children_seq_open (struct inode *inode,struct file *file) { -struct seq_file *m; -int ret; - - ret =seq_open (file, &children_seq_ops); -if (ret) -return ret; - - m = file->private_data; - m->private = inode; - -return ret; +return seq_open (file, &children_seq_ops); }const struct file_operations proc_tid_children_operations = {
Signature · 1 line
2.17.0
PATCH 37/39 ide: remove ide_driver_proc_write
In reply to Christoph HellwigThe driver proc file hasn't been writeable for a long time, so this is just dead code.
--- drivers/ide/ide-proc.c | 46 ------------------------------------------ 1 file changed, 46 deletions(-)
drivers/ide/ide-proc.c +0 -46
@@ -528,58 +528,12 @@ static int ide_driver_proc_open(struct inode *inode, struct file *file)return single_open (file, ide_driver_proc_show,PDE_DATA (inode)); } -static int ide_replace_subdriver (ide_drive_t *drive,const char *driver) -{ -struct device *dev = &drive->gendev; -int ret =1 ; -int err; - -device_release_driver (dev); -/* FIXME: device can still be in use by previous driver */ -strlcpy (drive->driver_req, driver,sizeof (drive->driver_req)); - err =device_attach (dev); -if (err <0 ) -printk (KERN_WARNING "IDE: %s: device_attach error: %d\n" , - __func__, err); - drive->driver_req[0 ] =0 ; -if (dev->driver ==NULL ) { - err =device_attach (dev); -if (err <0 ) -printk (KERN_WARNING -"IDE: %s: device_attach(2) error: %d\n" , - __func__, err); - } -if (dev->driver && !strcmp (dev->driver->name, driver)) - ret =0 ; - -return ret; -} - -static ssize_t ide_driver_proc_write (struct file *file,const char __user *buffer, -size_t count,loff_t *pos) -{ -ide_drive_t *drive =PDE_DATA (file_inode (file)); -char name[32 ]; - -if (!capable (CAP_SYS_ADMIN )) -return -EACCES ; -if (count >31 ) - count =31 ; -if (copy_from_user (name, buffer, count)) -return -EFAULT ; - name[count] ='\0' ; -if (ide_replace_subdriver (drive, name)) -return -EINVAL ; -return count; -} -static const struct file_operations ide_driver_proc_fops = { .owner =THIS_MODULE , .open = ide_driver_proc_open, .read = seq_read, .llseek = seq_lseek, .release = single_release, - .write = ide_driver_proc_write, };static int ide_media_proc_show (struct seq_file *m,void *v)
Signature · 1 line
2.17.0
PATCH 38/39 ide: replace ->proc_fops with ->proc_show
In reply to Christoph HellwigJust set up the show callback in the tty_operations, and use proc_create_single_data to create the file without additional boilerplace code.
--- drivers/ide/ide-cd.c | 15 +--- drivers/ide/ide-disk_proc.c | 62 ++-------------- drivers/ide/ide-floppy_proc.c | 17 +---- drivers/ide/ide-proc.c | 136 +++++----------------------------- drivers/ide/ide-tape.c | 17 +---- include/linux/ide.h | 6 +- 6 files changed, 31 insertions(+), 222 deletions(-)
drivers/ide/ide-cd.c +1 -14
@@ -1426,21 +1426,8 @@ static int idecd_capacity_proc_show(struct seq_file *m, void *v)return 0 ; } -static int idecd_capacity_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, idecd_capacity_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations idecd_capacity_proc_fops = { - .owner =THIS_MODULE , - .open = idecd_capacity_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static ide_proc_entry_t idecd_proc[] = { - {"capacity" ,S_IFREG |S_IRUGO , &idecd_capacity_proc_fops }, + {"capacity" ,S_IFREG |S_IRUGO , idecd_capacity_proc_show }, {} };
drivers/ide/ide-disk_proc.c +5 -57
86 lines not on this page · raw message
drivers/ide/ide-floppy_proc.c +2 -15
@@ -14,22 +14,9 @@ static int idefloppy_capacity_proc_show(struct seq_file *m, void *v)return 0 ; } -static int idefloppy_capacity_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, idefloppy_capacity_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations idefloppy_capacity_proc_fops = { - .owner =THIS_MODULE , - .open = idefloppy_capacity_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -ide_proc_entry_t ide_floppy_proc[] = { - {"capacity" ,S_IFREG |S_IRUGO , &idefloppy_capacity_proc_fops }, - {"geometry" ,S_IFREG |S_IRUGO , &ide_geometry_proc_fops }, + {"capacity" ,S_IFREG |S_IRUGO , idefloppy_capacity_proc_show }, + {"geometry" ,S_IFREG |S_IRUGO , ide_geometry_proc_show }, {} };
drivers/ide/ide-proc.c +18 -118
220 lines not on this page · raw message
drivers/ide/ide-tape.c +2 -15
@@ -1847,22 +1847,9 @@ static int idetape_name_proc_show(struct seq_file *m, void *v)return 0 ; } -static int idetape_name_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, idetape_name_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations idetape_name_proc_fops = { - .owner =THIS_MODULE , - .open = idetape_name_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static ide_proc_entry_t idetape_proc[] = { - {"capacity" ,S_IFREG |S_IRUGO , &ide_capacity_proc_fops }, - {"name" ,S_IFREG |S_IRUGO , &idetape_name_proc_fops }, + {"capacity" ,S_IFREG |S_IRUGO , ide_capacity_proc_show }, + {"name" ,S_IFREG |S_IRUGO , idetape_name_proc_show }, {} };
include/linux/ide.h +3 -3
@@ -961,7 +961,7 @@ __IDE_PROC_DEVSET(_name, _min, _max, NULL, NULL)typedef struct {const char *name;umode_t mode; -const struct file_operations *proc_fops; +int (*show)(struct seq_file *,void *); }ide_proc_entry_t ;void proc_ide_create (void );
@@ -973,8 +973,8 @@ void ide_proc_unregister_port(ide_hwif_t *);void ide_proc_register_driver (ide_drive_t *,struct ide_driver *);void ide_proc_unregister_driver (ide_drive_t *,struct ide_driver *); -extern const struct file_operations ide_capacity_proc_fops; -extern const struct file_operations ide_geometry_proc_fops; +int ide_capacity_proc_show (struct seq_file *m,void *v); +int ide_geometry_proc_show (struct seq_file *m,void *v);#else static inline void proc_ide_create (void ) { ; }static inline void proc_ide_destroy (void ) { ; }
Signature · 1 line
2.17.0
PATCH 39/39 tty: replace ->proc_fops with ->proc_show
In reply to Christoph HellwigJust set up the show callback in the tty_operations, and use proc_create_single_data to create the file without additional boilerplace code.
--- arch/ia64/hp/sim/simserial.c | 15 +-------------- arch/xtensa/platforms/iss/console.c | 15 +-------------- drivers/char/pcmcia/synclink_cs.c | 15 +-------------- drivers/mmc/core/sdio_uart.c | 15 +-------------- drivers/staging/fwserial/fwserial.c | 15 +-------------- drivers/tty/amiserial.c | 15 +-------------- drivers/tty/cyclades.c | 15 +-------------- drivers/tty/serial/serial_core.c | 15 +-------------- drivers/tty/synclink.c | 15 +-------------- drivers/tty/synclink_gt.c | 15 +-------------- drivers/tty/synclinkmp.c | 15 +-------------- drivers/usb/serial/usb-serial.c | 15 +-------------- fs/proc/proc_tty.c | 6 +++--- include/linux/tty_driver.h | 2 +- 14 files changed, 16 insertions(+), 172 deletions(-)
arch/ia64/hp/sim/simserial.c +1 -14
@@ -435,19 +435,6 @@ static int rs_proc_show(struct seq_file *m, void *v)return 0 ; } -static int rs_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, rs_proc_show,NULL ); -} - -static const struct file_operations rs_proc_fops = { - .owner =THIS_MODULE , - .open = rs_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static const struct tty_operations hp_ops = { .open = rs_open, .close = rs_close,
@@ -462,7 +449,7 @@ static const struct tty_operations hp_ops = { .unthrottle = rs_unthrottle, .send_xchar = rs_send_xchar, .hangup = rs_hangup, - .proc_fops = &rs_proc_fops, + .proc_show = rs_proc_show, };static const struct tty_port_operations hp_port_ops = {
arch/xtensa/platforms/iss/console.c +1 -14
@@ -153,19 +153,6 @@ static int rs_proc_show(struct seq_file *m, void *v)return 0 ; } -static int rs_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, rs_proc_show,NULL ); -} - -static const struct file_operations rs_proc_fops = { - .owner =THIS_MODULE , - .open = rs_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static const struct tty_operations serial_ops = { .open = rs_open, .close = rs_close,
@@ -176,7 +163,7 @@ static const struct tty_operations serial_ops = { .chars_in_buffer = rs_chars_in_buffer, .hangup = rs_hangup, .wait_until_sent = rs_wait_until_sent, - .proc_fops = &rs_proc_fops, + .proc_show = rs_proc_show, };int __init rs_init (void )
drivers/char/pcmcia/synclink_cs.c +1 -14
@@ -2616,19 +2616,6 @@ static int mgslpc_proc_show(struct seq_file *m, void *v)return 0 ; } -static int mgslpc_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, mgslpc_proc_show,NULL ); -} - -static const struct file_operations mgslpc_proc_fops = { - .owner =THIS_MODULE , - .open = mgslpc_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int rx_alloc_buffers (MGSLPC_INFO *info) {/* each buffer has header and data */
@@ -2815,7 +2802,7 @@ static const struct tty_operations mgslpc_ops = { .tiocmget = tiocmget, .tiocmset = tiocmset, .get_icount = mgslpc_get_icount, - .proc_fops = &mgslpc_proc_fops, + .proc_show = mgslpc_proc_show, };static int __init synclink_cs_init (void )
drivers/mmc/core/sdio_uart.c +1 -14
@@ -1008,19 +1008,6 @@ static int sdio_uart_proc_show(struct seq_file *m, void *v)return 0 ; } -static int sdio_uart_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, sdio_uart_proc_show,NULL ); -} - -static const struct file_operations sdio_uart_proc_fops = { - .owner =THIS_MODULE , - .open = sdio_uart_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static const struct tty_port_operations sdio_uart_port_ops = { .dtr_rts = uart_dtr_rts, .carrier_raised = uart_carrier_raised,
@@ -1045,7 +1032,7 @@ static const struct tty_operations sdio_uart_ops = { .tiocmset = sdio_uart_tiocmset, .install = sdio_uart_install, .cleanup = sdio_uart_cleanup, - .proc_fops = &sdio_uart_proc_fops, + .proc_show = sdio_uart_proc_show, };static struct tty_driver *sdio_uart_tty_driver;
drivers/staging/fwserial/fwserial.c +1 -14
@@ -1506,11 +1506,6 @@ static int fwtty_debugfs_peers_show(struct seq_file *m, void *v)return 0 ; } -static int fwtty_proc_open (struct inode *inode,struct file *fp) -{ -return single_open (fp, fwtty_proc_show,NULL ); -} -static int fwtty_stats_open (struct inode *inode,struct file *fp) {return single_open (fp, fwtty_debugfs_stats_show, inode->i_private);
@@ -1537,14 +1532,6 @@ static const struct file_operations fwtty_peers_fops = { .release = single_release, }; -static const struct file_operations fwtty_proc_fops = { - .owner =THIS_MODULE , - .open = fwtty_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static const struct tty_port_operations fwtty_port_ops = { .dtr_rts = fwtty_port_dtr_rts, .carrier_raised = fwtty_port_carrier_raised,
@@ -1570,7 +1557,7 @@ static const struct tty_operations fwtty_ops = { .tiocmget = fwtty_tiocmget, .tiocmset = fwtty_tiocmset, .get_icount = fwtty_get_icount, - .proc_fops = &fwtty_proc_fops, + .proc_show = fwtty_proc_show, };static const struct tty_operations fwloop_ops = {
drivers/tty/amiserial.c +1 -14
@@ -1566,19 +1566,6 @@ static int rs_proc_show(struct seq_file *m, void *v)return 0 ; } -static int rs_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, rs_proc_show,NULL ); -} - -static const struct file_operations rs_proc_fops = { - .owner =THIS_MODULE , - .open = rs_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/* * --------------------------------------------------------------------- * rs_init() and friends
@@ -1620,7 +1607,7 @@ static const struct tty_operations serial_ops = { .tiocmget = rs_tiocmget, .tiocmset = rs_tiocmset, .get_icount = rs_get_icount, - .proc_fops = &rs_proc_fops, + .proc_show = rs_proc_show, };static int amiga_carrier_raised (struct tty_port *port)
drivers/tty/cyclades.c +1 -14
@@ -3972,19 +3972,6 @@ static int cyclades_proc_show(struct seq_file *m, void *v)return 0 ; } -static int cyclades_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, cyclades_proc_show,NULL ); -} - -static const struct file_operations cyclades_proc_fops = { - .owner =THIS_MODULE , - .open = cyclades_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/* The serial driver boot-time initialization code! Hardware I/O ports are mapped to character special devices on a first found, first allocated manner. That is, this code searches
@@ -4024,7 +4011,7 @@ static const struct tty_operations cy_ops = { .tiocmget = cy_tiocmget, .tiocmset = cy_tiocmset, .get_icount = cy_get_icount, - .proc_fops = &cyclades_proc_fops, + .proc_show = cyclades_proc_show, };static int __init cy_init (void )
drivers/tty/serial/serial_core.c +1 -14
@@ -1829,19 +1829,6 @@ static int uart_proc_show(struct seq_file *m, void *v)uart_line_info (m, drv, i); return 0; } - -static int uart_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, uart_proc_show,PDE_DATA (inode)); -} - -static const struct file_operations uart_proc_fops = { - .owner =THIS_MODULE , - .open = uart_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -};#endif #if defined(CONFIG_SERIAL_CORE_CONSOLE ) || defined(CONFIG_CONSOLE_POLL )
@@ -2415,7 +2402,7 @@ static const struct tty_operations uart_ops = { .break_ctl = uart_break_ctl, .wait_until_sent= uart_wait_until_sent, #ifdef CONFIG_PROC_FS - .proc_fops = &uart_proc_fops, + .proc_show = uart_proc_show, #endif .tiocmget = uart_tiocmget, .tiocmset = uart_tiocmset,
drivers/tty/synclink.c +1 -14
@@ -3534,19 +3534,6 @@ static int mgsl_proc_show(struct seq_file *m, void *v)return 0 ; } -static int mgsl_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, mgsl_proc_show,NULL ); -} - -static const struct file_operations mgsl_proc_fops = { - .owner =THIS_MODULE , - .open = mgsl_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/* mgsl_allocate_dma_buffers() * * Allocate and format DMA buffers (ISA adapter)
@@ -4298,7 +4285,7 @@ static const struct tty_operations mgsl_ops = { .tiocmget = tiocmget, .tiocmset = tiocmset, .get_icount = msgl_get_icount, - .proc_fops = &mgsl_proc_fops, + .proc_show = mgsl_proc_show, };/*
drivers/tty/synclink_gt.c +1 -14
@@ -1316,19 +1316,6 @@ static int synclink_gt_proc_show(struct seq_file *m, void *v)return 0 ; } -static int synclink_gt_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, synclink_gt_proc_show,NULL ); -} - -static const struct file_operations synclink_gt_proc_fops = { - .owner =THIS_MODULE , - .open = synclink_gt_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/* * return count of bytes in transmit buffer */
@@ -3721,7 +3708,7 @@ static const struct tty_operations ops = { .tiocmget = tiocmget, .tiocmset = tiocmset, .get_icount = get_icount, - .proc_fops = &synclink_gt_proc_fops, + .proc_show = synclink_gt_proc_show, };static void slgt_cleanup (void )
drivers/tty/synclinkmp.c +1 -14
@@ -1421,19 +1421,6 @@ static int synclinkmp_proc_show(struct seq_file *m, void *v)return 0 ; } -static int synclinkmp_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, synclinkmp_proc_show,NULL ); -} - -static const struct file_operations synclinkmp_proc_fops = { - .owner =THIS_MODULE , - .open = synclinkmp_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -/* Return the count of bytes in transmit buffer */ static int chars_in_buffer (struct tty_struct *tty)
@@ -3899,7 +3886,7 @@ static const struct tty_operations ops = { .tiocmget = tiocmget, .tiocmset = tiocmset, .get_icount = get_icount, - .proc_fops = &synclinkmp_proc_fops, + .proc_show = synclinkmp_proc_show, };
drivers/usb/serial/usb-serial.c +1 -14
@@ -476,19 +476,6 @@ static int serial_proc_show(struct seq_file *m, void *v)return 0 ; } -static int serial_proc_open (struct inode *inode,struct file *file) -{ -return single_open (file, serial_proc_show,NULL ); -} - -static const struct file_operations serial_proc_fops = { - .owner =THIS_MODULE , - .open = serial_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; -static int serial_tiocmget (struct tty_struct *tty) {struct usb_serial_port *port = tty->driver_data;
@@ -1192,7 +1179,7 @@ static const struct tty_operations serial_ops = { .get_icount = serial_get_icount, .cleanup = serial_cleanup, .install = serial_install, - .proc_fops = &serial_proc_fops, + .proc_show = serial_proc_show, };
fs/proc/proc_tty.c +3 -3
@@ -135,11 +135,11 @@ void proc_tty_register_driver(struct tty_driver *driver)struct proc_dir_entry *ent;if (!driver->driver_name || driver->proc_entry || - !driver->ops->proc_fops) + !driver->ops->proc_show)return ; - ent =proc_create_data (driver->driver_name,0 , proc_tty_driver, - driver->ops->proc_fops, driver); + ent =proc_create_single_data (driver->driver_name,0 , proc_tty_driver, + driver->ops->proc_show, driver); driver->proc_entry = ent; }
include/linux/tty_driver.h +1 -1
@@ -293,7 +293,7 @@ struct tty_operations {int (*poll_get_char)(struct tty_driver *driver,int line);void (*poll_put_char)(struct tty_driver *driver,int line,char ch);#endif -const struct file_operations *proc_fops; +int (*proc_show)(struct seq_file *,void *); } __randomize_layout;struct tty_driver {
Signature · 6 lines
2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Quoted 1 line
git://git.infradead.org/users/hch/misc.gitproc_create
I want to ask if it is time to start using poorman function overloading with _b_c_e(). There are millions of allocation functions for example, all slightly difference, and people will add more. Seeing /proc interfaces doubled like this is painful.
Quoted 7 lines · Alexey Dobriyan
Quoted 1 line
git://git.infradead.org/users/hch/misc.gitproc_createI want to ask if it is time to start using poorman function overloading with
_b_c_e(). There are millions of allocation functions for example, all slightly difference, and people will add more. Seeing /proc interfaces doubled like this is painful.
Function overloading is totally unacceptable.
And I very much disagree with a tradeoff that keeps 5000 lines of code vs a few new helpers.
Andrew Morton
maintainerQuoted 9 lines · On Tue, 24 Apr 2018 16:23:04 +0200 Christoph Hellwig <[email protected]> wrote:
Quoted 7 lines · Alexey Dobriyan
Quoted 1 line
git://git.infradead.org/users/hch/misc.gitproc_createI want to ask if it is time to start using poorman function overloading with
_b_c_e(). There are millions of allocation functions for example, all slightly difference, and people will add more. Seeing /proc interfaces doubled like this is painful.
Quoted 4 lines
Function overloading is totally unacceptable.
And I very much disagree with a tradeoff that keeps 5000 lines of code vs a few new helpers.
OK, the curiosity and suspense are killing me. What the heck is "function overloading with _b_c_e()"?
Quoted 5 lines · Andrew Morton
Quoted 5 lines
Quoted 4 lines
I want to ask if it is time to start using poorman function overloading with
_b_c_e(). There are millions of allocation functions for example, all slightly difference, and people will add more. Seeing /proc interfaces doubled like this is painful.
Quoted 7 lines
Quoted 4 lines
Function overloading is totally unacceptable.
And I very much disagree with a tradeoff that keeps 5000 lines of code vs a few new helpers.
OK, the curiosity and suspense are killing me. What the heck is "function overloading with
_b_c_e()"?
The way I understood Alexey was to use have a proc_create macro that can take different ops types. Although the short cut for __builtin_types_compatible_p would be _b_t_c or similar, so maybe I misunderstood him.
Quoted 11 lines · Christoph Hellwig
Quoted 10 lines · Andrew Morton
Quoted 9 lines
Quoted 4 lines
I want to ask if it is time to start using poorman function overloading with
_b_c_e(). There are millions of allocation functions for example, all slightly difference, and people will add more. Seeing /proc interfaces doubled like this is painful.Function overloading is totally unacceptable.
And I very much disagree with a tradeoff that keeps 5000 lines of code vs a few new helpers.
Quoted 7 lines
Quoted 2 lines
OK, the curiosity and suspense are killing me. What the heck is "function overloading with
_b_c_e()"?The way I understood Alexey was to use have a
proc_createmacro that can take different ops types. Although the short cut for__builtin_types_compatible_pwould be_b_t_cor similar, so maybe I misunderstood him.
That's correct.
I also think that several dozens kmalloc signatures are a problem.
And there will be more with pmalloc* stuff and more 2D/3D array checked allocations and who knows what.
And I want to add typed kmalloc!