mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 21:53:44 +00:00
[DCCP] ackvec: Ditch dccpav_buf_len
Simplifying the code a bit as we're always using DCCP_MAX_ACKVEC_LEN. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0af5f6c1eb
commit
7400d78110
@ -20,6 +20,10 @@
|
|||||||
int dccp_insert_option_ackvec(struct sock *sk, struct sk_buff *skb)
|
int dccp_insert_option_ackvec(struct sock *sk, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct dccp_sock *dp = dccp_sk(sk);
|
struct dccp_sock *dp = dccp_sk(sk);
|
||||||
|
#ifdef CONFIG_IP_DCCP_DEBUG
|
||||||
|
const char *debug_prefix = dp->dccps_role == DCCP_ROLE_CLIENT ?
|
||||||
|
"CLIENT tx: " : "server tx: ";
|
||||||
|
#endif
|
||||||
struct dccp_ackvec *av = dp->dccps_hc_rx_ackvec;
|
struct dccp_ackvec *av = dp->dccps_hc_rx_ackvec;
|
||||||
int len = av->dccpav_vec_len + 2;
|
int len = av->dccpav_vec_len + 2;
|
||||||
struct timeval now;
|
struct timeval now;
|
||||||
@ -90,21 +94,13 @@ int dccp_insert_option_ackvec(struct sock *sk, struct sk_buff *skb)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct dccp_ackvec *dccp_ackvec_alloc(const unsigned int len,
|
struct dccp_ackvec *dccp_ackvec_alloc(const gfp_t priority)
|
||||||
const gfp_t priority)
|
|
||||||
{
|
{
|
||||||
struct dccp_ackvec *av;
|
struct dccp_ackvec *av = kmalloc(sizeof(*av), priority);
|
||||||
|
|
||||||
BUG_ON(len == 0);
|
|
||||||
|
|
||||||
if (len > DCCP_MAX_ACKVEC_LEN)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
av = kmalloc(sizeof(*av) + len, priority);
|
|
||||||
if (av != NULL) {
|
if (av != NULL) {
|
||||||
av->dccpav_buf_len = len;
|
|
||||||
av->dccpav_buf_head =
|
av->dccpav_buf_head =
|
||||||
av->dccpav_buf_tail = av->dccpav_buf_len - 1;
|
av->dccpav_buf_tail = DCCP_MAX_ACKVEC_LEN - 1;
|
||||||
av->dccpav_buf_ackno =
|
av->dccpav_buf_ackno =
|
||||||
av->dccpav_ack_ackno = av->dccpav_ack_seqno = ~0LLU;
|
av->dccpav_ack_ackno = av->dccpav_ack_seqno = ~0LLU;
|
||||||
av->dccpav_buf_nonce = av->dccpav_buf_nonce = 0;
|
av->dccpav_buf_nonce = av->dccpav_buf_nonce = 0;
|
||||||
@ -146,7 +142,7 @@ static inline int dccp_ackvec_set_buf_head_state(struct dccp_ackvec *av,
|
|||||||
unsigned int gap;
|
unsigned int gap;
|
||||||
long new_head;
|
long new_head;
|
||||||
|
|
||||||
if (av->dccpav_vec_len + packets > av->dccpav_buf_len)
|
if (av->dccpav_vec_len + packets > DCCP_MAX_ACKVEC_LEN)
|
||||||
return -ENOBUFS;
|
return -ENOBUFS;
|
||||||
|
|
||||||
gap = packets - 1;
|
gap = packets - 1;
|
||||||
@ -158,7 +154,7 @@ static inline int dccp_ackvec_set_buf_head_state(struct dccp_ackvec *av,
|
|||||||
gap + new_head + 1);
|
gap + new_head + 1);
|
||||||
gap = -new_head;
|
gap = -new_head;
|
||||||
}
|
}
|
||||||
new_head += av->dccpav_buf_len;
|
new_head += DCCP_MAX_ACKVEC_LEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
av->dccpav_buf_head = new_head;
|
av->dccpav_buf_head = new_head;
|
||||||
@ -251,7 +247,7 @@ int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk,
|
|||||||
goto out_duplicate;
|
goto out_duplicate;
|
||||||
|
|
||||||
delta -= len + 1;
|
delta -= len + 1;
|
||||||
if (++index == av->dccpav_buf_len)
|
if (++index == DCCP_MAX_ACKVEC_LEN)
|
||||||
index = 0;
|
index = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,6 @@
|
|||||||
* (HC-Sender seqno)
|
* (HC-Sender seqno)
|
||||||
* @dccpav_ack_nonce - the one-bit sum of the ECN Nonces for all State 0.
|
* @dccpav_ack_nonce - the one-bit sum of the ECN Nonces for all State 0.
|
||||||
*
|
*
|
||||||
* @dccpav_buf_len - circular buffer length
|
|
||||||
* @dccpav_time - the time in usecs
|
* @dccpav_time - the time in usecs
|
||||||
* @dccpav_buf - circular buffer of acknowledgeable packets
|
* @dccpav_buf - circular buffer of acknowledgeable packets
|
||||||
*/
|
*/
|
||||||
@ -63,18 +62,16 @@ struct dccp_ackvec {
|
|||||||
u8 dccpav_ack_ptr;
|
u8 dccpav_ack_ptr;
|
||||||
u8 dccpav_sent_len;
|
u8 dccpav_sent_len;
|
||||||
u8 dccpav_vec_len;
|
u8 dccpav_vec_len;
|
||||||
u8 dccpav_buf_len;
|
|
||||||
u8 dccpav_buf_nonce;
|
u8 dccpav_buf_nonce;
|
||||||
u8 dccpav_ack_nonce;
|
u8 dccpav_ack_nonce;
|
||||||
u8 dccpav_buf[0];
|
u8 dccpav_buf[DCCP_MAX_ACKVEC_LEN];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sock;
|
struct sock;
|
||||||
struct sk_buff;
|
struct sk_buff;
|
||||||
|
|
||||||
#ifdef CONFIG_IP_DCCP_ACKVEC
|
#ifdef CONFIG_IP_DCCP_ACKVEC
|
||||||
extern struct dccp_ackvec *dccp_ackvec_alloc(unsigned int len,
|
extern struct dccp_ackvec *dccp_ackvec_alloc(const gfp_t priority);
|
||||||
const gfp_t priority);
|
|
||||||
extern void dccp_ackvec_free(struct dccp_ackvec *av);
|
extern void dccp_ackvec_free(struct dccp_ackvec *av);
|
||||||
|
|
||||||
extern int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk,
|
extern int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk,
|
||||||
@ -92,8 +89,7 @@ static inline int dccp_ackvec_pending(const struct dccp_ackvec *av)
|
|||||||
return av->dccpav_sent_len != av->dccpav_vec_len;
|
return av->dccpav_sent_len != av->dccpav_vec_len;
|
||||||
}
|
}
|
||||||
#else /* CONFIG_IP_DCCP_ACKVEC */
|
#else /* CONFIG_IP_DCCP_ACKVEC */
|
||||||
static inline struct dccp_ackvec *dccp_ackvec_alloc(unsigned int len,
|
static inline struct dccp_ackvec *dccp_ackvec_alloc(const gfp_t priority)
|
||||||
const gfp_t priority)
|
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1042,8 +1042,7 @@ int dccp_v4_init_sock(struct sock *sk)
|
|||||||
do_gettimeofday(&dp->dccps_epoch);
|
do_gettimeofday(&dp->dccps_epoch);
|
||||||
|
|
||||||
if (dp->dccps_options.dccpo_send_ack_vector) {
|
if (dp->dccps_options.dccpo_send_ack_vector) {
|
||||||
dp->dccps_hc_rx_ackvec = dccp_ackvec_alloc(DCCP_MAX_ACKVEC_LEN,
|
dp->dccps_hc_rx_ackvec = dccp_ackvec_alloc(GFP_KERNEL);
|
||||||
GFP_KERNEL);
|
|
||||||
if (dp->dccps_hc_rx_ackvec == NULL)
|
if (dp->dccps_hc_rx_ackvec == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
@ -116,8 +116,7 @@ struct sock *dccp_create_openreq_child(struct sock *sk,
|
|||||||
|
|
||||||
if (newdp->dccps_options.dccpo_send_ack_vector) {
|
if (newdp->dccps_options.dccpo_send_ack_vector) {
|
||||||
newdp->dccps_hc_rx_ackvec =
|
newdp->dccps_hc_rx_ackvec =
|
||||||
dccp_ackvec_alloc(DCCP_MAX_ACKVEC_LEN,
|
dccp_ackvec_alloc(GFP_ATOMIC);
|
||||||
GFP_ATOMIC);
|
|
||||||
/*
|
/*
|
||||||
* XXX: We're using the same CCIDs set on the parent,
|
* XXX: We're using the same CCIDs set on the parent,
|
||||||
* i.e. sk_clone copied the master sock and left the
|
* i.e. sk_clone copied the master sock and left the
|
||||||
|
Loading…
Reference in New Issue
Block a user