aiocb
aio_read2(struct aiocb *iocb, int flags)
aio_write2(struct aiocb *iocb, int flags)
struct aiocb;
aio_suspend(const struct aiocb * const iocbs[], int niocb,
aio_io(struct aiocb *iocb, int (*sysfunc)(struct aiocb *iocb))
__aio_read(struct aiocb *iocb)
__aio_readv(struct aiocb *iocb)
__aio_write(struct aiocb *iocb)
__aio_writev(struct aiocb *iocb)
__aio_waitcomplete(struct aiocb **iocbp, struct timespec *timeout)
__aio_return(struct aiocb *iocb)
__aio_fsync(int op, struct aiocb *iocb)
__lio_listio(int mode, struct aiocb * const list[], int nent,
typedef void (*aio_func)(union sigval val, struct aiocb *iocb);
extern int __sys_aio_read(struct aiocb *iocb);
extern int __sys_aio_readv(struct aiocb *iocb);
extern int __sys_aio_write(struct aiocb *iocb);
extern int __sys_aio_writev(struct aiocb *iocb);
extern ssize_t __sys_aio_waitcomplete(struct aiocb **iocbp, struct timespec *timeout);
extern ssize_t __sys_aio_return(struct aiocb *iocb);
extern int __sys_aio_error(struct aiocb *iocb);
extern int __sys_aio_fsync(int op, struct aiocb *iocb);
extern int __sys_lio_listio(int mode, struct aiocb * const list[], int nent,
f(sn->sn_value, (struct aiocb *)sn->sn_id);
typedef int (__sys_aio_read_t)(struct aiocb *);
typedef int (__sys_aio_write_t)(struct aiocb *);
typedef int (__sys_lio_listio_t)(int, struct aiocb * const *, int, struct sigevent *);
typedef ssize_t (__sys_aio_return_t)(struct aiocb *);
typedef int (__sys_aio_suspend_t)(const struct aiocb * const *, int, const struct timespec *);
typedef int (__sys_aio_cancel_t)(int, struct aiocb *);
typedef int (__sys_aio_error_t)(struct aiocb *);
struct aiocb;
typedef ssize_t (__sys_aio_waitcomplete_t)(struct aiocb **, struct timespec *);
typedef int (__sys_aio_fsync_t)(int, struct aiocb *);
typedef int (__sys_aio_mlock_t)(struct aiocb *);
typedef int (__sys_aio_writev_t)(struct aiocb *);
typedef int (__sys_aio_readv_t)(struct aiocb *);
int __sys_aio_read(struct aiocb * aiocbp);
int __sys_aio_write(struct aiocb * aiocbp);
int __sys_lio_listio(int mode, struct aiocb * const * acb_list, int nent, struct sigevent * sig);
ssize_t __sys_aio_return(struct aiocb * aiocbp);
int __sys_aio_suspend(const struct aiocb * const * aiocbp, int nent, const struct timespec * timeout);
int __sys_aio_cancel(int fd, struct aiocb * aiocbp);
int __sys_aio_error(struct aiocb * aiocbp);
ssize_t __sys_aio_waitcomplete(struct aiocb ** aiocbp, struct timespec * timeout);
int __sys_aio_fsync(int op, struct aiocb * aiocbp);
int __sys_aio_mlock(struct aiocb * aiocbp);
int __sys_aio_writev(struct aiocb * aiocbp);
int __sys_aio_readv(struct aiocb * aiocbp);
__thr_aio_suspend(const struct aiocb * const iocbs[], int niocb, const struct
c_descr->aiocb.aio_offset = c_descr->offset;
c_descr->aiocb.aio_nbytes = ctio->dxfer_len;
if (lseek(c_descr->aiocb.aio_fildes,
c_descr->aiocb.aio_offset, SEEK_SET) < 0) {
if (read(c_descr->aiocb.aio_fildes,
(void *)c_descr->aiocb.aio_buf,
if (aio_read(&c_descr->aiocb) < 0) {
if (!notaio && aio_return(&c_descr->aiocb) < 0) {
if (aio_write(&c_descr->aiocb) < 0) {
if (aio_read(&c_descr->aiocb) < 0) {
if (lseek(c_descr->aiocb.aio_fildes,
c_descr->aiocb.aio_offset, SEEK_SET) < 0) {
if (write(c_descr->aiocb.aio_fildes,
(void *) c_descr->aiocb.aio_buf,
if (aio_write(&c_descr->aiocb) < 0) {
struct aiocb aio, *aiop;
c_descr->aiocb.aio_buf = c_descr->buf;
c_descr->aiocb.aio_fildes = file_fd;
se = &c_descr->aiocb.aio_sigevent;
struct aiocb aiocb; /* AIO descriptor for this CTIO */
struct aiocb *cb;
aiocb_copyin_old_sigevent(struct aiocb *ujob, struct kaiocb *kjob,
struct aiocb *kcb = &kjob->uaiocb;
bzero(kcb, sizeof(struct aiocb));
aiocb_copyin(struct aiocb *ujob, struct kaiocb *kjob, int type)
struct aiocb *kcb = &kjob->uaiocb;
error = copyin(ujob, kcb, sizeof(struct aiocb));
aiocb_fetch_status(struct aiocb *ujob)
aiocb_fetch_error(struct aiocb *ujob)
aiocb_store_status(struct aiocb *ujob, long status)
aiocb_store_error(struct aiocb *ujob, long error)
aiocb_store_aiocb(struct aiocb **ujobp, struct aiocb *ujob)
aio_aqueue(struct thread *td, struct aiocb *ujob, struct aioliojob *lj,
kern_aio_return(struct thread *td, struct aiocb *ujob, struct aiocb_ops *ops)
kern_aio_suspend(struct thread *td, int njoblist, struct aiocb **ujoblist,
struct aiocb **ujoblist;
kern_aio_error(struct thread *td, struct aiocb *ujob, struct aiocb_ops *ops)
return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_READ,
return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_WRITE,
kern_lio_listio(struct thread *td, int mode, struct aiocb * const *uacb_list,
struct aiocb **acb_list, int nent, struct sigevent *sig,
struct aiocb *job;
struct aiocb **acb_list;
acb_list = malloc(sizeof(struct aiocb *) * nent, M_LIO, M_WAITOK);
(struct aiocb * const *)uap->acb_list, acb_list, nent, sigp,
struct aiocb **acb_list;
acb_list = malloc(sizeof(struct aiocb *) * nent, M_LIO, M_WAITOK);
kern_aio_waitcomplete(struct thread *td, struct aiocb **ujobp,
struct aiocb *ujob;
kern_aio_fsync(struct thread *td, int op, struct aiocb *ujob,
aiocb32_copyin_old_sigevent(struct aiocb *ujob, struct kaiocb *kjob,
struct aiocb *kcb = &kjob->uaiocb;
bzero(kcb, sizeof(struct aiocb));
aiocb32_copyin(struct aiocb *ujob, struct kaiocb *kjob, int type)
struct aiocb *kcb = &kjob->uaiocb;
aiocb32_fetch_status(struct aiocb *ujob)
aiocb32_fetch_error(struct aiocb *ujob)
aiocb32_store_status(struct aiocb *ujob, long status)
int (*aio_copyin)(struct aiocb *ujob, struct kaiocb *kjob, int ty);
aiocb32_store_error(struct aiocb *ujob, long error)
long (*fetch_status)(struct aiocb *ujob);
aiocb32_store_aiocb(struct aiocb **ujobp, struct aiocb *ujob)
long (*fetch_error)(struct aiocb *ujob);
int (*store_status)(struct aiocb *ujob, long status);
int (*store_error)(struct aiocb *ujob, long error);
return (kern_aio_return(td, (struct aiocb *)uap->aiocbp, &aiocb32_ops));
int (*store_aiocb)(struct aiocb **ujobp, struct aiocb *ujob);
struct aiocb **ujoblist;
return (kern_aio_error(td, (struct aiocb *)uap->aiocbp, &aiocb32_ops));
return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_READ,
return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_READ,
return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_READV,
return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_WRITE,
return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_WRITE,
return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_WRITEV,
return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_MLOCK,
return (kern_aio_waitcomplete(td, (struct aiocb **)uap->aiocbp, tsp,
return (kern_aio_fsync(td, uap->op, (struct aiocb *)uap->aiocbp,
struct aiocb **acb_list;
acb_list = malloc(sizeof(struct aiocb *) * nent, M_LIO, M_WAITOK);
(struct aiocb * const *)uap->acb_list, acb_list, nent, sigp,
static int aio_aqueue(struct thread *td, struct aiocb *ujob,
struct aiocb **acb_list;
acb_list = malloc(sizeof(struct aiocb *) * nent, M_LIO, M_WAITOK);
(struct aiocb * const *)uap->acb_list, acb_list, nent, sigp,
struct aiocb *cb = &job->uaiocb;
struct aiocb *ujob; /* (*) pointer in userspace of aiocb */
struct aiocb uaiocb; /* (*) copy of user I/O control block */
int aio_read(struct aiocb *);
int aio_readv(struct aiocb *);
int aio_write(struct aiocb *);
int aio_writev(struct aiocb *);
int lio_listio(int, struct aiocb *__restrict const *__restrict, int,
int aio_error(const struct aiocb *);
ssize_t aio_return(struct aiocb *);
int aio_cancel(int, struct aiocb *);
int aio_suspend(const struct aiocb * const[], int, const struct timespec *);
int aio_mlock(struct aiocb *);
ssize_t aio_waitcomplete(struct aiocb **, struct timespec *);
int aio_read2(struct aiocb *, int);
int aio_write2(struct aiocb *, int);
int aio_fsync(int op, struct aiocb *aiocbp);
char aiocbp_l_[PADL_(struct aiocb *)]; struct aiocb * aiocbp; char aiocbp_r_[PADR_(struct aiocb *)];
char aiocbp_l_[PADL_(struct aiocb *)]; struct aiocb * aiocbp; char aiocbp_r_[PADR_(struct aiocb *)];
char aiocbp_l_[PADL_(struct aiocb *)]; struct aiocb * aiocbp; char aiocbp_r_[PADR_(struct aiocb *)];
char aiocbp_l_[PADL_(struct aiocb *)]; struct aiocb * aiocbp; char aiocbp_r_[PADR_(struct aiocb *)];
char aiocbp_l_[PADL_(struct aiocb *)]; struct aiocb * aiocbp; char aiocbp_r_[PADR_(struct aiocb *)];
char aiocbp_l_[PADL_(struct aiocb *)]; struct aiocb * aiocbp; char aiocbp_r_[PADR_(struct aiocb *)];
char acb_list_l_[PADL_(struct aiocb * const *)]; struct aiocb * const * acb_list; char acb_list_r_[PADR_(struct aiocb * const *)];
char aiocbp_l_[PADL_(struct aiocb *)]; struct aiocb * aiocbp; char aiocbp_r_[PADR_(struct aiocb *)];
char aiocbp_l_[PADL_(const struct aiocb * const *)]; const struct aiocb * const * aiocbp; char aiocbp_r_[PADR_(const struct aiocb * const *)];
char aiocbp_l_[PADL_(struct aiocb *)]; struct aiocb * aiocbp; char aiocbp_r_[PADR_(struct aiocb *)];
char aiocbp_l_[PADL_(struct aiocb *)]; struct aiocb * aiocbp; char aiocbp_r_[PADR_(struct aiocb *)];
char aiocbp_l_[PADL_(struct aiocb **)]; struct aiocb ** aiocbp; char aiocbp_r_[PADR_(struct aiocb **)];
iocb[i] = (struct aiocb *)calloc(1,
sizeof(struct aiocb));
((struct aiocb*)(kq_returned.ident))->aio_sigevent.sigev_notify_kevent_flags);
struct aiocb **iocb, *kq_iocb;
iocb = calloc(max_queue_per_proc, sizeof(struct aiocb*));
struct aiocb cb, *cbp;
struct aiocb iocb;
struct aiocb *iocb;
struct aiocb iocb, *iocbp;
struct aiocb iocb;
struct aiocb iocb;
struct aiocb iocb, *iocbp;
struct aiocb iocb;
struct aiocb iocb;
struct aiocb synccb, *iocbp;
struct aiocb iocb;
poll(struct aiocb *aio)
struct aiocb aio;
const struct aiocb *const iocbs[] = {&aio};
struct aiocb aio;
struct aiocb aio;
struct aiocb aio;
struct aiocb aio;
struct aiocb iocb;
poll_signaled(struct aiocb *aio)
struct aiocb aio;
struct aiocb aio;
suspend(struct aiocb *aio)
const struct aiocb *const iocbs[] = {aio};
waitcomplete(struct aiocb *aio)
struct aiocb *aiop;
poll_kqueue(struct aiocb *aio)
struct aiocb aio;
struct aiocb aio;
struct aiocb aio;
struct aiocb aio;
typedef ssize_t (*completion)(struct aiocb*);
malloc(sizeof(struct aiocb *) * iocbs_per_lio);
calloc(1, sizeof(struct aiocb));
struct aiocb *iocb[MAX_IOCBS];
struct aiocb **lio[LIO_MAX], **kq_lio;
struct aiocb *list = NULL;
struct aiocb *list = NULL;
struct aiocb *list = NULL;
struct aiocb *list = NULL;
struct aiocb *list = NULL;
struct aiocb write_cb, read_cb, writev_cb, readv_cb;
struct aiocb *list[] = {&write_cb, &read_cb, &writev_cb, &readv_cb};
struct aiocb sync_cb, mlock_cb;
struct aiocb *list[] = {&sync_cb, &mlock_cb};
struct aiocb *aiocbs[2];
struct aiocb **list[2];
aiocbs[i] = calloc(ios_per_call, sizeof(struct aiocb));
list[i] = calloc(ios_per_call, sizeof(struct aiocb*));
struct aiocb aio;
struct aiocb iocb, *piocb;
struct aiocb iocb, *piocb;
struct aiocb iocb, *piocb;
struct aiocb iocb0, iocb1;
struct aiocb iocb0, iocb1;
struct aiocb iocb, *piocb;
struct aiocb aio = {
set_aio(struct aiocb *a, iot_t iot, int fd, off_t offset, int size, char *buf)
struct aiocb *aio;
struct aiocb *a;
aio = calloc(aio_len, sizeof(struct aiocb));
struct aiocb aiocb;
struct aiocb const *aiocb_array[] = { &aiocb };
bzero(&aiocb, sizeof(aiocb));
aiocb.aio_fildes = d;
aiocb.aio_buf = (void *)buf;
aiocb.aio_nbytes = nbytes;
if (aio_write(&aiocb) < 0)
aiocb_array[0] = &aiocb;
return (aio_return(&aiocb));
struct aiocb aiocb;
struct aiocb const *aiocb_array[] = { &aiocb };
bzero(&aiocb, sizeof(aiocb));
aiocb.aio_fildes = d;
aiocb.aio_buf = buf;
aiocb.aio_nbytes = nbytes;
if (aio_read(&aiocb) < 0)
return (aio_return(&aiocb));
struct aiocb iocb;
print_aiocb(FILE *fp, struct aiocb *cb)
struct aiocb cb;
struct aiocb cb;
struct aiocb cb;
struct aiocb aios[NAIO], *aiop;
struct aiocb aios[MAXIOS];
struct aiocb *aiop;