2012-07-27 18:21:21

by Syam Sidhardhan

[permalink] [raw]
Subject: [PATCH] Bluetooth: Use kref for l2cap channel reference counting

This patch changes the struct l2cap_chan and associated code to use
kref api for object refcounting and freeing.

Suggested-by: Andrei Emeltchenko <[email protected]>
Signed-off-by: Jaganath Kanakkassery <[email protected]>
Signed-off-by: Syam Sidhardhan <[email protected]>
---
include/net/bluetooth/l2cap.h | 3 +--
net/bluetooth/l2cap_core.c | 15 ++++++++-------
2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index d206296..7ed8e35 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -433,11 +433,10 @@ struct l2cap_chan {
struct sock *sk;

struct l2cap_conn *conn;
+ struct kref kref;

__u8 state;

- atomic_t refcnt;
-
__le16 psm;
__u16 dcid;
__u16 scid;
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 6dde7c5..bedc960 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -406,7 +406,7 @@ struct l2cap_chan *l2cap_chan_create(void)

chan->state = BT_OPEN;

- atomic_set(&chan->refcnt, 1);
+ kref_init(&chan->kref);

/* This flag is cleared in l2cap_chan_ready() */
set_bit(CONF_NOT_COMPLETE, &chan->conf_state);
@@ -416,8 +416,10 @@ struct l2cap_chan *l2cap_chan_create(void)
return chan;
}

-static void l2cap_chan_destroy(struct l2cap_chan *chan)
+static void l2cap_chan_destroy(struct kref *kref)
{
+ struct l2cap_chan *chan = container_of(kref, struct l2cap_chan, kref);
+
BT_DBG("chan %p", chan);

write_lock(&chan_list_lock);
@@ -429,17 +431,16 @@ static void l2cap_chan_destroy(struct l2cap_chan *chan)

void l2cap_chan_hold(struct l2cap_chan *c)
{
- BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->refcnt));
+ BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->kref.refcount));

- atomic_inc(&c->refcnt);
+ kref_get(&c->kref);
}

void l2cap_chan_put(struct l2cap_chan *c)
{
- BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->refcnt));
+ BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->kref.refcount));

- if (atomic_dec_and_test(&c->refcnt))
- l2cap_chan_destroy(c);
+ kref_put(&c->kref, l2cap_chan_destroy);
}

void l2cap_chan_set_defaults(struct l2cap_chan *chan)
--
1.7.4.1



2012-07-27 18:21:22

by Syam Sidhardhan

[permalink] [raw]
Subject: [PATCH] Bluetooth: debug: Correct the PSM printing

Earlier we were printing chan->psm before assigning any value.

Signed-off-by: Syam Sidhardhan <[email protected]>
---
net/bluetooth/l2cap_core.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index bedc960..0912a63 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -1447,7 +1447,7 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
int err;

BT_DBG("%s -> %s (type %u) psm 0x%2.2x", batostr(src), batostr(dst),
- dst_type, __le16_to_cpu(chan->psm));
+ dst_type, __le16_to_cpu(psm));

hdev = hci_get_route(dst, src);
if (!hdev)
--
1.7.4.1


2012-08-21 17:34:56

by Gustavo Padovan

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Use kref for l2cap channel reference counting

Hi Syam,

* Syam Sidhardhan <[email protected]> [2012-07-27 23:51:21 +0530]:

> This patch changes the struct l2cap_chan and associated code to use
> kref api for object refcounting and freeing.
>
> Suggested-by: Andrei Emeltchenko <[email protected]>
> Signed-off-by: Jaganath Kanakkassery <[email protected]>
> Signed-off-by: Syam Sidhardhan <[email protected]>
> ---
> include/net/bluetooth/l2cap.h | 3 +--
> net/bluetooth/l2cap_core.c | 15 ++++++++-------
> 2 files changed, 9 insertions(+), 9 deletions(-)

Patch has been applied to linux-bluetooth. Thanks.

Gustavo

2012-08-21 17:29:47

by Gustavo Padovan

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: debug: Correct the PSM printing

Hi Syam,

* Syam Sidhardhan <[email protected]> [2012-07-27 23:51:22 +0530]:

> Earlier we were printing chan->psm before assigning any value.
>
> Signed-off-by: Syam Sidhardhan <[email protected]>
> ---
> net/bluetooth/l2cap_core.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)

Patch has been applied to bluetooth-next. Thanks.

Gustavo

2012-08-13 14:37:08

by Syam Sidhardhan

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: debug: Correct the PSM printing

Hi,

----- Original Message -----
From: "Andrei Emeltchenko" <[email protected]>
To: "Syam Sidhardhan" <[email protected]>
Cc: <[email protected]>; <[email protected]>
Sent: Monday, August 06, 2012 3:16 PM
Subject: Re: [PATCH] Bluetooth: debug: Correct the PSM printing


