OSDN Git Service

proc: introduce proc_create_seq_private
authorChristoph Hellwig <hch@lst.de>
Tue, 24 Apr 2018 15:05:17 +0000 (17:05 +0200)
committerChristoph Hellwig <hch@lst.de>
Wed, 16 May 2018 05:23:35 +0000 (07:23 +0200)
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>
12 files changed:
fs/locks.c
fs/proc/generic.c
fs/proc/internal.h
include/linux/atalk.h
include/linux/proc_fs.h
kernel/time/timer_list.c
mm/vmalloc.c
net/appletalk/aarp.c
net/appletalk/atalk_proc.c
net/atm/lec.c
net/decnet/af_decnet.c
net/decnet/dn_route.c

index 62bbe8b..05e211b 100644 (file)
@@ -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);
index af644ca..f87cb00 100644 (file)
@@ -560,6 +560,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);
 }
 
@@ -570,9 +572,9 @@ 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)
+               unsigned int state_size, void *data)
 {
        struct proc_dir_entry *p;
 
@@ -581,9 +583,10 @@ struct proc_dir_entry *proc_create_seq_data(const char *name, umode_t mode,
                return NULL;
        p->proc_fops = &proc_seq_fops;
        p->seq_ops = ops;
+       p->state_size = state_size;
        return proc_register(parent, p);
 }
-EXPORT_SYMBOL(proc_create_seq_data);
+EXPORT_SYMBOL(proc_create_seq_private);
 
 void proc_set_size(struct proc_dir_entry *de, loff_t size)
 {
index 4fb01c5..bcfe830 100644 (file)
@@ -46,6 +46,7 @@ struct proc_dir_entry {
        const struct file_operations *proc_fops;
        const struct seq_operations *seq_ops;
        void *data;
+       unsigned int state_size;
        unsigned int low_ino;
        nlink_t nlink;
        kuid_t uid;
index 4037392..23f8055 100644 (file)
@@ -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;
index f368a89..314713a 100644 (file)
@@ -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);
+               unsigned int 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;})
index 0ed768b..675c4e9 100644 (file)
@@ -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;
index bc43c78..63a5f50 100644 (file)
@@ -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;
index d4c1021..49a16ce 100644 (file)
@@ -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. */
index d456c70..8006295 100644 (file)
@@ -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;
 
index 3138a86..5a95fcf 100644 (file)
@@ -990,18 +990,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)
@@ -1047,7 +1035,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;
index 3275160..7d6ff98 100644 (file)
@@ -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;
index eca0cc6..e747650 100644 (file)
@@ -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,