lkml.org 
[lkml]   [2018]   [Apr]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 33/39] atm: simplify procfs code
    Date
    Use 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.

    Signed-off-by: Christoph Hellwig <hch@lst.de>
    ---
    net/atm/proc.c | 65 ++++++--------------------------------------------
    1 file changed, 7 insertions(+), 58 deletions(-)

    diff --git a/net/atm/proc.c b/net/atm/proc.c
    index 55410c00c7e2..f272b0f59d82 100644
    --- a/net/atm/proc.c
    +++ b/net/atm/proc.c
    @@ -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);
    }
    --
    2.17.0
    \
     
     \ /
      Last update: 2018-04-19 14:49    [W:4.022 / U:0.352 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site