sctp: retran_path update bug fix
If the current retran_path is the only active one, it should update it to the the next inactive one. Signed-off-by: Gui Jianfeng <guijianfeng@cn.fujitsu.com> Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
					parent
					
						
							
								aed5a833fb
							
						
					
				
			
			
				commit
				
					
						4141ddc02a
					
				
			
		
					 1 changed files with 12 additions and 9 deletions
				
			
		|  | @ -1203,6 +1203,9 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc) | |||
| 	struct list_head *head = &asoc->peer.transport_addr_list; | ||||
| 	struct list_head *pos; | ||||
| 
 | ||||
| 	if (asoc->peer.transport_count == 1) | ||||
| 		return; | ||||
| 
 | ||||
| 	/* Find the next transport in a round-robin fashion. */ | ||||
| 	t = asoc->peer.retran_path; | ||||
| 	pos = &t->transports; | ||||
|  | @ -1217,6 +1220,15 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc) | |||
| 
 | ||||
| 		t = list_entry(pos, struct sctp_transport, transports); | ||||
| 
 | ||||
| 		/* We have exhausted the list, but didn't find any
 | ||||
| 		 * other active transports.  If so, use the next | ||||
| 		 * transport. | ||||
| 		 */ | ||||
| 		if (t == asoc->peer.retran_path) { | ||||
| 			t = next; | ||||
| 			break; | ||||
| 		} | ||||
| 
 | ||||
| 		/* Try to find an active transport. */ | ||||
| 
 | ||||
| 		if ((t->state == SCTP_ACTIVE) || | ||||
|  | @ -1229,15 +1241,6 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc) | |||
| 			if (!next) | ||||
| 				next = t; | ||||
| 		} | ||||
| 
 | ||||
| 		/* We have exhausted the list, but didn't find any
 | ||||
| 		 * other active transports.  If so, use the next | ||||
| 		 * transport. | ||||
| 		 */ | ||||
| 		if (t == asoc->peer.retran_path) { | ||||
| 			t = next; | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	asoc->peer.retran_path = t; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Gui Jianfeng
				Gui Jianfeng