> Hi Syam,
>
> On Fri, Jul 27, 2012 at 11:51:22PM +0530, Syam Sidhardhan wrote:
>> Earlier we were printing chan->psm before assigning any value.
>>
>> Signed-off-by: Syam Sidhardhan <[email protected]>
>
> Acked-by: Andrei Emeltchenko <[email protected]>
>
>> ---
>> net/bluetooth/l2cap_core.c | 2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
>> index bedc960..0912a63 100644
>> --- a/net/bluetooth/l2cap_core.c
>> +++ b/net/bluetooth/l2cap_core.c
>> @@ -1447,7 +1447,7 @@ int l2cap_chan_connect(struct l2cap_chan *chan,
>> __le16 psm, u16 cid,
>> int err;
>>
>> BT_DBG("%s -> %s (type %u) psm 0x%2.2x", batostr(src), batostr(dst),
>> - dst_type, __le16_to_cpu(chan->psm));
>> + dst_type, __le16_to_cpu(psm));
>>
>> hdev = hci_get_route(dst, src);
>> if (!hdev)
>> --
>> 1.7.4.1
>>

ping..

Regards,
Syam


2012-08-13 14:35:51

by Syam Sidhardhan

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Use kref for l2cap channel reference counting

Hi,

----- Original Message -----
From: "Syam Sidhardhan" <[email protected]>
To: <[email protected]>
Cc: <[email protected]>; "Syam Sidhardhan" <[email protected]>
Sent: Friday, July 27, 2012 11:51 PM
Subject: [PATCH] Bluetooth: Use kref for l2cap channel reference counting


> This patch changes the struct l2cap_chan and associated code to use
> kref api for object refcounting and freeing.
>
> Suggested-by: Andrei Emeltchenko <[email protected]>
> Signed-off-by: Jaganath Kanakkassery <[email protected]>
> Signed-off-by: Syam Sidhardhan <[email protected]>
> ---
> include/net/bluetooth/l2cap.h | 3 +--
> net/bluetooth/l2cap_core.c | 15 ++++++++-------
> 2 files changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
> index d206296..7ed8e35 100644
> --- a/include/net/bluetooth/l2cap.h
> +++ b/include/net/bluetooth/l2cap.h
> @@ -433,11 +433,10 @@ struct l2cap_chan {
> struct sock *sk;
>
> struct l2cap_conn *conn;
> + struct kref kref;
>
> __u8 state;
>
> - atomic_t refcnt;
> -
> __le16 psm;
> __u16 dcid;
> __u16 scid;
> diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
> index 6dde7c5..bedc960 100644
> --- a/net/bluetooth/l2cap_core.c
> +++ b/net/bluetooth/l2cap_core.c
> @@ -406,7 +406,7 @@ struct l2cap_chan *l2cap_chan_create(void)
>
> chan->state = BT_OPEN;
>
> - atomic_set(&chan->refcnt, 1);
> + kref_init(&chan->kref);
>
> /* This flag is cleared in l2cap_chan_ready() */
> set_bit(CONF_NOT_COMPLETE, &chan->conf_state);
> @@ -416,8 +416,10 @@ struct l2cap_chan *l2cap_chan_create(void)
> return chan;
> }
>
> -static void l2cap_chan_destroy(struct l2cap_chan *chan)
> +static void l2cap_chan_destroy(struct kref *kref)
> {
> + struct l2cap_chan *chan = container_of(kref, struct l2cap_chan, kref);
> +
> BT_DBG("chan %p", chan);
>
> write_lock(&chan_list_lock);
> @@ -429,17 +431,16 @@ static void l2cap_chan_destroy(struct l2cap_chan
> *chan)
>
> void l2cap_chan_hold(struct l2cap_chan *c)
> {
> - BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->refcnt));
> + BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->kref.refcount));
>
> - atomic_inc(&c->refcnt);
> + kref_get(&c->kref);
> }
>
> void l2cap_chan_put(struct l2cap_chan *c)
> {
> - BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->refcnt));
> + BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->kref.refcount));
>
> - if (atomic_dec_and_test(&c->refcnt))
> - l2cap_chan_destroy(c);
> + kref_put(&c->kref, l2cap_chan_destroy);
> }
>
> void l2cap_chan_set_defaults(struct l2cap_chan *chan)
> --

ping

Regards,
Syam


2012-08-06 09:46:08

by Andrei Emeltchenko

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: debug: Correct the PSM printing

Hi Syam,

On Fri, Jul 27, 2012 at 11:51:22PM +0530, Syam Sidhardhan wrote:
> Earlier we were printing chan->psm before assigning any value.
>
> Signed-off-by: Syam Sidhardhan <[email protected]>

Acked-by: Andrei Emeltchenko <[email protected]>

> ---
> net/bluetooth/l2cap_core.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
> index bedc960..0912a63 100644
> --- a/net/bluetooth/l2cap_core.c
> +++ b/net/bluetooth/l2cap_core.c
> @@ -1447,7 +1447,7 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
> int err;
>
> BT_DBG("%s -> %s (type %u) psm 0x%2.2x", batostr(src), batostr(dst),
> - dst_type, __le16_to_cpu(chan->psm));
> + dst_type, __le16_to_cpu(psm));
>
> hdev = hci_get_route(dst, src);
> if (!hdev)
> --
> 1.7.4.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html