Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
net/sched/cls_api.c has overlapping changes to a call to nlmsg_parse(), one (from 'net') added rtm_tca_policy instead of NULL to the 5th argument, and another (from 'net-next') added cb->extack instead of NULL to the 6th argument. net/ipv4/ipmr_base.c is a case of a bug fix in 'net' being done to code which moved (to mr_table_dump)) in 'net-next'. Thanks to David Ahern for the heads up. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -1450,7 +1450,8 @@ void sctp_assoc_sync_pmtu(struct sctp_association *asoc)
|
||||
/* Get the lowest pmtu of all the transports. */
|
||||
list_for_each_entry(t, &asoc->peer.transport_addr_list, transports) {
|
||||
if (t->pmtu_pending && t->dst) {
|
||||
sctp_transport_update_pmtu(t, sctp_dst_mtu(t->dst));
|
||||
sctp_transport_update_pmtu(t,
|
||||
atomic_read(&t->mtu_info));
|
||||
t->pmtu_pending = 0;
|
||||
}
|
||||
if (!pmtu || (t->pathmtu < pmtu))
|
||||
|
@@ -395,6 +395,7 @@ void sctp_icmp_frag_needed(struct sock *sk, struct sctp_association *asoc,
|
||||
return;
|
||||
|
||||
if (sock_owned_by_user(sk)) {
|
||||
atomic_set(&t->mtu_info, pmtu);
|
||||
asoc->pmtu_pending = 1;
|
||||
t->pmtu_pending = 1;
|
||||
return;
|
||||
|
@@ -120,6 +120,12 @@ void sctp_packet_config(struct sctp_packet *packet, __u32 vtag,
|
||||
sctp_assoc_sync_pmtu(asoc);
|
||||
}
|
||||
|
||||
if (asoc->pmtu_pending) {
|
||||
if (asoc->param_flags & SPP_PMTUD_ENABLE)
|
||||
sctp_assoc_sync_pmtu(asoc);
|
||||
asoc->pmtu_pending = 0;
|
||||
}
|
||||
|
||||
/* If there a is a prepend chunk stick it on the list before
|
||||
* any other chunks get appended.
|
||||
*/
|
||||
|
@@ -253,11 +253,10 @@ struct sctp_association *sctp_id2assoc(struct sock *sk, sctp_assoc_t id)
|
||||
|
||||
spin_lock_bh(&sctp_assocs_id_lock);
|
||||
asoc = (struct sctp_association *)idr_find(&sctp_assocs_id, (int)id);
|
||||
if (asoc && (asoc->base.sk != sk || asoc->base.dead))
|
||||
asoc = NULL;
|
||||
spin_unlock_bh(&sctp_assocs_id_lock);
|
||||
|
||||
if (!asoc || (asoc->base.sk != sk) || asoc->base.dead)
|
||||
return NULL;
|
||||
|
||||
return asoc;
|
||||
}
|
||||
|
||||
@@ -1928,8 +1927,10 @@ static int sctp_sendmsg_to_asoc(struct sctp_association *asoc,
|
||||
if (sp->strm_interleave) {
|
||||
timeo = sock_sndtimeo(sk, 0);
|
||||
err = sctp_wait_for_connect(asoc, &timeo);
|
||||
if (err)
|
||||
if (err) {
|
||||
err = -ESRCH;
|
||||
goto err;
|
||||
}
|
||||
} else {
|
||||
wait_connect = true;
|
||||
}
|
||||
@@ -7082,14 +7083,14 @@ static int sctp_getsockopt_pr_assocstatus(struct sock *sk, int len,
|
||||
}
|
||||
|
||||
policy = params.sprstat_policy;
|
||||
if (policy & ~SCTP_PR_SCTP_MASK)
|
||||
if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)))
|
||||
goto out;
|
||||
|
||||
asoc = sctp_id2assoc(sk, params.sprstat_assoc_id);
|
||||
if (!asoc)
|
||||
goto out;
|
||||
|
||||
if (policy == SCTP_PR_SCTP_NONE) {
|
||||
if (policy & SCTP_PR_SCTP_ALL) {
|
||||
params.sprstat_abandoned_unsent = 0;
|
||||
params.sprstat_abandoned_sent = 0;
|
||||
for (policy = 0; policy <= SCTP_PR_INDEX(MAX); policy++) {
|
||||
@@ -7141,7 +7142,7 @@ static int sctp_getsockopt_pr_streamstatus(struct sock *sk, int len,
|
||||
}
|
||||
|
||||
policy = params.sprstat_policy;
|
||||
if (policy & ~SCTP_PR_SCTP_MASK)
|
||||
if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)))
|
||||
goto out;
|
||||
|
||||
asoc = sctp_id2assoc(sk, params.sprstat_assoc_id);
|
||||
@@ -7157,7 +7158,7 @@ static int sctp_getsockopt_pr_streamstatus(struct sock *sk, int len,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (policy == SCTP_PR_SCTP_NONE) {
|
||||
if (policy == SCTP_PR_SCTP_ALL) {
|
||||
params.sprstat_abandoned_unsent = 0;
|
||||
params.sprstat_abandoned_sent = 0;
|
||||
for (policy = 0; policy <= SCTP_PR_INDEX(MAX); policy++) {
|
||||
|
Reference in New Issue
Block a user