Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

proc: introduce proc_create_seq_private

Variant 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.

Signed-off-by: Christoph Hellwig <hch@lst.de>

+37 -113
+2 -14
fs/locks.c
··· 2788 2788 .show = locks_show, 2789 2789 }; 2790 2790 2791 - static int locks_open(struct inode *inode, struct file *filp) 2792 - { 2793 - return seq_open_private(filp, &locks_seq_operations, 2794 - sizeof(struct locks_iterator)); 2795 - } 2796 - 2797 - static const struct file_operations proc_locks_operations = { 2798 - .open = locks_open, 2799 - .read = seq_read, 2800 - .llseek = seq_lseek, 2801 - .release = seq_release_private, 2802 - }; 2803 - 2804 2791 static int __init proc_locks_init(void) 2805 2792 { 2806 - proc_create("locks", 0, NULL, &proc_locks_operations); 2793 + proc_create_seq_private("locks", 0, NULL, &locks_seq_operations, 2794 + sizeof(struct locks_iterator), NULL); 2807 2795 return 0; 2808 2796 } 2809 2797 fs_initcall(proc_locks_init);
+6 -3
fs/proc/generic.c
··· 560 560 { 561 561 struct proc_dir_entry *de = PDE(inode); 562 562 563 + if (de->state_size) 564 + return seq_open_private(file, de->seq_ops, de->state_size); 563 565 return seq_open(file, de->seq_ops); 564 566 } 565 567 ··· 572 570 .release = seq_release, 573 571 }; 574 572 575 - struct proc_dir_entry *proc_create_seq_data(const char *name, umode_t mode, 573 + struct proc_dir_entry *proc_create_seq_private(const char *name, umode_t mode, 576 574 struct proc_dir_entry *parent, const struct seq_operations *ops, 577 - void *data) 575 + unsigned int state_size, void *data) 578 576 { 579 577 struct proc_dir_entry *p; 580 578 ··· 583 581 return NULL; 584 582 p->proc_fops = &proc_seq_fops; 585 583 p->seq_ops = ops; 584 + p->state_size = state_size; 586 585 return proc_register(parent, p); 587 586 } 588 - EXPORT_SYMBOL(proc_create_seq_data); 587 + EXPORT_SYMBOL(proc_create_seq_private); 589 588 590 589 void proc_set_size(struct proc_dir_entry *de, loff_t size) 591 590 {
+1
fs/proc/internal.h
··· 46 46 const struct file_operations *proc_fops; 47 47 const struct seq_operations *seq_ops; 48 48 void *data; 49 + unsigned int state_size; 49 50 unsigned int low_ino; 50 51 nlink_t nlink; 51 52 kuid_t uid;
+6 -1
include/linux/atalk.h
··· 145 145 146 146 extern struct atalk_route atrtr_default; 147 147 148 - extern const struct file_operations atalk_seq_arp_fops; 148 + struct aarp_iter_state { 149 + int bucket; 150 + struct aarp_entry **table; 151 + }; 152 + 153 + extern const struct seq_operations aarp_seq_ops; 149 154 150 155 extern int sysctl_aarp_expiry_time; 151 156 extern int sysctl_aarp_tick_time;
+6 -3
include/linux/proc_fs.h
··· 25 25 struct proc_dir_entry *); 26 26 struct proc_dir_entry *proc_create_mount_point(const char *name); 27 27 28 - struct proc_dir_entry *proc_create_seq_data(const char *name, umode_t mode, 28 + struct proc_dir_entry *proc_create_seq_private(const char *name, umode_t mode, 29 29 struct proc_dir_entry *parent, const struct seq_operations *ops, 30 - void *data); 30 + unsigned int state_size, void *data); 31 + #define proc_create_seq_data(name, mode, parent, ops, data) \ 32 + proc_create_seq_private(name, mode, parent, ops, 0, data) 31 33 #define proc_create_seq(name, mode, parent, ops) \ 32 - proc_create_seq_data(name, mode, parent, ops, NULL) 34 + proc_create_seq_private(name, mode, parent, ops, 0, NULL) 33 35 34 36 extern struct proc_dir_entry *proc_create_data(const char *, umode_t, 35 37 struct proc_dir_entry *, ··· 66 64 umode_t mode, struct proc_dir_entry *parent, void *data) { return NULL; } 67 65 static inline struct proc_dir_entry *proc_mkdir_mode(const char *name, 68 66 umode_t mode, struct proc_dir_entry *parent) { return NULL; } 67 + #define proc_create_seq_private(name, mode, parent, ops, 0, data) ({NULL;}) 69 68 #define proc_create_seq_data(name, mode, parent, ops, data) ({NULL;}) 70 69 #define proc_create_seq(name, mode, parent, ops) ({NULL;}) 71 70 #define proc_create(name, mode, parent, proc_fops) ({NULL;})
+2 -14
kernel/time/timer_list.c
··· 372 372 .show = timer_list_show, 373 373 }; 374 374 375 - static int timer_list_open(struct inode *inode, struct file *filp) 376 - { 377 - return seq_open_private(filp, &timer_list_sops, 378 - sizeof(struct timer_list_iter)); 379 - } 380 - 381 - static const struct file_operations timer_list_fops = { 382 - .open = timer_list_open, 383 - .read = seq_read, 384 - .llseek = seq_lseek, 385 - .release = seq_release_private, 386 - }; 387 - 388 375 static int __init init_timer_list_procfs(void) 389 376 { 390 377 struct proc_dir_entry *pe; 391 378 392 - pe = proc_create("timer_list", 0400, NULL, &timer_list_fops); 379 + pe = proc_create_seq_private("timer_list", 0400, NULL, &timer_list_sops, 380 + sizeof(struct timer_list_iter), NULL); 393 381 if (!pe) 394 382 return -ENOMEM; 395 383 return 0;
+3 -15
mm/vmalloc.c
··· 2751 2751 .show = s_show, 2752 2752 }; 2753 2753 2754 - static int vmalloc_open(struct inode *inode, struct file *file) 2755 - { 2756 - return seq_open_private(file, &vmalloc_op, 2757 - nr_node_ids * sizeof(unsigned int)); 2758 - } 2759 - 2760 - static const struct file_operations proc_vmalloc_operations = { 2761 - .open = vmalloc_open, 2762 - .read = seq_read, 2763 - .llseek = seq_lseek, 2764 - .release = seq_release_private, 2765 - }; 2766 - 2767 2754 static int __init proc_vmalloc_init(void) 2768 2755 { 2769 2756 if (IS_ENABLED(CONFIG_NUMA)) 2770 - proc_create("vmallocinfo", S_IRUSR, NULL, 2771 - &proc_vmalloc_operations); 2757 + proc_create_seq_private("vmallocinfo", S_IRUSR, NULL, 2758 + &vmalloc_op, 2759 + nr_node_ids * sizeof(unsigned int), NULL); 2772 2760 else 2773 2761 proc_create_seq("vmallocinfo", S_IRUSR, NULL, &vmalloc_op); 2774 2762 return 0;
+1 -19
net/appletalk/aarp.c
··· 907 907 } 908 908 909 909 #ifdef CONFIG_PROC_FS 910 - struct aarp_iter_state { 911 - int bucket; 912 - struct aarp_entry **table; 913 - }; 914 - 915 910 /* 916 911 * Get the aarp entry that is in the chain described 917 912 * by the iterator. ··· 1028 1033 return 0; 1029 1034 } 1030 1035 1031 - static const struct seq_operations aarp_seq_ops = { 1036 + const struct seq_operations aarp_seq_ops = { 1032 1037 .start = aarp_seq_start, 1033 1038 .next = aarp_seq_next, 1034 1039 .stop = aarp_seq_stop, 1035 1040 .show = aarp_seq_show, 1036 - }; 1037 - 1038 - static int aarp_seq_open(struct inode *inode, struct file *file) 1039 - { 1040 - return seq_open_private(file, &aarp_seq_ops, 1041 - sizeof(struct aarp_iter_state)); 1042 - } 1043 - 1044 - const struct file_operations atalk_seq_arp_fops = { 1045 - .open = aarp_seq_open, 1046 - .read = seq_read, 1047 - .llseek = seq_lseek, 1048 - .release = seq_release_private, 1049 1041 }; 1050 1042 #endif 1051 1043
+2 -1
net/appletalk/atalk_proc.c
··· 236 236 if (!p) 237 237 goto out_socket; 238 238 239 - p = proc_create("arp", 0444, atalk_proc_dir, &atalk_seq_arp_fops); 239 + p = proc_create_seq_private("arp", 0444, atalk_proc_dir, &aarp_seq_ops, 240 + sizeof(struct aarp_iter_state), NULL); 240 241 if (!p) 241 242 goto out_arp; 242 243
+2 -13
net/atm/lec.c
··· 990 990 .stop = lec_seq_stop, 991 991 .show = lec_seq_show, 992 992 }; 993 - 994 - static int lec_seq_open(struct inode *inode, struct file *file) 995 - { 996 - return seq_open_private(file, &lec_seq_ops, sizeof(struct lec_state)); 997 - } 998 - 999 - static const struct file_operations lec_seq_fops = { 1000 - .open = lec_seq_open, 1001 - .read = seq_read, 1002 - .llseek = seq_lseek, 1003 - .release = seq_release_private, 1004 - }; 1005 993 #endif 1006 994 1007 995 static int lane_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) ··· 1035 1047 #ifdef CONFIG_PROC_FS 1036 1048 struct proc_dir_entry *p; 1037 1049 1038 - p = proc_create("lec", 0444, atm_proc_root, &lec_seq_fops); 1050 + p = proc_create_seq_private("lec", 0444, atm_proc_root, &lec_seq_ops, 1051 + sizeof(struct lec_state), NULL); 1039 1052 if (!p) { 1040 1053 pr_err("Unable to initialize /proc/net/atm/lec\n"); 1041 1054 return -ENOMEM;
+3 -14
net/decnet/af_decnet.c
··· 2314 2314 .stop = dn_socket_seq_stop, 2315 2315 .show = dn_socket_seq_show, 2316 2316 }; 2317 - 2318 - static int dn_socket_seq_open(struct inode *inode, struct file *file) 2319 - { 2320 - return seq_open_private(file, &dn_socket_seq_ops, 2321 - sizeof(struct dn_iter_state)); 2322 - } 2323 - 2324 - static const struct file_operations dn_socket_seq_fops = { 2325 - .open = dn_socket_seq_open, 2326 - .read = seq_read, 2327 - .llseek = seq_lseek, 2328 - .release = seq_release_private, 2329 - }; 2330 2317 #endif 2331 2318 2332 2319 static const struct net_proto_family dn_family_ops = { ··· 2370 2383 dev_add_pack(&dn_dix_packet_type); 2371 2384 register_netdevice_notifier(&dn_dev_notifier); 2372 2385 2373 - proc_create("decnet", 0444, init_net.proc_net, &dn_socket_seq_fops); 2386 + proc_create_seq_private("decnet", 0444, init_net.proc_net, 2387 + &dn_socket_seq_ops, sizeof(struct dn_iter_state), 2388 + NULL); 2374 2389 dn_register_sysctl(); 2375 2390 out: 2376 2391 return rc;
+3 -16
net/decnet/dn_route.c
··· 1852 1852 .stop = dn_rt_cache_seq_stop, 1853 1853 .show = dn_rt_cache_seq_show, 1854 1854 }; 1855 - 1856 - static int dn_rt_cache_seq_open(struct inode *inode, struct file *file) 1857 - { 1858 - return seq_open_private(file, &dn_rt_cache_seq_ops, 1859 - sizeof(struct dn_rt_cache_iter_state)); 1860 - } 1861 - 1862 - static const struct file_operations dn_rt_cache_seq_fops = { 1863 - .open = dn_rt_cache_seq_open, 1864 - .read = seq_read, 1865 - .llseek = seq_lseek, 1866 - .release = seq_release_private, 1867 - }; 1868 - 1869 1855 #endif /* CONFIG_PROC_FS */ 1870 1856 1871 1857 void __init dn_route_init(void) ··· 1904 1918 1905 1919 dn_dst_ops.gc_thresh = (dn_rt_hash_mask + 1); 1906 1920 1907 - proc_create("decnet_cache", 0444, init_net.proc_net, 1908 - &dn_rt_cache_seq_fops); 1921 + proc_create_seq_private("decnet_cache", 0444, init_net.proc_net, 1922 + &dn_rt_cache_seq_ops, 1923 + sizeof(struct dn_rt_cache_iter_state), NULL); 1909 1924 1910 1925 #ifdef CONFIG_DECNET_ROUTER 1911 1926 rtnl_register_module(THIS_MODULE, PF_DECnet, RTM_GETROUTE,