Linux bluetooth development
 help / color / mirror / Atom feed
From: Gustavo Padovan <padovan@profusion.mobi>
To: Emeltchenko Andrei <Andrei.Emeltchenko.news@gmail.com>
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: [RFCv4 06/16] Bluetooth: Add socket error function
Date: Tue, 14 Feb 2012 16:39:55 -0200	[thread overview]
Message-ID: <20120214183955.GB14503@joana> (raw)
In-Reply-To: <1328882113-19810-7-git-send-email-Andrei.Emeltchenko.news@gmail.com>

Hi Andrei,

* Emeltchenko Andrei <Andrei.Emeltchenko.news@gmail.com> [2012-02-10 15:55:03 +0200]:

> From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> 
> Use locked and unlocked versions to help removing socket
> locks from l2cap.
> 
> Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
> ---
>  net/bluetooth/l2cap_core.c |   30 +++++++++++++++++++++---------
>  1 files changed, 21 insertions(+), 9 deletions(-)
> 
> diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
> index 5120a1c..e0e4cc8 100644
> --- a/net/bluetooth/l2cap_core.c
> +++ b/net/bluetooth/l2cap_core.c
> @@ -243,6 +243,22 @@ static void l2cap_state_change(struct l2cap_chan *chan, int state)
>  	release_sock(sk);
>  }
>  
> +static inline void __l2cap_chan_set_err(struct l2cap_chan *chan, int err)
> +{
> +	struct sock *sk = chan->sk;
> +
> +	sk->sk_err = err;
> +}
> +
> +static inline void l2cap_chan_set_err(struct l2cap_chan *chan, int err)
> +{
> +	struct sock *sk = chan->sk;
> +
> +	lock_sock(sk);
> +	__l2cap_chan_set_err(chan, err);
> +	release_sock(sk);
> +}
> +
>  static void l2cap_chan_timeout(struct work_struct *work)
>  {
>  	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
> @@ -383,7 +399,7 @@ static void l2cap_chan_del(struct l2cap_chan *chan, int err)
>  	sock_set_flag(sk, SOCK_ZAPPED);
>  
>  	if (err)
> -		sk->sk_err = err;
> +		__l2cap_chan_set_err(chan, err);
>  
>  	if (parent) {
>  		bt_accept_unlink(sk);
> @@ -715,14 +731,11 @@ static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
>  
>  static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
>  {
> -	struct sock *sk;
>  	struct l2cap_disconn_req req;
>  
>  	if (!conn)
>  		return;
>  
> -	sk = chan->sk;
> -
>  	if (chan->mode == L2CAP_MODE_ERTM) {
>  		__clear_retrans_timer(chan);
>  		__clear_monitor_timer(chan);
> @@ -735,7 +748,7 @@ static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *c
>  			L2CAP_DISCONN_REQ, sizeof(req), &req);
>  
>  	__l2cap_state_change(chan, BT_DISCONN);
> -	sk->sk_err = err;
> +	__l2cap_chan_set_err(chan, err);
>  }
>  
>  /* ---- L2CAP connections ---- */
> @@ -974,10 +987,8 @@ static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
>  	mutex_lock(&conn->chan_lock);
>  
>  	list_for_each_entry(chan, &conn->chan_l, list) {
> -		struct sock *sk = chan->sk;
> -
>  		if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
> -			sk->sk_err = err;
> +			l2cap_chan_set_err(chan, err);

Why is this l2cap_chan_set_err()? This function wasn't holding the lock.
Please justify this change.

	Gustavo

  reply	other threads:[~2012-02-14 18:39 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-10 13:54 [RFCv4 00/16] Bluetooth: Change socket lock to l2cap_chan lock Emeltchenko Andrei
2012-02-10 13:54 ` [RFCv4 01/16] Bluetooth: trivial: Fix long line Emeltchenko Andrei
2012-02-10 13:54 ` [RFCv4 02/16] Bluetooth: Revert to mutexes from RCU list Emeltchenko Andrei
2012-02-10 18:24   ` Ulisses Furquim
2012-02-13  8:58     ` Emeltchenko Andrei
2012-02-13 14:49       ` Emeltchenko Andrei
2012-02-14  1:06         ` Ulisses Furquim
2012-02-14 13:21           ` Emeltchenko Andrei
2012-02-14 17:23             ` Ulisses Furquim
2012-02-15  8:16               ` Emeltchenko Andrei
2012-02-15  9:24                 ` Emeltchenko Andrei
2012-02-15 17:26                   ` Ulisses Furquim
2012-02-10 13:55 ` [RFCv4 03/16] Bluetooth: Do not use sk lock in get_chan functions Emeltchenko Andrei
2012-02-10 13:55 ` [RFCv4 04/16] Bluetooth: Add l2cap_chan_lock Emeltchenko Andrei
2012-02-10 13:55 ` [RFCv4 05/16] Bluetooth: Add locked and unlocked state_change Emeltchenko Andrei
2012-02-10 13:55 ` [RFCv4 06/16] Bluetooth: Add socket error function Emeltchenko Andrei
2012-02-14 18:39   ` Gustavo Padovan [this message]
2012-02-15  8:21     ` Emeltchenko Andrei
2012-02-10 13:55 ` [RFCv4 07/16] Bluetooth: Add unlocked __l2cap_chan_add function Emeltchenko Andrei
2012-02-10 13:55 ` [RFCv4 08/16] Bluetooth: Use chan lock in timers Emeltchenko Andrei
2012-02-10 13:55 ` [RFCv4 09/16] Bluetooth: Use chan lock in L2CAP sig commands Emeltchenko Andrei
2012-02-10 13:55 ` [RFCv4 10/16] Bluetooth: Use chan lock in chan delete functions Emeltchenko Andrei
2012-02-10 13:55 ` [RFCv4 11/16] Bluetooth: Use chan lock in L2CAP conn start Emeltchenko Andrei
2012-02-10 13:55 ` [RFCv4 12/16] Bluetooth: Use chan lock in receiving data Emeltchenko Andrei
2012-02-10 13:55 ` [RFCv4 13/16] Bluetooth: Change locking logic for conn/chan ready Emeltchenko Andrei
2012-02-10 13:55 ` [RFCv4 14/16] Bluetooth: Change locking logic in security_cfm Emeltchenko Andrei
2012-02-10 13:55 ` [RFCv4 15/16] Bluetooth: Use l2cap chan lock in socket connect Emeltchenko Andrei
2012-02-10 13:55 ` [RFCv4 16/16] Bluetooth: Remove socket lock check Emeltchenko Andrei

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=20120214183955.GB14503@joana \
    --to=padovan@profusion.mobi \
    --cc=Andrei.Emeltchenko.news@gmail.com \
    --cc=linux-bluetooth@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox