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
next prev parent 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