diff options
| author | Arnaldo Carvalho de Melo <acme@mandriva.com> | 2006-01-03 22:46:34 -0500 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@mandriva.com> | 2006-01-03 22:46:34 -0500 |
| commit | e4dfd449c80a41bb615b23d0fc198ba08360a1f8 (patch) | |
| tree | cf5ca5bb82cc5e7ef01a368bf6b86029266bc146 | |
| parent | 6742bbcbb8a0959e1dff0ce055768e3217d9967a (diff) | |
[DCCP] ackvec: use u8 for the buf offsets
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
| -rw-r--r-- | net/dccp/ackvec.c | 27 | ||||
| -rw-r--r-- | net/dccp/ackvec.h | 12 |
2 files changed, 23 insertions, 16 deletions
diff --git a/net/dccp/ackvec.c b/net/dccp/ackvec.c index a979f4e5041d..ce9cb77c5c29 100644 --- a/net/dccp/ackvec.c +++ b/net/dccp/ackvec.c | |||
| @@ -55,8 +55,8 @@ int dccp_insert_option_ackvec(struct sock *sk, struct sk_buff *skb) | |||
| 55 | from = av->dccpav_buf + av->dccpav_buf_head; | 55 | from = av->dccpav_buf + av->dccpav_buf_head; |
| 56 | 56 | ||
| 57 | /* Check if buf_head wraps */ | 57 | /* Check if buf_head wraps */ |
| 58 | if (av->dccpav_buf_head + len > av->dccpav_vec_len) { | 58 | if ((int)av->dccpav_buf_head + len > av->dccpav_vec_len) { |
| 59 | const u32 tailsize = (av->dccpav_vec_len - av->dccpav_buf_head); | 59 | const u32 tailsize = av->dccpav_vec_len - av->dccpav_buf_head; |
| 60 | 60 | ||
| 61 | memcpy(to, from, tailsize); | 61 | memcpy(to, from, tailsize); |
| 62 | to += tailsize; | 62 | to += tailsize; |
| @@ -93,8 +93,14 @@ int dccp_insert_option_ackvec(struct sock *sk, struct sk_buff *skb) | |||
| 93 | struct dccp_ackvec *dccp_ackvec_alloc(const unsigned int len, | 93 | struct dccp_ackvec *dccp_ackvec_alloc(const unsigned int len, |
| 94 | const gfp_t priority) | 94 | const gfp_t priority) |
| 95 | { | 95 | { |
| 96 | struct dccp_ackvec *av = kmalloc(sizeof(*av) + len, priority); | 96 | struct dccp_ackvec *av; |
| 97 | 97 | ||
| 98 | BUG_ON(len == 0); | ||
| 99 | |||
| 100 | if (len > DCCP_MAX_ACKVEC_LEN) | ||
| 101 | return NULL; | ||
| 102 | |||
| 103 | av = kmalloc(sizeof(*av) + len, priority); | ||
| 98 | if (av != NULL) { | 104 | if (av != NULL) { |
| 99 | av->dccpav_buf_len = len; | 105 | av->dccpav_buf_len = len; |
| 100 | av->dccpav_buf_head = | 106 | av->dccpav_buf_head = |
| @@ -117,13 +123,13 @@ void dccp_ackvec_free(struct dccp_ackvec *av) | |||
| 117 | } | 123 | } |
| 118 | 124 | ||
| 119 | static inline u8 dccp_ackvec_state(const struct dccp_ackvec *av, | 125 | static inline u8 dccp_ackvec_state(const struct dccp_ackvec *av, |
| 120 | const unsigned int index) | 126 | const u8 index) |
| 121 | { | 127 | { |
| 122 | return av->dccpav_buf[index] & DCCP_ACKVEC_STATE_MASK; | 128 | return av->dccpav_buf[index] & DCCP_ACKVEC_STATE_MASK; |
| 123 | } | 129 | } |
| 124 | 130 | ||
| 125 | static inline u8 dccp_ackvec_len(const struct dccp_ackvec *av, | 131 | static inline u8 dccp_ackvec_len(const struct dccp_ackvec *av, |
| 126 | const unsigned int index) | 132 | const u8 index) |
| 127 | { | 133 | { |
| 128 | return av->dccpav_buf[index] & DCCP_ACKVEC_LEN_MASK; | 134 | return av->dccpav_buf[index] & DCCP_ACKVEC_LEN_MASK; |
| 129 | } | 135 | } |
| @@ -135,7 +141,7 @@ static inline u8 dccp_ackvec_len(const struct dccp_ackvec *av, | |||
| 135 | */ | 141 | */ |
| 136 | static inline int dccp_ackvec_set_buf_head_state(struct dccp_ackvec *av, | 142 | static inline int dccp_ackvec_set_buf_head_state(struct dccp_ackvec *av, |
| 137 | const unsigned int packets, | 143 | const unsigned int packets, |
| 138 | const unsigned char state) | 144 | const unsigned char state) |
| 139 | { | 145 | { |
| 140 | unsigned int gap; | 146 | unsigned int gap; |
| 141 | signed long new_head; | 147 | signed long new_head; |
| @@ -223,7 +229,7 @@ int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk, | |||
| 223 | * could reduce the complexity of this scan.) | 229 | * could reduce the complexity of this scan.) |
| 224 | */ | 230 | */ |
| 225 | u64 delta = dccp_delta_seqno(ackno, av->dccpav_buf_ackno); | 231 | u64 delta = dccp_delta_seqno(ackno, av->dccpav_buf_ackno); |
| 226 | unsigned int index = av->dccpav_buf_head; | 232 | u8 index = av->dccpav_buf_head; |
| 227 | 233 | ||
| 228 | while (1) { | 234 | while (1) { |
| 229 | const u8 len = dccp_ackvec_len(av, index); | 235 | const u8 len = dccp_ackvec_len(av, index); |
| @@ -301,9 +307,10 @@ static void dccp_ackvec_throw_away_ack_record(struct dccp_ackvec *av) | |||
| 301 | * draft-ietf-dccp-spec-11.txt Appendix A. -acme | 307 | * draft-ietf-dccp-spec-11.txt Appendix A. -acme |
| 302 | */ | 308 | */ |
| 303 | #if 0 | 309 | #if 0 |
| 304 | av->dccpav_buf_tail = av->dccpav_ack_ptr + 1; | 310 | u32 new_buf_tail = av->dccpav_ack_ptr + 1; |
| 305 | if (av->dccpav_buf_tail >= av->dccpav_vec_len) | 311 | if (new_buf_tail >= av->dccpav_vec_len) |
| 306 | av->dccpav_buf_tail -= av->dccpav_vec_len; | 312 | new_buf_tail -= av->dccpav_vec_len; |
| 313 | av->dccpav_buf_tail = new_buf_tail; | ||
| 307 | #endif | 314 | #endif |
| 308 | av->dccpav_vec_len -= av->dccpav_sent_len; | 315 | av->dccpav_vec_len -= av->dccpav_sent_len; |
| 309 | } | 316 | } |
diff --git a/net/dccp/ackvec.h b/net/dccp/ackvec.h index d0fd6c60c574..f7dfb5f67b87 100644 --- a/net/dccp/ackvec.h +++ b/net/dccp/ackvec.h | |||
| @@ -54,16 +54,16 @@ | |||
| 54 | * @dccpav_buf - circular buffer of acknowledgeable packets | 54 | * @dccpav_buf - circular buffer of acknowledgeable packets |
| 55 | */ | 55 | */ |
| 56 | struct dccp_ackvec { | 56 | struct dccp_ackvec { |
| 57 | unsigned int dccpav_buf_head; | ||
| 58 | unsigned int dccpav_buf_tail; | ||
| 59 | u64 dccpav_buf_ackno; | 57 | u64 dccpav_buf_ackno; |
| 60 | u64 dccpav_ack_seqno; | 58 | u64 dccpav_ack_seqno; |
| 61 | u64 dccpav_ack_ackno; | 59 | u64 dccpav_ack_ackno; |
| 62 | unsigned int dccpav_ack_ptr; | ||
| 63 | unsigned int dccpav_sent_len; | ||
| 64 | unsigned int dccpav_vec_len; | ||
| 65 | unsigned int dccpav_buf_len; | ||
| 66 | struct timeval dccpav_time; | 60 | struct timeval dccpav_time; |
| 61 | u8 dccpav_buf_head; | ||
| 62 | u8 dccpav_buf_tail; | ||
| 63 | u8 dccpav_ack_ptr; | ||
| 64 | u8 dccpav_sent_len; | ||
| 65 | u8 dccpav_vec_len; | ||
| 66 | u8 dccpav_buf_len; | ||
| 67 | u8 dccpav_buf_nonce; | 67 | u8 dccpav_buf_nonce; |
| 68 | u8 dccpav_ack_nonce; | 68 | u8 dccpav_ack_nonce; |
| 69 | u8 dccpav_buf[0]; | 69 | u8 dccpav_buf[0]; |
