diff options
| author | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-03-31 23:35:21 -0400 |
|---|---|---|
| committer | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-04-07 17:06:26 -0400 |
| commit | 820ffdb3d25f74fbd553453f461709d52dfa72a2 (patch) | |
| tree | e02640fe22d34177ef9b237a48128b900ddf6775 /net | |
| parent | baa7e1fa6d2870462bd744df1c6ddbd497fe86d6 (diff) | |
Bluetooth: Remove struct del_list
As we use struct list_head to keep L2CAP channels list the workaround with
del_list is not needed anymore.
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Diffstat (limited to 'net')
| -rw-r--r-- | net/bluetooth/l2cap_core.c | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 0dbbaf394c13..b0aaaa9cf00e 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c | |||
| @@ -487,16 +487,13 @@ void l2cap_send_disconn_req(struct l2cap_conn *conn, struct sock *sk, int err) | |||
| 487 | /* ---- L2CAP connections ---- */ | 487 | /* ---- L2CAP connections ---- */ |
| 488 | static void l2cap_conn_start(struct l2cap_conn *conn) | 488 | static void l2cap_conn_start(struct l2cap_conn *conn) |
| 489 | { | 489 | { |
| 490 | struct sock_del_list del, *tmp1, *tmp2; | 490 | struct l2cap_chan *chan, *tmp; |
| 491 | struct l2cap_chan *chan; | ||
| 492 | 491 | ||
| 493 | BT_DBG("conn %p", conn); | 492 | BT_DBG("conn %p", conn); |
| 494 | 493 | ||
| 495 | INIT_LIST_HEAD(&del.list); | ||
| 496 | |||
| 497 | read_lock(&conn->chan_lock); | 494 | read_lock(&conn->chan_lock); |
| 498 | 495 | ||
| 499 | list_for_each_entry(chan, &conn->chan_l, list) { | 496 | list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) { |
| 500 | struct sock *sk = chan->sk; | 497 | struct sock *sk = chan->sk; |
| 501 | 498 | ||
| 502 | bh_lock_sock(sk); | 499 | bh_lock_sock(sk); |
| @@ -520,10 +517,11 @@ static void l2cap_conn_start(struct l2cap_conn *conn) | |||
| 520 | conn->feat_mask) | 517 | conn->feat_mask) |
| 521 | && l2cap_pi(sk)->conf_state & | 518 | && l2cap_pi(sk)->conf_state & |
| 522 | L2CAP_CONF_STATE2_DEVICE) { | 519 | L2CAP_CONF_STATE2_DEVICE) { |
| 523 | tmp1 = kzalloc(sizeof(struct sock_del_list), | 520 | /* __l2cap_sock_close() calls list_del(chan) |
| 524 | GFP_ATOMIC); | 521 | * so release the lock */ |
| 525 | tmp1->sk = sk; | 522 | read_unlock_bh(&conn->chan_lock); |
| 526 | list_add_tail(&tmp1->list, &del.list); | 523 | __l2cap_sock_close(sk, ECONNRESET); |
| 524 | read_lock_bh(&conn->chan_lock); | ||
| 527 | bh_unlock_sock(sk); | 525 | bh_unlock_sock(sk); |
| 528 | continue; | 526 | continue; |
| 529 | } | 527 | } |
| @@ -579,14 +577,6 @@ static void l2cap_conn_start(struct l2cap_conn *conn) | |||
| 579 | } | 577 | } |
| 580 | 578 | ||
| 581 | read_unlock(&conn->chan_lock); | 579 | read_unlock(&conn->chan_lock); |
| 582 | |||
| 583 | list_for_each_entry_safe(tmp1, tmp2, &del.list, list) { | ||
| 584 | bh_lock_sock(tmp1->sk); | ||
| 585 | __l2cap_sock_close(tmp1->sk, ECONNRESET); | ||
| 586 | bh_unlock_sock(tmp1->sk); | ||
| 587 | list_del(&tmp1->list); | ||
| 588 | kfree(tmp1); | ||
| 589 | } | ||
| 590 | } | 580 | } |
| 591 | 581 | ||
| 592 | /* Find socket with cid and source bdaddr. | 582 | /* Find socket with cid and source bdaddr. |
