mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-22 20:23:57 +08:00
Merge branch 'sctp-MSG_MORE'
Xin Long says: ==================== sctp: support MSG_MORE flag when sending msg This patch is to add support for MSG_MORE on sctp. Patch 1/2 is an improvement ahead of patch 2/2 to solve the close block problem mentioned in https://patchwork.ozlabs.org/patch/372404/. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
d4105267a1
@ -497,6 +497,7 @@ struct sctp_datamsg {
|
||||
/* Did the messenge fail to send? */
|
||||
int send_error;
|
||||
u8 send_failed:1,
|
||||
force_delay:1,
|
||||
can_delay; /* should this message be Nagle delayed */
|
||||
};
|
||||
|
||||
|
@ -704,18 +704,15 @@ static sctp_xmit_t sctp_packet_can_append_data(struct sctp_packet *packet,
|
||||
* unacknowledged.
|
||||
*/
|
||||
|
||||
if (sctp_sk(asoc->base.sk)->nodelay)
|
||||
/* Nagle disabled */
|
||||
if ((sctp_sk(asoc->base.sk)->nodelay || inflight == 0) &&
|
||||
!chunk->msg->force_delay)
|
||||
/* Nothing unacked */
|
||||
return SCTP_XMIT_OK;
|
||||
|
||||
if (!sctp_packet_empty(packet))
|
||||
/* Append to packet */
|
||||
return SCTP_XMIT_OK;
|
||||
|
||||
if (inflight == 0)
|
||||
/* Nothing unacked */
|
||||
return SCTP_XMIT_OK;
|
||||
|
||||
if (!sctp_state(asoc, ESTABLISHED))
|
||||
return SCTP_XMIT_OK;
|
||||
|
||||
|
@ -872,6 +872,10 @@ static void sctp_cmd_new_state(sctp_cmd_seq_t *cmds,
|
||||
if (!sctp_style(sk, UDP))
|
||||
sk->sk_state_change(sk);
|
||||
}
|
||||
|
||||
if (sctp_state(asoc, SHUTDOWN_PENDING) &&
|
||||
!sctp_outq_is_empty(&asoc->outqueue))
|
||||
sctp_outq_uncork(&asoc->outqueue, GFP_ATOMIC);
|
||||
}
|
||||
|
||||
/* Helper function to delete an association. */
|
||||
|
@ -1964,6 +1964,7 @@ static int sctp_sendmsg(struct sock *sk, struct msghdr *msg, size_t msg_len)
|
||||
err = PTR_ERR(datamsg);
|
||||
goto out_free;
|
||||
}
|
||||
datamsg->force_delay = !!(msg->msg_flags & MSG_MORE);
|
||||
|
||||
/* Now send the (possibly) fragmented message. */
|
||||
list_for_each_entry(chunk, &datamsg->chunks, frag_list) {
|
||||
|
Loading…
Reference in New Issue
Block a user