[Bluetooth] Read local version information on device init
[pandora-kernel.git] / net / dccp / ackvec.c
index 8c211c5..4d176d3 100644 (file)
@@ -142,14 +142,13 @@ struct dccp_ackvec *dccp_ackvec_alloc(const gfp_t priority)
        struct dccp_ackvec *av = kmem_cache_alloc(dccp_ackvec_slab, priority);
 
        if (av != NULL) {
-               av->dccpav_buf_head     =
-                       av->dccpav_buf_tail = DCCP_MAX_ACKVEC_LEN - 1;
+               av->dccpav_buf_head     = DCCP_MAX_ACKVEC_LEN - 1;
                av->dccpav_buf_ackno    = DCCP_MAX_SEQNO + 1;
                av->dccpav_buf_nonce = av->dccpav_buf_nonce = 0;
                av->dccpav_ack_ptr      = 0;
                av->dccpav_time.tv_sec  = 0;
                av->dccpav_time.tv_usec = 0;
-               av->dccpav_sent_len     = av->dccpav_vec_len = 0;
+               av->dccpav_vec_len      = 0;
                INIT_LIST_HEAD(&av->dccpav_records);
        }
 
@@ -353,11 +352,13 @@ static void dccp_ackvec_throw_record(struct dccp_ackvec *av,
 {
        struct dccp_ackvec_record *next;
 
-       av->dccpav_buf_tail = avr->dccpavr_ack_ptr - 1;
-       if (av->dccpav_buf_tail == 0)
-               av->dccpav_buf_tail = DCCP_MAX_ACKVEC_LEN - 1;
-
-       av->dccpav_vec_len -= avr->dccpavr_sent_len;
+       /* sort out vector length */
+       if (av->dccpav_buf_head <= avr->dccpavr_ack_ptr)
+               av->dccpav_vec_len = avr->dccpavr_ack_ptr - av->dccpav_buf_head;
+       else
+               av->dccpav_vec_len = DCCP_MAX_ACKVEC_LEN - 1
+                                    - av->dccpav_buf_head
+                                    + avr->dccpavr_ack_ptr;
 
        /* free records */
        list_for_each_entry_safe_from(avr, next, &av->dccpav_records,
@@ -434,8 +435,7 @@ static void dccp_ackvec_check_rcv_ackvector(struct dccp_ackvec *av,
                break;
 found:
                if (between48(avr->dccpavr_ack_seqno, ackno_end_rl, ackno)) {
-                       const u8 state = (*vector &
-                                         DCCP_ACKVEC_STATE_MASK) >> 6;
+                       const u8 state = *vector & DCCP_ACKVEC_STATE_MASK;
                        if (state != DCCP_ACKVEC_STATE_NOT_RECEIVED) {
 #ifdef CONFIG_IP_DCCP_DEBUG
                                struct dccp_sock *dp = dccp_sk(sk);