lkml.org 
[lkml]   [2018]   [May]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 35/42] bluetooth: switch to proc_create_seq_data
    Date
    And use proc private data directly instead of doing a detour
    through seq->private and private state.

    Signed-off-by: Christoph Hellwig <hch@lst.de>
    ---
    net/bluetooth/af_bluetooth.c | 40 +++++-------------------------------
    1 file changed, 5 insertions(+), 35 deletions(-)

    diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
    index 84d92a077834..3264e1873219 100644
    --- a/net/bluetooth/af_bluetooth.c
    +++ b/net/bluetooth/af_bluetooth.c
    @@ -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;
    }
    --
    2.17.0
    \
     
     \ /
      Last update: 2018-05-16 11:48    [W:4.316 / U:0.540 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site