forked from mirrors/linux
		
	sctp: get netns from asoc and ep base
Commit 312434617c ("sctp: cache netns in sctp_ep_common") set netns
in asoc and ep base since they're created, and it will never change.
It's a better way to get netns from asoc and ep base, comparing to
calling sock_net().
This patch is to replace them.
v1->v2:
  - no change.
Suggested-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
			
			
This commit is contained in:
		
							parent
							
								
									26c97a2d82
								
							
						
					
					
						commit
						4e7696d90b
					
				
					 14 changed files with 49 additions and 62 deletions
				
			
		|  | @ -584,7 +584,6 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc, | ||||||
| 					   const gfp_t gfp, | 					   const gfp_t gfp, | ||||||
| 					   const int peer_state) | 					   const int peer_state) | ||||||
| { | { | ||||||
| 	struct net *net = sock_net(asoc->base.sk); |  | ||||||
| 	struct sctp_transport *peer; | 	struct sctp_transport *peer; | ||||||
| 	struct sctp_sock *sp; | 	struct sctp_sock *sp; | ||||||
| 	unsigned short port; | 	unsigned short port; | ||||||
|  | @ -614,7 +613,7 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc, | ||||||
| 		return peer; | 		return peer; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	peer = sctp_transport_new(net, addr, gfp); | 	peer = sctp_transport_new(asoc->base.net, addr, gfp); | ||||||
| 	if (!peer) | 	if (!peer) | ||||||
| 		return NULL; | 		return NULL; | ||||||
| 
 | 
 | ||||||
|  | @ -974,7 +973,7 @@ static void sctp_assoc_bh_rcv(struct work_struct *work) | ||||||
| 	struct sctp_association *asoc = | 	struct sctp_association *asoc = | ||||||
| 		container_of(work, struct sctp_association, | 		container_of(work, struct sctp_association, | ||||||
| 			     base.inqueue.immediate); | 			     base.inqueue.immediate); | ||||||
| 	struct net *net = sock_net(asoc->base.sk); | 	struct net *net = asoc->base.net; | ||||||
| 	union sctp_subtype subtype; | 	union sctp_subtype subtype; | ||||||
| 	struct sctp_endpoint *ep; | 	struct sctp_endpoint *ep; | ||||||
| 	struct sctp_chunk *chunk; | 	struct sctp_chunk *chunk; | ||||||
|  | @ -1442,7 +1441,8 @@ void sctp_assoc_sync_pmtu(struct sctp_association *asoc) | ||||||
| /* Should we send a SACK to update our peer? */ | /* Should we send a SACK to update our peer? */ | ||||||
| static inline bool sctp_peer_needs_update(struct sctp_association *asoc) | static inline bool sctp_peer_needs_update(struct sctp_association *asoc) | ||||||
| { | { | ||||||
| 	struct net *net = sock_net(asoc->base.sk); | 	struct net *net = asoc->base.net; | ||||||
|  | 
 | ||||||
| 	switch (asoc->state) { | 	switch (asoc->state) { | ||||||
| 	case SCTP_STATE_ESTABLISHED: | 	case SCTP_STATE_ESTABLISHED: | ||||||
| 	case SCTP_STATE_SHUTDOWN_PENDING: | 	case SCTP_STATE_SHUTDOWN_PENDING: | ||||||
|  | @ -1576,7 +1576,7 @@ int sctp_assoc_set_bind_addr_from_ep(struct sctp_association *asoc, | ||||||
| 	if (asoc->peer.ipv6_address) | 	if (asoc->peer.ipv6_address) | ||||||
| 		flags |= SCTP_ADDR6_PEERSUPP; | 		flags |= SCTP_ADDR6_PEERSUPP; | ||||||
| 
 | 
 | ||||||
| 	return sctp_bind_addr_copy(sock_net(asoc->base.sk), | 	return sctp_bind_addr_copy(asoc->base.net, | ||||||
| 				   &asoc->base.bind_addr, | 				   &asoc->base.bind_addr, | ||||||
| 				   &asoc->ep->base.bind_addr, | 				   &asoc->ep->base.bind_addr, | ||||||
| 				   scope, gfp, flags); | 				   scope, gfp, flags); | ||||||
|  |  | ||||||
|  | @ -225,7 +225,7 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc, | ||||||
| 	if (msg_len >= first_len) { | 	if (msg_len >= first_len) { | ||||||
| 		msg->can_delay = 0; | 		msg->can_delay = 0; | ||||||
| 		if (msg_len > first_len) | 		if (msg_len > first_len) | ||||||
| 			SCTP_INC_STATS(sock_net(asoc->base.sk), | 			SCTP_INC_STATS(asoc->base.net, | ||||||
| 				       SCTP_MIB_FRAGUSRMSGS); | 				       SCTP_MIB_FRAGUSRMSGS); | ||||||
| 	} else { | 	} else { | ||||||
| 		/* Which may be the only one... */ | 		/* Which may be the only one... */ | ||||||
|  |  | ||||||
|  | @ -244,7 +244,7 @@ struct sctp_endpoint *sctp_endpoint_is_match(struct sctp_endpoint *ep, | ||||||
| 	struct sctp_endpoint *retval = NULL; | 	struct sctp_endpoint *retval = NULL; | ||||||
| 
 | 
 | ||||||
| 	if ((htons(ep->base.bind_addr.port) == laddr->v4.sin_port) && | 	if ((htons(ep->base.bind_addr.port) == laddr->v4.sin_port) && | ||||||
| 	    net_eq(sock_net(ep->base.sk), net)) { | 	    net_eq(ep->base.net, net)) { | ||||||
| 		if (sctp_bind_addr_match(&ep->base.bind_addr, laddr, | 		if (sctp_bind_addr_match(&ep->base.bind_addr, laddr, | ||||||
| 					 sctp_sk(ep->base.sk))) | 					 sctp_sk(ep->base.sk))) | ||||||
| 			retval = ep; | 			retval = ep; | ||||||
|  | @ -292,8 +292,8 @@ bool sctp_endpoint_is_peeled_off(struct sctp_endpoint *ep, | ||||||
| 				 const union sctp_addr *paddr) | 				 const union sctp_addr *paddr) | ||||||
| { | { | ||||||
| 	struct sctp_sockaddr_entry *addr; | 	struct sctp_sockaddr_entry *addr; | ||||||
|  | 	struct net *net = ep->base.net; | ||||||
| 	struct sctp_bind_addr *bp; | 	struct sctp_bind_addr *bp; | ||||||
| 	struct net *net = sock_net(ep->base.sk); |  | ||||||
| 
 | 
 | ||||||
| 	bp = &ep->base.bind_addr; | 	bp = &ep->base.bind_addr; | ||||||
| 	/* This function is called with the socket lock held,
 | 	/* This function is called with the socket lock held,
 | ||||||
|  | @ -384,7 +384,7 @@ static void sctp_endpoint_bh_rcv(struct work_struct *work) | ||||||
| 		if (asoc && sctp_chunk_is_data(chunk)) | 		if (asoc && sctp_chunk_is_data(chunk)) | ||||||
| 			asoc->peer.last_data_from = chunk->transport; | 			asoc->peer.last_data_from = chunk->transport; | ||||||
| 		else { | 		else { | ||||||
| 			SCTP_INC_STATS(sock_net(ep->base.sk), SCTP_MIB_INCTRLCHUNKS); | 			SCTP_INC_STATS(ep->base.net, SCTP_MIB_INCTRLCHUNKS); | ||||||
| 			if (asoc) | 			if (asoc) | ||||||
| 				asoc->stats.ictrlchunks++; | 				asoc->stats.ictrlchunks++; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -937,7 +937,7 @@ int sctp_hash_transport(struct sctp_transport *t) | ||||||
| 	if (t->asoc->temp) | 	if (t->asoc->temp) | ||||||
| 		return 0; | 		return 0; | ||||||
| 
 | 
 | ||||||
| 	arg.net   = sock_net(t->asoc->base.sk); | 	arg.net   = t->asoc->base.net; | ||||||
| 	arg.paddr = &t->ipaddr; | 	arg.paddr = &t->ipaddr; | ||||||
| 	arg.lport = htons(t->asoc->base.bind_addr.port); | 	arg.lport = htons(t->asoc->base.bind_addr.port); | ||||||
| 
 | 
 | ||||||
|  | @ -1004,12 +1004,11 @@ struct sctp_transport *sctp_epaddr_lookup_transport( | ||||||
| 				const struct sctp_endpoint *ep, | 				const struct sctp_endpoint *ep, | ||||||
| 				const union sctp_addr *paddr) | 				const union sctp_addr *paddr) | ||||||
| { | { | ||||||
| 	struct net *net = sock_net(ep->base.sk); |  | ||||||
| 	struct rhlist_head *tmp, *list; | 	struct rhlist_head *tmp, *list; | ||||||
| 	struct sctp_transport *t; | 	struct sctp_transport *t; | ||||||
| 	struct sctp_hash_cmp_arg arg = { | 	struct sctp_hash_cmp_arg arg = { | ||||||
| 		.paddr = paddr, | 		.paddr = paddr, | ||||||
| 		.net   = net, | 		.net   = ep->base.net, | ||||||
| 		.lport = htons(ep->base.bind_addr.port), | 		.lport = htons(ep->base.bind_addr.port), | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -282,7 +282,7 @@ static enum sctp_xmit sctp_packet_bundle_sack(struct sctp_packet *pkt, | ||||||
| 					sctp_chunk_free(sack); | 					sctp_chunk_free(sack); | ||||||
| 					goto out; | 					goto out; | ||||||
| 				} | 				} | ||||||
| 				SCTP_INC_STATS(sock_net(asoc->base.sk), | 				SCTP_INC_STATS(asoc->base.net, | ||||||
| 					       SCTP_MIB_OUTCTRLCHUNKS); | 					       SCTP_MIB_OUTCTRLCHUNKS); | ||||||
| 				asoc->stats.octrlchunks++; | 				asoc->stats.octrlchunks++; | ||||||
| 				asoc->peer.sack_needed = 0; | 				asoc->peer.sack_needed = 0; | ||||||
|  |  | ||||||
|  | @ -279,7 +279,7 @@ void sctp_outq_free(struct sctp_outq *q) | ||||||
| /* Put a new chunk in an sctp_outq.  */ | /* Put a new chunk in an sctp_outq.  */ | ||||||
| void sctp_outq_tail(struct sctp_outq *q, struct sctp_chunk *chunk, gfp_t gfp) | void sctp_outq_tail(struct sctp_outq *q, struct sctp_chunk *chunk, gfp_t gfp) | ||||||
| { | { | ||||||
| 	struct net *net = sock_net(q->asoc->base.sk); | 	struct net *net = q->asoc->base.net; | ||||||
| 
 | 
 | ||||||
| 	pr_debug("%s: outq:%p, chunk:%p[%s]\n", __func__, q, chunk, | 	pr_debug("%s: outq:%p, chunk:%p[%s]\n", __func__, q, chunk, | ||||||
| 		 chunk && chunk->chunk_hdr ? | 		 chunk && chunk->chunk_hdr ? | ||||||
|  | @ -533,7 +533,7 @@ void sctp_retransmit_mark(struct sctp_outq *q, | ||||||
| void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport, | void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport, | ||||||
| 		     enum sctp_retransmit_reason reason) | 		     enum sctp_retransmit_reason reason) | ||||||
| { | { | ||||||
| 	struct net *net = sock_net(q->asoc->base.sk); | 	struct net *net = q->asoc->base.net; | ||||||
| 
 | 
 | ||||||
| 	switch (reason) { | 	switch (reason) { | ||||||
| 	case SCTP_RTXR_T3_RTX: | 	case SCTP_RTXR_T3_RTX: | ||||||
|  | @ -1884,6 +1884,6 @@ void sctp_generate_fwdtsn(struct sctp_outq *q, __u32 ctsn) | ||||||
| 
 | 
 | ||||||
| 	if (ftsn_chunk) { | 	if (ftsn_chunk) { | ||||||
| 		list_add_tail(&ftsn_chunk->list, &q->control_chunk_list); | 		list_add_tail(&ftsn_chunk->list, &q->control_chunk_list); | ||||||
| 		SCTP_INC_STATS(sock_net(asoc->base.sk), SCTP_MIB_OUTCTRLCHUNKS); | 		SCTP_INC_STATS(asoc->base.net, SCTP_MIB_OUTCTRLCHUNKS); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -2307,7 +2307,6 @@ int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk, | ||||||
| 		      const union sctp_addr *peer_addr, | 		      const union sctp_addr *peer_addr, | ||||||
| 		      struct sctp_init_chunk *peer_init, gfp_t gfp) | 		      struct sctp_init_chunk *peer_init, gfp_t gfp) | ||||||
| { | { | ||||||
| 	struct net *net = sock_net(asoc->base.sk); |  | ||||||
| 	struct sctp_transport *transport; | 	struct sctp_transport *transport; | ||||||
| 	struct list_head *pos, *temp; | 	struct list_head *pos, *temp; | ||||||
| 	union sctp_params param; | 	union sctp_params param; | ||||||
|  | @ -2363,8 +2362,8 @@ int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk, | ||||||
| 	 * also give us an option to silently ignore the packet, which | 	 * also give us an option to silently ignore the packet, which | ||||||
| 	 * is what we'll do here. | 	 * is what we'll do here. | ||||||
| 	 */ | 	 */ | ||||||
| 	if (!net->sctp.addip_noauth && | 	if (!asoc->base.net->sctp.addip_noauth && | ||||||
| 	     (asoc->peer.asconf_capable && !asoc->peer.auth_capable)) { | 	    (asoc->peer.asconf_capable && !asoc->peer.auth_capable)) { | ||||||
| 		asoc->peer.addip_disabled_mask |= (SCTP_PARAM_ADD_IP | | 		asoc->peer.addip_disabled_mask |= (SCTP_PARAM_ADD_IP | | ||||||
| 						  SCTP_PARAM_DEL_IP | | 						  SCTP_PARAM_DEL_IP | | ||||||
| 						  SCTP_PARAM_SET_PRIMARY); | 						  SCTP_PARAM_SET_PRIMARY); | ||||||
|  | @ -2491,9 +2490,9 @@ static int sctp_process_param(struct sctp_association *asoc, | ||||||
| 			      const union sctp_addr *peer_addr, | 			      const union sctp_addr *peer_addr, | ||||||
| 			      gfp_t gfp) | 			      gfp_t gfp) | ||||||
| { | { | ||||||
| 	struct net *net = sock_net(asoc->base.sk); |  | ||||||
| 	struct sctp_endpoint *ep = asoc->ep; | 	struct sctp_endpoint *ep = asoc->ep; | ||||||
| 	union sctp_addr_param *addr_param; | 	union sctp_addr_param *addr_param; | ||||||
|  | 	struct net *net = asoc->base.net; | ||||||
| 	struct sctp_transport *t; | 	struct sctp_transport *t; | ||||||
| 	enum sctp_scope scope; | 	enum sctp_scope scope; | ||||||
| 	union sctp_addr addr; | 	union sctp_addr addr; | ||||||
|  |  | ||||||
|  | @ -516,8 +516,6 @@ static void sctp_do_8_2_transport_strike(struct sctp_cmd_seq *commands, | ||||||
| 					 struct sctp_transport *transport, | 					 struct sctp_transport *transport, | ||||||
| 					 int is_hb) | 					 int is_hb) | ||||||
| { | { | ||||||
| 	struct net *net = sock_net(asoc->base.sk); |  | ||||||
| 
 |  | ||||||
| 	/* The check for association's overall error counter exceeding the
 | 	/* The check for association's overall error counter exceeding the
 | ||||||
| 	 * threshold is done in the state function. | 	 * threshold is done in the state function. | ||||||
| 	 */ | 	 */ | ||||||
|  | @ -544,10 +542,10 @@ static void sctp_do_8_2_transport_strike(struct sctp_cmd_seq *commands, | ||||||
| 	 * is SCTP_ACTIVE, then mark this transport as Partially Failed, | 	 * is SCTP_ACTIVE, then mark this transport as Partially Failed, | ||||||
| 	 * see SCTP Quick Failover Draft, section 5.1 | 	 * see SCTP Quick Failover Draft, section 5.1 | ||||||
| 	 */ | 	 */ | ||||||
| 	if (net->sctp.pf_enable && | 	if (asoc->base.net->sctp.pf_enable && | ||||||
| 	   (transport->state == SCTP_ACTIVE) && | 	    transport->state == SCTP_ACTIVE && | ||||||
| 	   (transport->error_count < transport->pathmaxrxt) && | 	    transport->error_count < transport->pathmaxrxt && | ||||||
| 	   (transport->error_count > transport->pf_retrans)) { | 	    transport->error_count > transport->pf_retrans) { | ||||||
| 
 | 
 | ||||||
| 		sctp_assoc_control_transport(asoc, transport, | 		sctp_assoc_control_transport(asoc, transport, | ||||||
| 					     SCTP_TRANSPORT_PF, | 					     SCTP_TRANSPORT_PF, | ||||||
|  | @ -798,10 +796,8 @@ static int sctp_cmd_process_sack(struct sctp_cmd_seq *cmds, | ||||||
| 	int err = 0; | 	int err = 0; | ||||||
| 
 | 
 | ||||||
| 	if (sctp_outq_sack(&asoc->outqueue, chunk)) { | 	if (sctp_outq_sack(&asoc->outqueue, chunk)) { | ||||||
| 		struct net *net = sock_net(asoc->base.sk); |  | ||||||
| 
 |  | ||||||
| 		/* There are no more TSNs awaiting SACK.  */ | 		/* There are no more TSNs awaiting SACK.  */ | ||||||
| 		err = sctp_do_sm(net, SCTP_EVENT_T_OTHER, | 		err = sctp_do_sm(asoc->base.net, SCTP_EVENT_T_OTHER, | ||||||
| 				 SCTP_ST_OTHER(SCTP_EVENT_NO_PENDING_TSN), | 				 SCTP_ST_OTHER(SCTP_EVENT_NO_PENDING_TSN), | ||||||
| 				 asoc->state, asoc->ep, asoc, NULL, | 				 asoc->state, asoc->ep, asoc, NULL, | ||||||
| 				 GFP_ATOMIC); | 				 GFP_ATOMIC); | ||||||
|  | @ -834,7 +830,7 @@ static void sctp_cmd_assoc_update(struct sctp_cmd_seq *cmds, | ||||||
| 				  struct sctp_association *asoc, | 				  struct sctp_association *asoc, | ||||||
| 				  struct sctp_association *new) | 				  struct sctp_association *new) | ||||||
| { | { | ||||||
| 	struct net *net = sock_net(asoc->base.sk); | 	struct net *net = asoc->base.net; | ||||||
| 	struct sctp_chunk *abort; | 	struct sctp_chunk *abort; | ||||||
| 
 | 
 | ||||||
| 	if (!sctp_assoc_update(asoc, new)) | 	if (!sctp_assoc_update(asoc, new)) | ||||||
|  |  | ||||||
|  | @ -1320,7 +1320,7 @@ static int sctp_sf_check_restart_addrs(const struct sctp_association *new_asoc, | ||||||
| 				       struct sctp_chunk *init, | 				       struct sctp_chunk *init, | ||||||
| 				       struct sctp_cmd_seq *commands) | 				       struct sctp_cmd_seq *commands) | ||||||
| { | { | ||||||
| 	struct net *net = sock_net(new_asoc->base.sk); | 	struct net *net = new_asoc->base.net; | ||||||
| 	struct sctp_transport *new_addr; | 	struct sctp_transport *new_addr; | ||||||
| 	int ret = 1; | 	int ret = 1; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -436,8 +436,7 @@ static int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len) | ||||||
| static int sctp_send_asconf(struct sctp_association *asoc, | static int sctp_send_asconf(struct sctp_association *asoc, | ||||||
| 			    struct sctp_chunk *chunk) | 			    struct sctp_chunk *chunk) | ||||||
| { | { | ||||||
| 	struct net 	*net = sock_net(asoc->base.sk); | 	int retval = 0; | ||||||
| 	int		retval = 0; |  | ||||||
| 
 | 
 | ||||||
| 	/* If there is an outstanding ASCONF chunk, queue it for later
 | 	/* If there is an outstanding ASCONF chunk, queue it for later
 | ||||||
| 	 * transmission. | 	 * transmission. | ||||||
|  | @ -449,7 +448,7 @@ static int sctp_send_asconf(struct sctp_association *asoc, | ||||||
| 
 | 
 | ||||||
| 	/* Hold the chunk until an ASCONF_ACK is received. */ | 	/* Hold the chunk until an ASCONF_ACK is received. */ | ||||||
| 	sctp_chunk_hold(chunk); | 	sctp_chunk_hold(chunk); | ||||||
| 	retval = sctp_primitive_ASCONF(net, asoc, chunk); | 	retval = sctp_primitive_ASCONF(asoc->base.net, asoc, chunk); | ||||||
| 	if (retval) | 	if (retval) | ||||||
| 		sctp_chunk_free(chunk); | 		sctp_chunk_free(chunk); | ||||||
| 	else | 	else | ||||||
|  | @ -2428,9 +2427,8 @@ static int sctp_apply_peer_addr_params(struct sctp_paddrparams *params, | ||||||
| 	int error; | 	int error; | ||||||
| 
 | 
 | ||||||
| 	if (params->spp_flags & SPP_HB_DEMAND && trans) { | 	if (params->spp_flags & SPP_HB_DEMAND && trans) { | ||||||
| 		struct net *net = sock_net(trans->asoc->base.sk); | 		error = sctp_primitive_REQUESTHEARTBEAT(trans->asoc->base.net, | ||||||
| 
 | 							trans->asoc, trans); | ||||||
| 		error = sctp_primitive_REQUESTHEARTBEAT(net, trans->asoc, trans); |  | ||||||
| 		if (error) | 		if (error) | ||||||
| 			return error; | 			return error; | ||||||
| 	} | 	} | ||||||
|  | @ -5364,7 +5362,7 @@ struct sctp_transport *sctp_transport_get_next(struct net *net, | ||||||
| 		if (!sctp_transport_hold(t)) | 		if (!sctp_transport_hold(t)) | ||||||
| 			continue; | 			continue; | ||||||
| 
 | 
 | ||||||
| 		if (net_eq(sock_net(t->asoc->base.sk), net) && | 		if (net_eq(t->asoc->base.net, net) && | ||||||
| 		    t->asoc->peer.primary_path == t) | 		    t->asoc->peer.primary_path == t) | ||||||
| 			break; | 			break; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -218,10 +218,9 @@ void sctp_stream_update(struct sctp_stream *stream, struct sctp_stream *new) | ||||||
| static int sctp_send_reconf(struct sctp_association *asoc, | static int sctp_send_reconf(struct sctp_association *asoc, | ||||||
| 			    struct sctp_chunk *chunk) | 			    struct sctp_chunk *chunk) | ||||||
| { | { | ||||||
| 	struct net *net = sock_net(asoc->base.sk); |  | ||||||
| 	int retval = 0; | 	int retval = 0; | ||||||
| 
 | 
 | ||||||
| 	retval = sctp_primitive_RECONF(net, asoc, chunk); | 	retval = sctp_primitive_RECONF(asoc->base.net, asoc, chunk); | ||||||
| 	if (retval) | 	if (retval) | ||||||
| 		sctp_chunk_free(chunk); | 		sctp_chunk_free(chunk); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -241,9 +241,8 @@ static struct sctp_ulpevent *sctp_intl_retrieve_partial( | ||||||
| 	if (!first_frag) | 	if (!first_frag) | ||||||
| 		return NULL; | 		return NULL; | ||||||
| 
 | 
 | ||||||
| 	retval = sctp_make_reassembled_event(sock_net(ulpq->asoc->base.sk), | 	retval = sctp_make_reassembled_event(ulpq->asoc->base.net, &ulpq->reasm, | ||||||
| 					     &ulpq->reasm, first_frag, | 					     first_frag, last_frag); | ||||||
| 					     last_frag); |  | ||||||
| 	if (retval) { | 	if (retval) { | ||||||
| 		sin->fsn = next_fsn; | 		sin->fsn = next_fsn; | ||||||
| 		if (is_last) { | 		if (is_last) { | ||||||
|  | @ -326,7 +325,7 @@ static struct sctp_ulpevent *sctp_intl_retrieve_reassembled( | ||||||
| 
 | 
 | ||||||
| 	pd_point = sctp_sk(asoc->base.sk)->pd_point; | 	pd_point = sctp_sk(asoc->base.sk)->pd_point; | ||||||
| 	if (pd_point && pd_point <= pd_len) { | 	if (pd_point && pd_point <= pd_len) { | ||||||
| 		retval = sctp_make_reassembled_event(sock_net(asoc->base.sk), | 		retval = sctp_make_reassembled_event(asoc->base.net, | ||||||
| 						     &ulpq->reasm, | 						     &ulpq->reasm, | ||||||
| 						     pd_first, pd_last); | 						     pd_first, pd_last); | ||||||
| 		if (retval) { | 		if (retval) { | ||||||
|  | @ -337,8 +336,7 @@ static struct sctp_ulpevent *sctp_intl_retrieve_reassembled( | ||||||
| 	goto out; | 	goto out; | ||||||
| 
 | 
 | ||||||
| found: | found: | ||||||
| 	retval = sctp_make_reassembled_event(sock_net(asoc->base.sk), | 	retval = sctp_make_reassembled_event(asoc->base.net, &ulpq->reasm, | ||||||
| 					     &ulpq->reasm, |  | ||||||
| 					     first_frag, pos); | 					     first_frag, pos); | ||||||
| 	if (retval) | 	if (retval) | ||||||
| 		retval->msg_flags |= MSG_EOR; | 		retval->msg_flags |= MSG_EOR; | ||||||
|  | @ -630,7 +628,7 @@ static struct sctp_ulpevent *sctp_intl_retrieve_partial_uo( | ||||||
| 	if (!first_frag) | 	if (!first_frag) | ||||||
| 		return NULL; | 		return NULL; | ||||||
| 
 | 
 | ||||||
| 	retval = sctp_make_reassembled_event(sock_net(ulpq->asoc->base.sk), | 	retval = sctp_make_reassembled_event(ulpq->asoc->base.net, | ||||||
| 					     &ulpq->reasm_uo, first_frag, | 					     &ulpq->reasm_uo, first_frag, | ||||||
| 					     last_frag); | 					     last_frag); | ||||||
| 	if (retval) { | 	if (retval) { | ||||||
|  | @ -716,7 +714,7 @@ static struct sctp_ulpevent *sctp_intl_retrieve_reassembled_uo( | ||||||
| 
 | 
 | ||||||
| 	pd_point = sctp_sk(asoc->base.sk)->pd_point; | 	pd_point = sctp_sk(asoc->base.sk)->pd_point; | ||||||
| 	if (pd_point && pd_point <= pd_len) { | 	if (pd_point && pd_point <= pd_len) { | ||||||
| 		retval = sctp_make_reassembled_event(sock_net(asoc->base.sk), | 		retval = sctp_make_reassembled_event(asoc->base.net, | ||||||
| 						     &ulpq->reasm_uo, | 						     &ulpq->reasm_uo, | ||||||
| 						     pd_first, pd_last); | 						     pd_first, pd_last); | ||||||
| 		if (retval) { | 		if (retval) { | ||||||
|  | @ -727,8 +725,7 @@ static struct sctp_ulpevent *sctp_intl_retrieve_reassembled_uo( | ||||||
| 	goto out; | 	goto out; | ||||||
| 
 | 
 | ||||||
| found: | found: | ||||||
| 	retval = sctp_make_reassembled_event(sock_net(asoc->base.sk), | 	retval = sctp_make_reassembled_event(asoc->base.net, &ulpq->reasm_uo, | ||||||
| 					     &ulpq->reasm_uo, |  | ||||||
| 					     first_frag, pos); | 					     first_frag, pos); | ||||||
| 	if (retval) | 	if (retval) | ||||||
| 		retval->msg_flags |= MSG_EOR; | 		retval->msg_flags |= MSG_EOR; | ||||||
|  | @ -814,7 +811,7 @@ static struct sctp_ulpevent *sctp_intl_retrieve_first_uo(struct sctp_ulpq *ulpq) | ||||||
| 		return NULL; | 		return NULL; | ||||||
| 
 | 
 | ||||||
| out: | out: | ||||||
| 	retval = sctp_make_reassembled_event(sock_net(ulpq->asoc->base.sk), | 	retval = sctp_make_reassembled_event(ulpq->asoc->base.net, | ||||||
| 					     &ulpq->reasm_uo, first_frag, | 					     &ulpq->reasm_uo, first_frag, | ||||||
| 					     last_frag); | 					     last_frag); | ||||||
| 	if (retval) { | 	if (retval) { | ||||||
|  | @ -921,7 +918,7 @@ static struct sctp_ulpevent *sctp_intl_retrieve_first(struct sctp_ulpq *ulpq) | ||||||
| 		return NULL; | 		return NULL; | ||||||
| 
 | 
 | ||||||
| out: | out: | ||||||
| 	retval = sctp_make_reassembled_event(sock_net(ulpq->asoc->base.sk), | 	retval = sctp_make_reassembled_event(ulpq->asoc->base.net, | ||||||
| 					     &ulpq->reasm, first_frag, | 					     &ulpq->reasm, first_frag, | ||||||
| 					     last_frag); | 					     last_frag); | ||||||
| 	if (retval) { | 	if (retval) { | ||||||
|  | @ -1159,7 +1156,7 @@ static void sctp_generate_iftsn(struct sctp_outq *q, __u32 ctsn) | ||||||
| 
 | 
 | ||||||
| 	if (ftsn_chunk) { | 	if (ftsn_chunk) { | ||||||
| 		list_add_tail(&ftsn_chunk->list, &q->control_chunk_list); | 		list_add_tail(&ftsn_chunk->list, &q->control_chunk_list); | ||||||
| 		SCTP_INC_STATS(sock_net(asoc->base.sk), SCTP_MIB_OUTCTRLCHUNKS); | 		SCTP_INC_STATS(asoc->base.net, SCTP_MIB_OUTCTRLCHUNKS); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -334,7 +334,7 @@ void sctp_transport_update_rto(struct sctp_transport *tp, __u32 rtt) | ||||||
| 		pr_debug("%s: rto_pending not set on transport %p!\n", __func__, tp); | 		pr_debug("%s: rto_pending not set on transport %p!\n", __func__, tp); | ||||||
| 
 | 
 | ||||||
| 	if (tp->rttvar || tp->srtt) { | 	if (tp->rttvar || tp->srtt) { | ||||||
| 		struct net *net = sock_net(tp->asoc->base.sk); | 		struct net *net = tp->asoc->base.net; | ||||||
| 		/* 6.3.1 C3) When a new RTT measurement R' is made, set
 | 		/* 6.3.1 C3) When a new RTT measurement R' is made, set
 | ||||||
| 		 * RTTVAR <- (1 - RTO.Beta) * RTTVAR + RTO.Beta * |SRTT - R'| | 		 * RTTVAR <- (1 - RTO.Beta) * RTTVAR + RTO.Beta * |SRTT - R'| | ||||||
| 		 * SRTT <- (1 - RTO.Alpha) * SRTT + RTO.Alpha * R' | 		 * SRTT <- (1 - RTO.Alpha) * SRTT + RTO.Alpha * R' | ||||||
|  |  | ||||||
|  | @ -486,10 +486,9 @@ static struct sctp_ulpevent *sctp_ulpq_retrieve_reassembled(struct sctp_ulpq *ul | ||||||
| 		cevent = sctp_skb2event(pd_first); | 		cevent = sctp_skb2event(pd_first); | ||||||
| 		pd_point = sctp_sk(asoc->base.sk)->pd_point; | 		pd_point = sctp_sk(asoc->base.sk)->pd_point; | ||||||
| 		if (pd_point && pd_point <= pd_len) { | 		if (pd_point && pd_point <= pd_len) { | ||||||
| 			retval = sctp_make_reassembled_event(sock_net(asoc->base.sk), | 			retval = sctp_make_reassembled_event(asoc->base.net, | ||||||
| 							     &ulpq->reasm, | 							     &ulpq->reasm, | ||||||
| 							     pd_first, | 							     pd_first, pd_last); | ||||||
| 							     pd_last); |  | ||||||
| 			if (retval) | 			if (retval) | ||||||
| 				sctp_ulpq_set_pd(ulpq); | 				sctp_ulpq_set_pd(ulpq); | ||||||
| 		} | 		} | ||||||
|  | @ -497,7 +496,7 @@ static struct sctp_ulpevent *sctp_ulpq_retrieve_reassembled(struct sctp_ulpq *ul | ||||||
| done: | done: | ||||||
| 	return retval; | 	return retval; | ||||||
| found: | found: | ||||||
| 	retval = sctp_make_reassembled_event(sock_net(ulpq->asoc->base.sk), | 	retval = sctp_make_reassembled_event(ulpq->asoc->base.net, | ||||||
| 					     &ulpq->reasm, first_frag, pos); | 					     &ulpq->reasm, first_frag, pos); | ||||||
| 	if (retval) | 	if (retval) | ||||||
| 		retval->msg_flags |= MSG_EOR; | 		retval->msg_flags |= MSG_EOR; | ||||||
|  | @ -563,8 +562,8 @@ static struct sctp_ulpevent *sctp_ulpq_retrieve_partial(struct sctp_ulpq *ulpq) | ||||||
| 	 * further. | 	 * further. | ||||||
| 	 */ | 	 */ | ||||||
| done: | done: | ||||||
| 	retval = sctp_make_reassembled_event(sock_net(ulpq->asoc->base.sk), | 	retval = sctp_make_reassembled_event(ulpq->asoc->base.net, &ulpq->reasm, | ||||||
| 					&ulpq->reasm, first_frag, last_frag); | 					     first_frag, last_frag); | ||||||
| 	if (retval && is_last) | 	if (retval && is_last) | ||||||
| 		retval->msg_flags |= MSG_EOR; | 		retval->msg_flags |= MSG_EOR; | ||||||
| 
 | 
 | ||||||
|  | @ -664,8 +663,8 @@ static struct sctp_ulpevent *sctp_ulpq_retrieve_first(struct sctp_ulpq *ulpq) | ||||||
| 	 * further. | 	 * further. | ||||||
| 	 */ | 	 */ | ||||||
| done: | done: | ||||||
| 	retval = sctp_make_reassembled_event(sock_net(ulpq->asoc->base.sk), | 	retval = sctp_make_reassembled_event(ulpq->asoc->base.net, &ulpq->reasm, | ||||||
| 					&ulpq->reasm, first_frag, last_frag); | 					     first_frag, last_frag); | ||||||
| 	return retval; | 	return retval; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Xin Long
						Xin Long