aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorGustavo F. Padovan <padovan@profusion.mobi>2011-03-25 19:36:10 -0400
committerGustavo F. Padovan <padovan@profusion.mobi>2011-04-07 17:06:27 -0400
commitf1c6775be6fc944e32e0150305d9753b9a846519 (patch)
tree6e860c375073aaae189231fd5eff9c27b315ea7e /net
parente92c8e70faf5e3cc22979daba2a895359aa1eab2 (diff)
Bluetooth: Move srej and busy queues to struct l2cap_chan
As part of the moving channel stuff to l2cap_chan. Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Diffstat (limited to 'net')
-rw-r--r--net/bluetooth/l2cap_core.c42
-rw-r--r--net/bluetooth/l2cap_sock.c2
2 files changed, 20 insertions, 24 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index eaac13cb7932..06c505b1476d 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -245,8 +245,8 @@ void l2cap_chan_del(struct l2cap_chan *chan, int err)
245 del_timer(&chan->monitor_timer); 245 del_timer(&chan->monitor_timer);
246 del_timer(&chan->ack_timer); 246 del_timer(&chan->ack_timer);
247 247
248 skb_queue_purge(SREJ_QUEUE(sk)); 248 skb_queue_purge(&chan->srej_q);
249 skb_queue_purge(BUSY_QUEUE(sk)); 249 skb_queue_purge(&chan->busy_q);
250 250
251 list_for_each_entry_safe(l, tmp, SREJ_LIST(sk), list) { 251 list_for_each_entry_safe(l, tmp, SREJ_LIST(sk), list) {
252 list_del(&l->list); 252 list_del(&l->list);
@@ -1588,8 +1588,8 @@ static inline void l2cap_ertm_init(struct l2cap_chan *chan)
1588 (unsigned long) chan); 1588 (unsigned long) chan);
1589 setup_timer(&chan->ack_timer, l2cap_ack_timeout, (unsigned long) chan); 1589 setup_timer(&chan->ack_timer, l2cap_ack_timeout, (unsigned long) chan);
1590 1590
1591 __skb_queue_head_init(SREJ_QUEUE(sk)); 1591 skb_queue_head_init(&chan->srej_q);
1592 __skb_queue_head_init(BUSY_QUEUE(sk)); 1592 skb_queue_head_init(&chan->busy_q);
1593 1593
1594 INIT_WORK(&l2cap_pi(sk)->busy_work, l2cap_busy_work); 1594 INIT_WORK(&l2cap_pi(sk)->busy_work, l2cap_busy_work);
1595 1595
@@ -2815,16 +2815,15 @@ static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
2815 2815
2816static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u8 tx_seq, u8 sar) 2816static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u8 tx_seq, u8 sar)
2817{ 2817{
2818 struct sock *sk = chan->sk;
2819 struct sk_buff *next_skb; 2818 struct sk_buff *next_skb;
2820 int tx_seq_offset, next_tx_seq_offset; 2819 int tx_seq_offset, next_tx_seq_offset;
2821 2820
2822 bt_cb(skb)->tx_seq = tx_seq; 2821 bt_cb(skb)->tx_seq = tx_seq;
2823 bt_cb(skb)->sar = sar; 2822 bt_cb(skb)->sar = sar;
2824 2823
2825 next_skb = skb_peek(SREJ_QUEUE(sk)); 2824 next_skb = skb_peek(&chan->srej_q);
2826 if (!next_skb) { 2825 if (!next_skb) {
2827 __skb_queue_tail(SREJ_QUEUE(sk), skb); 2826 __skb_queue_tail(&chan->srej_q, skb);
2828 return 0; 2827 return 0;
2829 } 2828 }
2830 2829
@@ -2842,16 +2841,16 @@ static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb,
2842 next_tx_seq_offset += 64; 2841 next_tx_seq_offset += 64;
2843 2842
2844 if (next_tx_seq_offset > tx_seq_offset) { 2843 if (next_tx_seq_offset > tx_seq_offset) {
2845 __skb_queue_before(SREJ_QUEUE(sk), next_skb, skb); 2844 __skb_queue_before(&chan->srej_q, next_skb, skb);
2846 return 0; 2845 return 0;
2847 } 2846 }
2848 2847
2849 if (skb_queue_is_last(SREJ_QUEUE(sk), next_skb)) 2848 if (skb_queue_is_last(&chan->srej_q, next_skb))
2850 break; 2849 break;
2851 2850
2852 } while ((next_skb = skb_queue_next(SREJ_QUEUE(sk), next_skb))); 2851 } while ((next_skb = skb_queue_next(&chan->srej_q, next_skb)));
2853 2852
2854 __skb_queue_tail(SREJ_QUEUE(sk), skb); 2853 __skb_queue_tail(&chan->srej_q, skb);
2855 2854
2856 return 0; 2855 return 0;
2857} 2856}
@@ -2971,11 +2970,11 @@ static int l2cap_try_push_rx_skb(struct l2cap_chan *chan)
2971 u16 control; 2970 u16 control;
2972 int err; 2971 int err;
2973 2972
2974 while ((skb = skb_dequeue(BUSY_QUEUE(sk)))) { 2973 while ((skb = skb_dequeue(&chan->busy_q))) {
2975 control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT; 2974 control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
2976 err = l2cap_ertm_reassembly_sdu(chan, skb, control); 2975 err = l2cap_ertm_reassembly_sdu(chan, skb, control);
2977 if (err < 0) { 2976 if (err < 0) {
2978 skb_queue_head(BUSY_QUEUE(sk), skb); 2977 skb_queue_head(&chan->busy_q, skb);
2979 return -EBUSY; 2978 return -EBUSY;
2980 } 2979 }
2981 2980
@@ -3016,7 +3015,7 @@ static void l2cap_busy_work(struct work_struct *work)
3016 lock_sock(sk); 3015 lock_sock(sk);
3017 3016
3018 add_wait_queue(sk_sleep(sk), &wait); 3017 add_wait_queue(sk_sleep(sk), &wait);
3019 while ((skb = skb_peek(BUSY_QUEUE(sk)))) { 3018 while ((skb = skb_peek(&pi->chan->busy_q))) {
3020 set_current_state(TASK_INTERRUPTIBLE); 3019 set_current_state(TASK_INTERRUPTIBLE);
3021 3020
3022 if (n_tries++ > L2CAP_LOCAL_BUSY_TRIES) { 3021 if (n_tries++ > L2CAP_LOCAL_BUSY_TRIES) {
@@ -3059,7 +3058,7 @@ static int l2cap_push_rx_skb(struct l2cap_chan *chan, struct sk_buff *skb, u16 c
3059 3058
3060 if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) { 3059 if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
3061 bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT; 3060 bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT;
3062 __skb_queue_tail(BUSY_QUEUE(sk), skb); 3061 __skb_queue_tail(&chan->busy_q, skb);
3063 return l2cap_try_push_rx_skb(chan); 3062 return l2cap_try_push_rx_skb(chan);
3064 3063
3065 3064
@@ -3076,7 +3075,7 @@ static int l2cap_push_rx_skb(struct l2cap_chan *chan, struct sk_buff *skb, u16 c
3076 3075
3077 chan->conn_state |= L2CAP_CONN_LOCAL_BUSY; 3076 chan->conn_state |= L2CAP_CONN_LOCAL_BUSY;
3078 bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT; 3077 bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT;
3079 __skb_queue_tail(BUSY_QUEUE(sk), skb); 3078 __skb_queue_tail(&chan->busy_q, skb);
3080 3079
3081 sctrl = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT; 3080 sctrl = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3082 sctrl |= L2CAP_SUPER_RCV_NOT_READY; 3081 sctrl |= L2CAP_SUPER_RCV_NOT_READY;
@@ -3187,15 +3186,14 @@ drop:
3187 3186
3188static void l2cap_check_srej_gap(struct l2cap_chan *chan, u8 tx_seq) 3187static void l2cap_check_srej_gap(struct l2cap_chan *chan, u8 tx_seq)
3189{ 3188{
3190 struct sock *sk = chan->sk;
3191 struct sk_buff *skb; 3189 struct sk_buff *skb;
3192 u16 control; 3190 u16 control;
3193 3191
3194 while ((skb = skb_peek(SREJ_QUEUE(sk)))) { 3192 while ((skb = skb_peek(&chan->srej_q))) {
3195 if (bt_cb(skb)->tx_seq != tx_seq) 3193 if (bt_cb(skb)->tx_seq != tx_seq)
3196 break; 3194 break;
3197 3195
3198 skb = skb_dequeue(SREJ_QUEUE(sk)); 3196 skb = skb_dequeue(&chan->srej_q);
3199 control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT; 3197 control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
3200 l2cap_ertm_reassembly_sdu(chan, skb, control); 3198 l2cap_ertm_reassembly_sdu(chan, skb, control);
3201 chan->buffer_seq_srej = 3199 chan->buffer_seq_srej =
@@ -3334,8 +3332,8 @@ static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u16 rx_cont
3334 INIT_LIST_HEAD(SREJ_LIST(sk)); 3332 INIT_LIST_HEAD(SREJ_LIST(sk));
3335 chan->buffer_seq_srej = chan->buffer_seq; 3333 chan->buffer_seq_srej = chan->buffer_seq;
3336 3334
3337 __skb_queue_head_init(SREJ_QUEUE(sk)); 3335 __skb_queue_head_init(&chan->srej_q);
3338 __skb_queue_head_init(BUSY_QUEUE(sk)); 3336 __skb_queue_head_init(&chan->busy_q);
3339 l2cap_add_to_srej_queue(chan, skb, tx_seq, sar); 3337 l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3340 3338
3341 chan->conn_state |= L2CAP_CONN_SEND_PBIT; 3339 chan->conn_state |= L2CAP_CONN_SEND_PBIT;
@@ -3352,7 +3350,7 @@ expected:
3352 if (chan->conn_state & L2CAP_CONN_SREJ_SENT) { 3350 if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
3353 bt_cb(skb)->tx_seq = tx_seq; 3351 bt_cb(skb)->tx_seq = tx_seq;
3354 bt_cb(skb)->sar = sar; 3352 bt_cb(skb)->sar = sar;
3355 __skb_queue_tail(SREJ_QUEUE(sk), skb); 3353 __skb_queue_tail(&chan->srej_q, skb);
3356 return 0; 3354 return 0;
3357 } 3355 }
3358 3356
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index d66886f7eccb..55dee999af94 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -1018,8 +1018,6 @@ void l2cap_sock_init(struct sock *sk, struct sock *parent)
1018 /* Default config options */ 1018 /* Default config options */
1019 pi->flush_to = L2CAP_DEFAULT_FLUSH_TO; 1019 pi->flush_to = L2CAP_DEFAULT_FLUSH_TO;
1020 skb_queue_head_init(TX_QUEUE(sk)); 1020 skb_queue_head_init(TX_QUEUE(sk));
1021 skb_queue_head_init(SREJ_QUEUE(sk));
1022 skb_queue_head_init(BUSY_QUEUE(sk));
1023 INIT_LIST_HEAD(SREJ_LIST(sk)); 1021 INIT_LIST_HEAD(SREJ_LIST(sk));
1024} 1022}
1025 1023