Set MORETOCOME for AIO write requests on a socket.
Add a MSG_MOREOTOCOME message flag. When this flag is set, sosend* set PRUS_MOREOTOCOME when invoking the protocol send method. The aio worker tasks for sending on a socket set this flag when there are additional write jobs waiting on the socket buffer. Reviewed by: adrian MFC after: 1 month Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D8955
This commit is contained in:
parent
73f3d8c9b0
commit
cb5debd34f
@ -604,6 +604,8 @@ soaio_process_job(struct socket *so, struct sockbuf *sb, struct kaiocb *job)
|
||||
if (td->td_ru.ru_msgrcv != ru_before)
|
||||
job->msgrcv = 1;
|
||||
} else {
|
||||
if (!TAILQ_EMPTY(&sb->sb_aiojobq))
|
||||
flags |= MSG_MORETOCOME;
|
||||
uio.uio_rw = UIO_WRITE;
|
||||
ru_before = td->td_ru.ru_msgsnd;
|
||||
#ifdef MAC
|
||||
|
@ -1182,6 +1182,7 @@ sosend_dgram(struct socket *so, struct sockaddr *addr, struct uio *uio,
|
||||
(resid <= 0)) ?
|
||||
PRUS_EOF :
|
||||
/* If there is more to send set PRUS_MORETOCOME */
|
||||
(flags & MSG_MORETOCOME) ||
|
||||
(resid > 0 && space > 0) ? PRUS_MORETOCOME : 0,
|
||||
top, addr, control, td);
|
||||
if (dontroute) {
|
||||
@ -1368,6 +1369,7 @@ sosend_generic(struct socket *so, struct sockaddr *addr, struct uio *uio,
|
||||
(resid <= 0)) ?
|
||||
PRUS_EOF :
|
||||
/* If there is more to send set PRUS_MORETOCOME. */
|
||||
(flags & MSG_MORETOCOME) ||
|
||||
(resid > 0 && space > 0) ? PRUS_MORETOCOME : 0,
|
||||
top, addr, control, td);
|
||||
if (dontroute) {
|
||||
|
@ -435,6 +435,7 @@ struct msghdr {
|
||||
#endif
|
||||
#ifdef _KERNEL
|
||||
#define MSG_SOCALLBCK 0x10000 /* for use by socket callbacks - soreceive (TCP) */
|
||||
#define MSG_MORETOCOME 0x20000 /* additional data pending */
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user