Changeset View
Changeset View
Standalone View
Standalone View
sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c
Show First 20 Lines • Show All 1,094 Lines • ▼ Show 20 Lines | sdp_sosend(struct socket *so, struct sockaddr *addr, struct uio *uio, | ||||
* Also check to make sure that MSG_EOR isn't used on SOCK_STREAM | * Also check to make sure that MSG_EOR isn't used on SOCK_STREAM | ||||
* type sockets since that's an error. | * type sockets since that's an error. | ||||
*/ | */ | ||||
if (resid < 0 || (so->so_type == SOCK_STREAM && (flags & MSG_EOR))) { | if (resid < 0 || (so->so_type == SOCK_STREAM && (flags & MSG_EOR))) { | ||||
error = EINVAL; | error = EINVAL; | ||||
goto out; | goto out; | ||||
} | } | ||||
if (td != NULL) | if (td != NULL) | ||||
td->td_ru.ru_msgsnd++; | RU_ATOMIC_INC(td->td_ru.ru_msgsnd); | ||||
ssk = sdp_sk(so); | ssk = sdp_sk(so); | ||||
error = SOCK_IO_SEND_LOCK(so, SBLOCKWAIT(flags)); | error = SOCK_IO_SEND_LOCK(so, SBLOCKWAIT(flags)); | ||||
if (error) | if (error) | ||||
goto out; | goto out; | ||||
restart: | restart: | ||||
do { | do { | ||||
▲ Show 20 Lines • Show All 231 Lines • ▼ Show 20 Lines | |||||
deliver: | deliver: | ||||
SOCKBUF_LOCK_ASSERT(&so->so_rcv); | SOCKBUF_LOCK_ASSERT(&so->so_rcv); | ||||
KASSERT(sbavail(sb), ("%s: sockbuf empty", __func__)); | KASSERT(sbavail(sb), ("%s: sockbuf empty", __func__)); | ||||
KASSERT(sb->sb_mb != NULL, ("%s: sb_mb == NULL", __func__)); | KASSERT(sb->sb_mb != NULL, ("%s: sb_mb == NULL", __func__)); | ||||
/* Statistics. */ | /* Statistics. */ | ||||
if (uio->uio_td) | if (uio->uio_td) | ||||
uio->uio_td->td_ru.ru_msgrcv++; | RU_ATOMIC_INC(uio->uio_td->td_ru.ru_msgrcv); | ||||
/* Fill uio until full or current end of socket buffer is reached. */ | /* Fill uio until full or current end of socket buffer is reached. */ | ||||
len = min(uio->uio_resid, sbavail(sb)); | len = min(uio->uio_resid, sbavail(sb)); | ||||
if (mp0 != NULL) { | if (mp0 != NULL) { | ||||
/* Dequeue as many mbufs as possible. */ | /* Dequeue as many mbufs as possible. */ | ||||
if (!(flags & MSG_PEEK) && len >= sb->sb_mb->m_len) { | if (!(flags & MSG_PEEK) && len >= sb->sb_mb->m_len) { | ||||
for (*mp0 = m = sb->sb_mb; | for (*mp0 = m = sb->sb_mb; | ||||
m != NULL && m->m_len <= len; | m != NULL && m->m_len <= len; | ||||
▲ Show 20 Lines • Show All 618 Lines • Show Last 20 Lines |