aiocbp
thunk_aio_read(struct aiocb *aiocbp)
return aio_read(aiocbp);
thunk_aio_write(struct aiocb *aiocbp)
return aio_write(aiocbp);
thunk_aio_error(const struct aiocb *aiocbp)
return aio_error(aiocbp);
thunk_aio_return(struct aiocb *aiocbp)
return aio_return(aiocbp);
struct aiocb *aiocbp = &job->aiocbp;
error = (*fp->f_ops->fo_write)(fp, &aiocbp->aio_offset,
job->aiocbp.aio_nbytes -= auio.uio_resid;
job->aiocbp._retval = (error == 0) ? job->aiocbp.aio_nbytes : -1;
job->aiocbp._errno = error;
job->aiocbp._state = JOB_DONE;
struct aiocb *aiocbp = &job->aiocbp;
error = (*fp->f_ops->fo_read)(fp, &aiocbp->aio_offset,
job->aiocbp.aio_nbytes -= auio.uio_resid;
job->aiocbp._retval = (error == 0) ? job->aiocbp.aio_nbytes : -1;
job->aiocbp._errno = error;
job->aiocbp._state = JOB_DONE;
job->aiocbp._retval = (error == 0) ? 0 : -1;
job->aiocbp._errno = error;
job->aiocbp._state = JOB_DONE;
copyout(&job->aiocbp, job->aiocb_uptr, sizeof(job->aiocbp));
if (job->aiocbp._state == JOB_NONE) {
*retval = job->aiocbp._errno;
struct aiocbp *handle = NULL;
if (job->aiocbp._state != JOB_DONE) {
*retval = job->aiocbp._retval;
job->aiocbp._errno = 0;
job->aiocbp._retval = -1;
job->aiocbp._state = JOB_NONE;
struct aiocbp *aiocbp;
TAILQ_FOREACH(aiocbp, &aiosp->aio_hash[hash], list) {
if (aiocbp->uptr == uptr) {
job = aiocbp->job;
struct aio_job **jobp, struct aiocbp **handlep)
struct aiocbp *aiocbp;
TAILQ_FOREACH(aiocbp, &aiosp->aio_hash[hash], list) {
if (aiocbp->uptr == uptr) {
job = aiocbp->job;
TAILQ_REMOVE(&aiosp->aio_hash[hash], aiocbp, list);
*handlep = aiocbp;
aiocbp_insert(struct aiosp *aiosp, struct aiocbp *aiocbp)
struct aiocbp *found;
uptr = aiocbp->uptr;
found->job = aiocbp->job;
TAILQ_INSERT_HEAD(&aiosp->aio_hash[hash], aiocbp, list);
struct aiocbp *aiocbp;
struct aiocbp *tmp;
TAILQ_FOREACH_SAFE(aiocbp, &aiosp->aio_hash[i], list, tmp) {
TAILQ_REMOVE(&aiosp->aio_hash[i], aiocbp, list);
kmem_free(aiocbp, sizeof(*aiocbp));
static int aiocbp_insert(struct aiosp *, struct aiocbp *);
struct aio_job **, struct aiocbp **);
memcpy(&a_job->aiocbp, &aiocb, sizeof(aiocb));
struct aiocbp *aiocbp = kmem_zalloc(sizeof(*aiocbp), KM_SLEEP);
aiocbp->job = a_job;
aiocbp->uptr = aiocb_uptr;
error = aiocbp_insert(&aio->aiosp, aiocbp);
kmem_free(aiocbp, sizeof(*aiocbp));
kmem_free(aiocbp, sizeof(*aiocbp));
aiocbp_uptr = (struct aiocb *)SCARG(uap, aiocbp);
if (job->aiocbp.aio_fildes == (int)fildes) {
const void *uptr = SCARG(uap, aiocbp);
return aio_enqueue_job(op, SCARG(uap, aiocbp), NULL);
error = aio_enqueue_job(AIO_READ, SCARG(uap, aiocbp), NULL);
const void *uptr = SCARG(uap, aiocbp);
error = aio_enqueue_job(AIO_WRITE, SCARG(uap, aiocbp), NULL);
job->aio_op, job->aiocbp._errno, job->aiocbp._state,
job->aiocbp.aio_fildes,
(unsigned long long)job->aiocbp.aio_offset,
(void *)job->aiocbp.aio_buf,
(size_t)job->aiocbp.aio_nbytes,
j->aio_op, j->aiocbp._errno,
j->aiocbp._state, j->aiocb_uptr);
j->aiocbp.aio_fildes,
(unsigned long long)j->aiocbp.aio_offset,
j->aiocbp.aio_buf,
(size_t)j->aiocbp.aio_nbytes);
struct aiocbp *hc;
aiost_sigsend(job->p, &job->aiocbp.aio_sigevent);
job->aiocbp._errno = ECANCELED;
struct aiocb *aiocbp = &job->aiocbp;
if (aiocbp->aio_nbytes > SSIZE_MAX)
aiov->iov_base = aiocbp->aio_buf;
aiov->iov_len = aiocbp->aio_nbytes;
auio->uio_resid = aiocbp->aio_nbytes;
auio->uio_offset = aiocbp->aio_offset;
uarg[1] = (intptr_t) SCARG(p, aiocbp); /* struct aiocb * */
uarg[0] = (intptr_t) SCARG(p, aiocbp); /* const struct aiocb * */
uarg[1] = (intptr_t) SCARG(p, aiocbp); /* struct aiocb * */
uarg[0] = (intptr_t) SCARG(p, aiocbp); /* struct aiocb * */
uarg[0] = (intptr_t) SCARG(p, aiocbp); /* struct aiocb * */
uarg[0] = (intptr_t) SCARG(p, aiocbp); /* struct aiocb * */
rump___sysimpl_aio_cancel(int fildes, struct aiocb * aiocbp)
SPARG(&callarg, aiocbp) = aiocbp;
rump___sysimpl_aio_error(const struct aiocb * aiocbp)
SPARG(&callarg, aiocbp) = aiocbp;
rump___sysimpl_aio_fsync(int op, struct aiocb * aiocbp)
SPARG(&callarg, aiocbp) = aiocbp;
rump___sysimpl_aio_read(struct aiocb * aiocbp)
SPARG(&callarg, aiocbp) = aiocbp;
rump___sysimpl_aio_return(struct aiocb * aiocbp)
SPARG(&callarg, aiocbp) = aiocbp;
rump___sysimpl_aio_write(struct aiocb * aiocbp)
SPARG(&callarg, aiocbp) = aiocbp;
struct aiocb aiocbp; /* User-visible AIO control block */
TAILQ_ENTRY(aiocbp) list;
TAILQ_HEAD(aiocbp_list, aiocbp);
syscallarg(struct aiocb *) aiocbp;
syscallarg(const struct aiocb *) aiocbp;
syscallarg(struct aiocb *) aiocbp;
syscallarg(struct aiocb *) aiocbp;
syscallarg(struct aiocb *) aiocbp;
syscallarg(struct aiocb *) aiocbp;