forked from mirrors/linux
		
	mptcp: introduce MAPPING_BAD_CSUM
This allow moving a couple of conditional out of the fast path,
making the code more easy to follow and will simplify the next
patch.
Fixes: ae66fb2ba6 ("mptcp: Do TCP fallback on early DSS checksum failure")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
			
			
This commit is contained in:
		
							parent
							
								
									0c1f78a49a
								
							
						
					
					
						commit
						31bf11de14
					
				
					 1 changed files with 9 additions and 9 deletions
				
			
		|  | @ -843,7 +843,8 @@ enum mapping_status { | |||
| 	MAPPING_INVALID, | ||||
| 	MAPPING_EMPTY, | ||||
| 	MAPPING_DATA_FIN, | ||||
| 	MAPPING_DUMMY | ||||
| 	MAPPING_DUMMY, | ||||
| 	MAPPING_BAD_CSUM | ||||
| }; | ||||
| 
 | ||||
| static void dbg_bad_map(struct mptcp_subflow_context *subflow, u32 ssn) | ||||
|  | @ -958,9 +959,7 @@ static enum mapping_status validate_data_csum(struct sock *ssk, struct sk_buff * | |||
| 				 subflow->map_data_csum); | ||||
| 	if (unlikely(csum)) { | ||||
| 		MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_DATACSUMERR); | ||||
| 		if (subflow->mp_join || subflow->valid_csum_seen) | ||||
| 			subflow->send_mp_fail = 1; | ||||
| 		return subflow->mp_join ? MAPPING_INVALID : MAPPING_DUMMY; | ||||
| 		return MAPPING_BAD_CSUM; | ||||
| 	} | ||||
| 
 | ||||
| 	subflow->valid_csum_seen = 1; | ||||
|  | @ -1182,10 +1181,8 @@ static bool subflow_check_data_avail(struct sock *ssk) | |||
| 
 | ||||
| 		status = get_mapping_status(ssk, msk); | ||||
| 		trace_subflow_check_data_avail(status, skb_peek(&ssk->sk_receive_queue)); | ||||
| 		if (unlikely(status == MAPPING_INVALID)) | ||||
| 			goto fallback; | ||||
| 
 | ||||
| 		if (unlikely(status == MAPPING_DUMMY)) | ||||
| 		if (unlikely(status == MAPPING_INVALID || status == MAPPING_DUMMY || | ||||
| 			     status == MAPPING_BAD_CSUM)) | ||||
| 			goto fallback; | ||||
| 
 | ||||
| 		if (status != MAPPING_OK) | ||||
|  | @ -1227,7 +1224,10 @@ static bool subflow_check_data_avail(struct sock *ssk) | |||
| fallback: | ||||
| 	if (!__mptcp_check_fallback(msk)) { | ||||
| 		/* RFC 8684 section 3.7. */ | ||||
| 		if (subflow->send_mp_fail) { | ||||
| 		if (status == MAPPING_BAD_CSUM && | ||||
| 		    (subflow->mp_join || subflow->valid_csum_seen)) { | ||||
| 			subflow->send_mp_fail = 1; | ||||
| 
 | ||||
| 			if (!READ_ONCE(msk->allow_infinite_fallback)) { | ||||
| 				ssk->sk_err = EBADMSG; | ||||
| 				tcp_set_state(ssk, TCP_CLOSE); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Paolo Abeni
						Paolo Abeni