Skip to content

Commit

Permalink
sctp: adjust some codes in a better order in sctp_sendmsg
Browse files Browse the repository at this point in the history
sctp_sendmsg_new_asoc and SCTP_ADDR_OVER check is only necessary
when daddr is set, so move them up to if (daddr) statement.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Xin Long authored and David S. Miller committed Mar 4, 2018
1 parent 007b7e1 commit 0a3920d
Showing 1 changed file with 18 additions and 18 deletions.
36 changes: 18 additions & 18 deletions net/sctp/socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -1936,38 +1936,38 @@ static int sctp_sendmsg(struct sock *sk, struct msghdr *msg, size_t msg_len)

lock_sock(sk);

/* If a msg_name has been specified, assume this is to be used. */
/* Get and check or create asoc */
if (daddr) {
/* Look for a matching association on the endpoint. */
asoc = sctp_endpoint_lookup_assoc(ep, daddr, &transport);
if (asoc) {
err = sctp_sendmsg_check_sflags(asoc, sflags, msg,
msg_len);
if (err <= 0)
goto out_unlock;
} else {
err = sctp_sendmsg_new_asoc(sk, sflags, &cmsgs, daddr,
&transport);
if (err)
goto out_unlock;

asoc = transport->asoc;
new = true;
}

if (!sctp_style(sk, TCP) && !(sflags & SCTP_ADDR_OVER))
transport = NULL;
} else {
asoc = sctp_id2assoc(sk, sinfo->sinfo_assoc_id);
if (!asoc) {
err = -EPIPE;
goto out_unlock;
}
}

if (asoc) {
err = sctp_sendmsg_check_sflags(asoc, sflags, msg, msg_len);
if (err <= 0)
goto out_unlock;
}

/* Do we need to create the association? */
if (!asoc) {
err = sctp_sendmsg_new_asoc(sk, sflags, &cmsgs, daddr,
&transport);
if (err)
goto out_unlock;

asoc = transport->asoc;
new = true;
}

if (!sctp_style(sk, TCP) && !(sflags & SCTP_ADDR_OVER))
transport = NULL;

/* Update snd_info with the asoc */
sctp_sendmsg_update_sinfo(asoc, sinfo, &cmsgs);

Expand Down

0 comments on commit 0a3920d

Please sign in to comment.