Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e4dfd449 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

[DCCP] ackvec: use u8 for the buf offsets

parent 6742bbcb
Loading
Loading
Loading
Loading
+17 −10
Original line number Diff line number Diff line
@@ -55,8 +55,8 @@ int dccp_insert_option_ackvec(struct sock *sk, struct sk_buff *skb)
	from = av->dccpav_buf + av->dccpav_buf_head;

	/* Check if buf_head wraps */
	if (av->dccpav_buf_head + len > av->dccpav_vec_len) {
		const u32 tailsize = (av->dccpav_vec_len - av->dccpav_buf_head);
	if ((int)av->dccpav_buf_head + len > av->dccpav_vec_len) {
		const u32 tailsize = av->dccpav_vec_len - av->dccpav_buf_head;

		memcpy(to, from, tailsize);
		to   += tailsize;
@@ -93,8 +93,14 @@ int dccp_insert_option_ackvec(struct sock *sk, struct sk_buff *skb)
struct dccp_ackvec *dccp_ackvec_alloc(const unsigned int len,
				      const gfp_t priority)
{
	struct dccp_ackvec *av = kmalloc(sizeof(*av) + len, priority);
	struct dccp_ackvec *av;

	BUG_ON(len == 0);

	if (len > DCCP_MAX_ACKVEC_LEN)
		return NULL;

	av = kmalloc(sizeof(*av) + len, priority);
	if (av != NULL) {
		av->dccpav_buf_len	= len;
		av->dccpav_buf_head	=
@@ -117,13 +123,13 @@ void dccp_ackvec_free(struct dccp_ackvec *av)
}

static inline u8 dccp_ackvec_state(const struct dccp_ackvec *av,
				   const unsigned int index)
				   const u8 index)
{
	return av->dccpav_buf[index] & DCCP_ACKVEC_STATE_MASK;
}

static inline u8 dccp_ackvec_len(const struct dccp_ackvec *av,
				 const unsigned int index)
				 const u8 index)
{
	return av->dccpav_buf[index] & DCCP_ACKVEC_LEN_MASK;
}
@@ -223,7 +229,7 @@ int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk,
		 *	could reduce the complexity of this scan.)
		 */
		u64 delta = dccp_delta_seqno(ackno, av->dccpav_buf_ackno);
		unsigned int index = av->dccpav_buf_head;
		u8 index = av->dccpav_buf_head;

		while (1) {
			const u8 len = dccp_ackvec_len(av, index);
@@ -301,9 +307,10 @@ static void dccp_ackvec_throw_away_ack_record(struct dccp_ackvec *av)
	 * draft-ietf-dccp-spec-11.txt Appendix A. -acme
	 */
#if 0
	av->dccpav_buf_tail = av->dccpav_ack_ptr + 1;
	if (av->dccpav_buf_tail >= av->dccpav_vec_len)
		av->dccpav_buf_tail -= av->dccpav_vec_len;
	u32 new_buf_tail = av->dccpav_ack_ptr + 1;
	if (new_buf_tail >= av->dccpav_vec_len)
		new_buf_tail -= av->dccpav_vec_len;
	av->dccpav_buf_tail = new_buf_tail;
#endif
	av->dccpav_vec_len -= av->dccpav_sent_len;
}
+6 −6
Original line number Diff line number Diff line
@@ -54,16 +54,16 @@
 * @dccpav_buf - circular buffer of acknowledgeable packets
 */
struct dccp_ackvec {
	unsigned int	dccpav_buf_head;
	unsigned int	dccpav_buf_tail;
	u64		dccpav_buf_ackno;
	u64		dccpav_ack_seqno;
	u64		dccpav_ack_ackno;
	unsigned int	dccpav_ack_ptr;
	unsigned int	dccpav_sent_len;
	unsigned int	dccpav_vec_len;
	unsigned int	dccpav_buf_len;
	struct timeval	dccpav_time;
	u8		dccpav_buf_head;
	u8		dccpav_buf_tail;
	u8		dccpav_ack_ptr;
	u8		dccpav_sent_len;
	u8		dccpav_vec_len;
	u8		dccpav_buf_len;
	u8		dccpav_buf_nonce;
	u8		dccpav_ack_nonce;
	u8		dccpav_buf[0];