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

Commit d23c7107 authored by Gerrit Renker's avatar Gerrit Renker Committed by David S. Miller
Browse files

[DCCP]: Simplify jump labels in dccp_v{4,6}_rcv

This is a code simplification and was singled out from the
DCCPv6 Oops patch on
http://www.mail-archive.com/dccp@vger.kernel.org/msg00600.html



It mainly makes the code consistent between ipv{4,6}.c for the functions
        dccp_v4_rcv
        dccp_v6_rcv
and removes the do_time_wait label to simplify code somewhat.

Commiter note: fixed up a compile problem, trivial.

Signed-off-by: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@mandriva.com>
parent 9b42078e
Loading
Loading
Loading
Loading
+4 −11
Original line number Original line Diff line number Diff line
@@ -910,8 +910,7 @@ static int dccp_v4_rcv(struct sk_buff *skb)
		dccp_pr_debug_cat("\n");
		dccp_pr_debug_cat("\n");
	} else {
	} else {
		DCCP_SKB_CB(skb)->dccpd_ack_seq = dccp_hdr_ack_seq(skb);
		DCCP_SKB_CB(skb)->dccpd_ack_seq = dccp_hdr_ack_seq(skb);
		dccp_pr_debug_cat(", ack=%llu\n",
		dccp_pr_debug_cat(", ack=%llu\n", (unsigned long long)
				  (unsigned long long)
				  DCCP_SKB_CB(skb)->dccpd_ack_seq);
				  DCCP_SKB_CB(skb)->dccpd_ack_seq);
	}
	}


@@ -940,11 +939,10 @@ static int dccp_v4_rcv(struct sk_buff *skb)
	 *		Generate Reset(No Connection) unless P.type == Reset
	 *		Generate Reset(No Connection) unless P.type == Reset
	 *		Drop packet and return
	 *		Drop packet and return
	 */
	 */
	       
	if (sk->sk_state == DCCP_TIME_WAIT) {
	if (sk->sk_state == DCCP_TIME_WAIT) {
		dccp_pr_debug("sk->sk_state == DCCP_TIME_WAIT: "
		dccp_pr_debug("sk->sk_state == DCCP_TIME_WAIT: do_time_wait\n");
			      "do_time_wait\n");
		inet_twsk_put(inet_twsk(sk));
                goto do_time_wait;
		goto no_dccp_socket;
	}
	}


	if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb))
	if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb))
@@ -968,17 +966,12 @@ static int dccp_v4_rcv(struct sk_buff *skb)
	}
	}


discard_it:
discard_it:
	/* Discard frame. */
	kfree_skb(skb);
	kfree_skb(skb);
	return 0;
	return 0;


discard_and_relse:
discard_and_relse:
	sock_put(sk);
	sock_put(sk);
	goto discard_it;
	goto discard_it;

do_time_wait:
	inet_twsk_put(inet_twsk(sk));
	goto no_dccp_socket;
}
}


static struct inet_connection_sock_af_ops dccp_ipv4_af_ops = {
static struct inet_connection_sock_af_ops dccp_ipv4_af_ops = {
+10 −12
Original line number Original line Diff line number Diff line
@@ -1071,8 +1071,11 @@ static int dccp_v6_rcv(struct sk_buff **pskb)
	 *		Generate Reset(No Connection) unless P.type == Reset
	 *		Generate Reset(No Connection) unless P.type == Reset
	 *		Drop packet and return
	 *		Drop packet and return
	 */
	 */
	if (sk == NULL)
	if (sk == NULL) {
		dccp_pr_debug("failed to look up flow ID in table and "
			      "get corresponding socket\n");
		goto no_dccp_socket;
		goto no_dccp_socket;
	}


	/*
	/*
	 * Step 2:
	 * Step 2:
@@ -1080,8 +1083,11 @@ static int dccp_v6_rcv(struct sk_buff **pskb)
	 *		Generate Reset(No Connection) unless P.type == Reset
	 *		Generate Reset(No Connection) unless P.type == Reset
	 *		Drop packet and return
	 *		Drop packet and return
	 */
	 */
	if (sk->sk_state == DCCP_TIME_WAIT)
	if (sk->sk_state == DCCP_TIME_WAIT) {
		goto do_time_wait;
		dccp_pr_debug("sk->sk_state == DCCP_TIME_WAIT: do_time_wait\n");
		inet_twsk_put(inet_twsk(sk));
		goto no_dccp_socket;
	}


	if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
	if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
		goto discard_and_relse;
		goto discard_and_relse;
@@ -1101,22 +1107,14 @@ static int dccp_v6_rcv(struct sk_buff **pskb)
					DCCP_RESET_CODE_NO_CONNECTION;
					DCCP_RESET_CODE_NO_CONNECTION;
		dccp_v6_ctl_send_reset(skb);
		dccp_v6_ctl_send_reset(skb);
	}
	}
discard_it:

	/*
	 *	Discard frame
	 */


discard_it:
	kfree_skb(skb);
	kfree_skb(skb);
	return 0;
	return 0;


discard_and_relse:
discard_and_relse:
	sock_put(sk);
	sock_put(sk);
	goto discard_it;
	goto discard_it;

do_time_wait:
	inet_twsk_put(inet_twsk(sk));
	goto no_dccp_socket;
}
}


static struct inet_connection_sock_af_ops dccp_ipv6_af_ops = {
static struct inet_connection_sock_af_ops dccp_ipv6_af_ops = {