From: Gustavo Padovan <gustavo@padovan.org>
To: Masatake YAMATO <yamato@redhat.com>
Cc: andrei.emeltchenko.news@gmail.com, linux-kernel@vger.kernel.org,
linux-bluetooth@vger.kernel.org
Subject: Re: [PATCH v4 1/8] bluetooth: /proc/net/ entries for bluetooth protocols
Date: Tue, 24 Jul 2012 21:35:07 -0300 [thread overview]
Message-ID: <20120725003507.GR20029@joana> (raw)
In-Reply-To: <20120725001214.GP20029@joana>
* Gustavo Padovan <gustavo@padovan.org> [2012-07-24 21:12:14 -0300]:
> Hi Masatake,
>
> * Masatake YAMATO <yamato@redhat.com> [2012-07-16 22:20:18 +0900]:
>
> > (I resend this mail becasue I got some troubles in mail sending.
> > Andrei, [PATCH v4 [2-8]/8] are the same as [PATCH v3 [2-8]/8]. So
> > I send [PATCH v4 1/8] only here. If I should the rest of v4 patches,
> > please, let me know that.)
>
> Please keep this kind of information after the --- line, so git am
> automatically skip this when applying, otherwise I have to edit the commit
> message by hand.
>
> >
> > lsof command can tell the type of socket processes are using.
> > Internal lsof uses inode numbers on socket fs to resolve the type of
> > sockets. Files under /proc/net/, such as tcp, udp, unix, etc provides
> > such inode information.
> >
> > Unfortunately bluetooth related protocols don't provide such inode
> > information. This patch series introduces /proc/net files for the protocols.
> >
> > This patch against af_bluetooth.c provides facility to the implementation
> > of protocols. This patch extends bt_sock_list and introduces two exported
> > function bt_procfs_init, bt_procfs_cleanup.
> >
> > The type bt_sock_list is already used in some of implementation of
> > protocols. bt_procfs_init prepare seq_operations which converts
> > protocol own bt_sock_list data to protocol own proc entry when the
> > entry is accessed.
> >
> > What I, lsof user, need is just inode number of bluetooth
> > socket. However, people may want more information. The bt_procfs_init
> > takes a function pointer for customizing the show handler of
> > seq_operations.
> >
> > In v4 patch, __acquires and __releases attributes are added to suppress
> > sparse warning. Suggested by Andrei Emeltchenko.
> >
> > Signed-off-by: Masatake YAMATO <yamato@redhat.com>
> > ---
> > include/net/bluetooth/bluetooth.h | 10 +++
> > net/bluetooth/af_bluetooth.c | 138 +++++++++++++++++++++++++++++++++++++
> > 2 files changed, 148 insertions(+)
>
> Patch has been applied to bluetooth-next, however I had to fix a minor
> issue...
>
> >
> > diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
> > index 565d4be..ede0369 100644
> > --- a/include/net/bluetooth/bluetooth.h
> > +++ b/include/net/bluetooth/bluetooth.h
> > @@ -27,6 +27,7 @@
> >
> > #include <linux/poll.h>
> > #include <net/sock.h>
> > +#include <linux/seq_file.h>
> >
> > #ifndef AF_BLUETOOTH
> > #define AF_BLUETOOTH 31
> > @@ -202,6 +203,10 @@ enum {
> > struct bt_sock_list {
> > struct hlist_head head;
> > rwlock_t lock;
> > +#ifdef CONFIG_PROC_FS
> > + struct file_operations fops;
> > + int (* custom_seq_show)(struct seq_file *, void *);
> > +#endif
> > };
> >
> > int bt_sock_register(int proto, const struct net_proto_family *ops);
> > @@ -292,6 +297,11 @@ extern void hci_sock_cleanup(void);
> > extern int bt_sysfs_init(void);
> > extern void bt_sysfs_cleanup(void);
> >
> > +extern int bt_procfs_init(struct module* module, struct net *net, const char *name,
> > + struct bt_sock_list* sk_list,
> > + int (* seq_show)(struct seq_file *, void *));
> > +extern void bt_procfs_cleanup(struct net *net, const char *name);
> > +
> > extern struct dentry *bt_debugfs;
> >
> > int l2cap_init(void);
> > diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
> > index f7db579..f76cf2f 100644
> > --- a/net/bluetooth/af_bluetooth.c
> > +++ b/net/bluetooth/af_bluetooth.c
> > @@ -532,6 +532,144 @@ int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo)
> > }
> > EXPORT_SYMBOL(bt_sock_wait_state);
> >
> > +#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;
> > +
> > + read_lock(&l->lock);
> > + return seq_hlist_start_head(&l->head, *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;
> > +
> > + return seq_hlist_next(v, &l->head, 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;
> > +
> > + read_unlock(&l->lock);
> > +}
> > +
> > +static int bt_seq_show(struct seq_file *seq, void *v)
> > +{
> > + struct sock *sk;
> > + struct bt_sock *bt;
> > + struct bt_seq_state *s = seq->private;
> > + struct bt_sock_list *l = s->l;
> > + bdaddr_t src_baswapped, dst_baswapped;
> > +
> > + if (v == SEQ_START_TOKEN) {
> > + seq_puts(seq ,"sk RefCnt Rmem Wmem User Inode Src Dst Parent");
> > +
> > + if (l->custom_seq_show) {
> > + seq_putc(seq, ' ');
> > + l->custom_seq_show(seq, v);
> > + }
> > +
> > + seq_putc(seq, '\n');
> > + } else {
> > + sk = sk_entry(v);
> > + bt = bt_sk(sk);
> > + baswap(&src_baswapped, &bt->src);
> > + baswap(&dst_baswapped, &bt->dst);
> > +
> > + seq_printf(seq, "%pK %-6d %-6u %-6u %-6u %-6lu %pM %pM %-6lu",
> > + sk,
> > + atomic_read(&sk->sk_refcnt),
> > + sk_rmem_alloc_get(sk),
> > + sk_wmem_alloc_get(sk),
> > + sock_i_uid(sk),
> > + sock_i_ino(sk),
> > + &src_baswapped,
> > + &dst_baswapped,
> > + bt->parent? sock_i_ino(bt->parent): 0LU);
> > +
> > + if (l->custom_seq_show) {
> > + seq_putc(seq, ' ');
> > + l->custom_seq_show(seq, v);
> > + }
> > +
> > + seq_putc(seq, '\n');
> > + }
> > + return 0;
> > +}
> > +
> > +static struct seq_operations bt_seq_ops = {
> > + .start = bt_seq_start,
> > + .next = bt_seq_next,
> > + .stop = bt_seq_stop,
> > + .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(inode)->data;
> > + s = __seq_open_private(file, &bt_seq_ops,
> > + sizeof(struct bt_seq_state));
> > + if (s == NULL)
> > + return -ENOMEM;
> > +
> > + s->l = sk_list;
> > + return 0;
> > +}
> > +
> > +int bt_procfs_init(struct module* module, struct net *net, const char *name, struct bt_sock_list* sk_list,
> > + int (* seq_show)(struct seq_file *, void *))
>
> ... the identation here is a bit wrong, I fixed it. Thanks for doing this
> work.
I reverted this patch, it is not building.
Gustavo
next prev parent reply other threads:[~2012-07-25 0:35 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-14 17:15 [PATCH 1/8] /proc/net/ entries for bluetooth protocols Masatake YAMATO
2012-06-15 8:00 ` Andrei Emeltchenko
2012-06-17 0:26 ` Masatake YAMATO
2012-06-18 8:28 ` Andrei Emeltchenko
2012-06-28 17:02 ` Masatake YAMATO
2012-07-10 14:04 ` Andrei Emeltchenko
2012-07-11 4:58 ` [PATCH v3 1/8] bluetooth: " Masatake YAMATO
2012-07-11 4:59 ` [PATCH v3 2/8] bluetooth: Added /proc/net/bnep via bt_procfs_init() Masatake YAMATO
2012-07-25 0:20 ` Gustavo Padovan
2012-07-11 5:02 ` [PATCH v3 3/8] bluetooth: Added /proc/net/cmtp " Masatake YAMATO
2012-07-11 5:02 ` [PATCH v3 4/8] bluetooth: Added /proc/net/hci " Masatake YAMATO
2012-07-11 5:03 ` [PATCH v3 5/8] bluetooth: Added /proc/net/hidp " Masatake YAMATO
2012-07-11 5:03 ` [PATCH v3 6/8] bluetooth: Added /proc/net/l2cap " Masatake YAMATO
2012-07-11 8:48 ` Andrei Emeltchenko
2012-07-11 9:19 ` Masatake YAMATO
2012-07-11 9:49 ` Andrei Emeltchenko
2012-07-11 5:04 ` [PATCH v3 7/8] bluetooth: Added /proc/net/rfcomm " Masatake YAMATO
2012-07-11 8:49 ` Andrei Emeltchenko
2012-07-11 5:04 ` [PATCH v3 8/8] bluetooth: Added /proc/net/sco " Masatake YAMATO
2012-07-11 11:23 ` [PATCH v3 1/8] bluetooth: /proc/net/ entries for bluetooth protocols Andrei Emeltchenko
2012-07-11 12:19 ` Masatake YAMATO
2012-07-12 7:42 ` Andrei Emeltchenko
2012-07-16 13:20 ` [PATCH v4 " Masatake YAMATO
2012-07-25 0:12 ` Gustavo Padovan
2012-07-25 0:35 ` Gustavo Padovan [this message]
2012-07-25 16:26 ` [PATCH v5 1/8] Bluetooth: " Masatake YAMATO
2012-07-25 16:27 ` [PATCH v5 2/8] Bluetooth: Added /proc/net/bnep via bt_procfs_init() Masatake YAMATO
2012-07-25 16:28 ` [PATCH v5 3/8] Bluetooth: Added /proc/net/cmtp " Masatake YAMATO
2012-07-25 16:28 ` [PATCH v5 4/8] Bluetooth: Added /proc/net/hci " Masatake YAMATO
2012-07-25 16:29 ` [PATCH v5 5/8] Bluetooth: Added /proc/net/hidp " Masatake YAMATO
2012-07-25 16:29 ` [PATCH v5 6/8] Bluetooth: Added /proc/net/l2cap " Masatake YAMATO
2012-07-25 16:29 ` [PATCH v5 7/8] Bluetooth: Added /proc/net/rfcomm " Masatake YAMATO
2012-07-25 16:30 ` [PATCH v5 8/8] Added /proc/net/sco " Masatake YAMATO
2012-07-26 4:24 ` Gustavo Padovan
2012-08-15 15:22 ` Jan Engelhardt
2012-07-24 13:08 ` [PATCH v3 1/8] bluetooth: /proc/net/ entries for bluetooth protocols Masatake YAMATO
2012-07-24 13:15 ` Andrei Emeltchenko
2012-06-18 10:00 ` [PATCH v2 1/8] " Masatake YAMATO
2012-07-10 14:06 ` Andrei Emeltchenko
2012-06-18 10:00 ` [PATCH v2 2/8] Added /proc/net/bnep via bt_procfs_init() Masatake YAMATO
2012-06-18 10:01 ` [PATCH v2 3/8] Added /proc/net/cmtp " Masatake YAMATO
2012-06-18 10:01 ` [PATCH v2 4/8] Added /proc/net/hci " Masatake YAMATO
2012-06-18 10:03 ` [PATCH v2 5/8] Added /proc/net/hidp " Masatake YAMATO
2012-06-18 10:03 ` [PATCH v2 6/8] Added /proc/net/l2cap " Masatake YAMATO
2012-06-18 10:04 ` [PATCH v2 7/8] Added /proc/net/rfcomm " Masatake YAMATO
2012-06-18 10:04 ` [PATCH v2 8/8] Added /proc/net/sco " Masatake YAMATO
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120725003507.GR20029@joana \
--to=gustavo@padovan.org \
--cc=andrei.emeltchenko.news@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=yamato@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.