Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/sys_socket.c
Show First 20 Lines • Show All 769 Lines • ▼ Show 20 Lines | |||||
{ | { | ||||
struct socket *so; | struct socket *so; | ||||
struct sockbuf *sb; | struct sockbuf *sb; | ||||
long done; | long done; | ||||
int opcode; | int opcode; | ||||
so = job->fd_file->f_data; | so = job->fd_file->f_data; | ||||
opcode = job->uaiocb.aio_lio_opcode; | opcode = job->uaiocb.aio_lio_opcode; | ||||
if (opcode == LIO_READ || opcode == LIO_READV) | if (opcode & LIO_READ) | ||||
sb = &so->so_rcv; | sb = &so->so_rcv; | ||||
else { | else { | ||||
MPASS(opcode == LIO_WRITE || opcode == LIO_WRITEV); | MPASS(opcode & LIO_WRITE); | ||||
sb = &so->so_snd; | sb = &so->so_snd; | ||||
} | } | ||||
SOCKBUF_LOCK(sb); | SOCKBUF_LOCK(sb); | ||||
if (!aio_cancel_cleared(job)) | if (!aio_cancel_cleared(job)) | ||||
TAILQ_REMOVE(&sb->sb_aiojobq, job, list); | TAILQ_REMOVE(&sb->sb_aiojobq, job, list); | ||||
if (TAILQ_EMPTY(&sb->sb_aiojobq)) | if (TAILQ_EMPTY(&sb->sb_aiojobq)) | ||||
sb->sb_flags &= ~SB_AIO; | sb->sb_flags &= ~SB_AIO; | ||||
Show All 13 Lines | soo_aio_queue(struct file *fp, struct kaiocb *job) | ||||
struct sockbuf *sb; | struct sockbuf *sb; | ||||
int error; | int error; | ||||
so = fp->f_data; | so = fp->f_data; | ||||
error = (*so->so_proto->pr_usrreqs->pru_aio_queue)(so, job); | error = (*so->so_proto->pr_usrreqs->pru_aio_queue)(so, job); | ||||
if (error == 0) | if (error == 0) | ||||
return (0); | return (0); | ||||
switch (job->uaiocb.aio_lio_opcode) { | switch (job->uaiocb.aio_lio_opcode & (LIO_WRITE | LIO_READ)) { | ||||
case LIO_READ: | case LIO_READ: | ||||
case LIO_READV: | |||||
sb = &so->so_rcv; | sb = &so->so_rcv; | ||||
break; | break; | ||||
case LIO_WRITE: | case LIO_WRITE: | ||||
case LIO_WRITEV: | |||||
sb = &so->so_snd; | sb = &so->so_snd; | ||||
break; | break; | ||||
default: | default: | ||||
return (EINVAL); | return (EINVAL); | ||||
} | } | ||||
SOCKBUF_LOCK(sb); | SOCKBUF_LOCK(sb); | ||||
if (!aio_set_cancel_function(job, soo_aio_cancel)) | if (!aio_set_cancel_function(job, soo_aio_cancel)) | ||||
Show All 11 Lines |