Lines Matching refs:job
306 static int aio_free_entry(struct kaiocb *job);
307 static void aio_process_rw(struct kaiocb *job);
308 static void aio_process_sync(struct kaiocb *job);
309 static void aio_process_mlock(struct kaiocb *job);
314 static int aio_queue_file(struct file *fp, struct kaiocb *job);
319 static int aio_qbio(struct proc *p, struct kaiocb *job);
321 static void aio_bio_done_notify(struct proc *userp, struct kaiocb *job);
322 static bool aio_clear_cancel_function_locked(struct kaiocb *job);
496 aio_free_entry(struct kaiocb *job) in aio_free_entry() argument
502 p = job->userproc; in aio_free_entry()
508 MPASS(job->jobflags & KAIOCB_FINISHED); in aio_free_entry()
515 TAILQ_REMOVE(&ki->kaio_done, job, plist); in aio_free_entry()
516 TAILQ_REMOVE(&ki->kaio_all, job, allist); in aio_free_entry()
518 lj = job->lio; in aio_free_entry()
535 knlist_delete(&job->klist, curthread, 1); in aio_free_entry()
537 sigqueue_take(&job->ksi); in aio_free_entry()
562 if (job->fd_file) in aio_free_entry()
563 fdrop(job->fd_file, curthread); in aio_free_entry()
564 crfree(job->cred); in aio_free_entry()
565 if (job->uiop != &job->uio) in aio_free_entry()
566 freeuio(job->uiop); in aio_free_entry()
567 uma_zfree(aiocb_zone, job); in aio_free_entry()
581 aio_cancel_job(struct proc *p, struct kaioinfo *ki, struct kaiocb *job) in aio_cancel_job() argument
587 if (job->jobflags & (KAIOCB_CANCELLED | KAIOCB_FINISHED)) in aio_cancel_job()
589 MPASS((job->jobflags & KAIOCB_CANCELLING) == 0); in aio_cancel_job()
590 job->jobflags |= KAIOCB_CANCELLED; in aio_cancel_job()
592 func = job->cancel_fn; in aio_cancel_job()
610 job->jobflags |= KAIOCB_CANCELLING; in aio_cancel_job()
612 func(job); in aio_cancel_job()
614 job->jobflags &= ~KAIOCB_CANCELLING; in aio_cancel_job()
615 if (job->jobflags & KAIOCB_FINISHED) { in aio_cancel_job()
616 cancelled = job->uaiocb._aiocb_private.error == ECANCELED; in aio_cancel_job()
617 TAILQ_REMOVE(&ki->kaio_jobqueue, job, plist); in aio_cancel_job()
618 aio_bio_done_notify(p, job); in aio_cancel_job()
639 struct kaiocb *job, *jobn; in aio_proc_rundown() local
656 TAILQ_FOREACH_SAFE(job, &ki->kaio_jobqueue, plist, jobn) { in aio_proc_rundown()
657 aio_cancel_job(p, ki, job); in aio_proc_rundown()
668 while ((job = TAILQ_FIRST(&ki->kaio_done)) != NULL) in aio_proc_rundown()
669 aio_free_entry(job); in aio_proc_rundown()
698 struct kaiocb *job; in aio_selectjob() local
704 TAILQ_FOREACH(job, &aio_jobs, list) { in aio_selectjob()
705 userp = job->userproc; in aio_selectjob()
709 TAILQ_REMOVE(&aio_jobs, job, list); in aio_selectjob()
710 if (!aio_clear_cancel_function(job)) in aio_selectjob()
718 return (job); in aio_selectjob()
759 aio_process_rw(struct kaiocb *job) in aio_process_rw() argument
771 opcode = job->uaiocb.aio_lio_opcode & ~LIO_FOFFSET; in aio_process_rw()
774 ("%s: opcode %d", __func__, job->uaiocb.aio_lio_opcode)); in aio_process_rw()
776 aio_switch_vmspace(job); in aio_process_rw()
779 td->td_ucred = job->cred; in aio_process_rw()
780 job->uiop->uio_td = td; in aio_process_rw()
781 fp = job->fd_file; in aio_process_rw()
783 cnt = job->uiop->uio_resid; in aio_process_rw()
795 if (job->uiop->uio_resid == 0) in aio_process_rw()
798 error = fo_read(fp, job->uiop, fp->f_cred, in aio_process_rw()
799 (job->ioflags & KAIOCB_IO_FOFFSET) != 0 ? 0 : in aio_process_rw()
804 error = fo_write(fp, job->uiop, fp->f_cred, (job->ioflags & in aio_process_rw()
812 job->msgrcv = msgrcv_end - msgrcv_st; in aio_process_rw()
813 job->msgsnd = msgsnd_end - msgsnd_st; in aio_process_rw()
814 job->inblock = inblock_end - inblock_st; in aio_process_rw()
815 job->outblock = oublock_end - oublock_st; in aio_process_rw()
817 if (error != 0 && job->uiop->uio_resid != cnt) { in aio_process_rw()
821 PROC_LOCK(job->userproc); in aio_process_rw()
822 kern_psignal(job->userproc, SIGPIPE); in aio_process_rw()
823 PROC_UNLOCK(job->userproc); in aio_process_rw()
827 cnt -= job->uiop->uio_resid; in aio_process_rw()
830 aio_complete(job, -1, error); in aio_process_rw()
832 aio_complete(job, cnt, 0); in aio_process_rw()
836 aio_process_sync(struct kaiocb *job) in aio_process_sync() argument
840 struct file *fp = job->fd_file; in aio_process_sync()
843 KASSERT(job->uaiocb.aio_lio_opcode & LIO_SYNC, in aio_process_sync()
844 ("%s: opcode %d", __func__, job->uaiocb.aio_lio_opcode)); in aio_process_sync()
846 td->td_ucred = job->cred; in aio_process_sync()
849 job->uaiocb.aio_lio_opcode); in aio_process_sync()
853 aio_complete(job, -1, error); in aio_process_sync()
855 aio_complete(job, 0, 0); in aio_process_sync()
859 aio_process_mlock(struct kaiocb *job) in aio_process_mlock() argument
861 struct aiocb *cb = &job->uaiocb; in aio_process_mlock()
864 KASSERT(job->uaiocb.aio_lio_opcode == LIO_MLOCK, in aio_process_mlock()
865 ("%s: opcode %d", __func__, job->uaiocb.aio_lio_opcode)); in aio_process_mlock()
867 aio_switch_vmspace(job); in aio_process_mlock()
868 error = kern_mlock(job->userproc, job->cred, in aio_process_mlock()
870 aio_complete(job, error != 0 ? -1 : 0, error); in aio_process_mlock()
874 aio_bio_done_notify(struct proc *userp, struct kaiocb *job) in aio_bio_done_notify() argument
884 lj = job->lio; in aio_bio_done_notify()
891 TAILQ_INSERT_TAIL(&ki->kaio_done, job, plist); in aio_bio_done_notify()
892 MPASS(job->jobflags & KAIOCB_FINISHED); in aio_bio_done_notify()
897 if (job->uaiocb.aio_sigevent.sigev_notify == SIGEV_SIGNAL || in aio_bio_done_notify()
898 job->uaiocb.aio_sigevent.sigev_notify == SIGEV_THREAD_ID) in aio_bio_done_notify()
899 aio_sendsig(userp, &job->uaiocb.aio_sigevent, &job->ksi, true); in aio_bio_done_notify()
901 KNOTE_LOCKED(&job->klist, 1); in aio_bio_done_notify()
919 if (job->jobflags & KAIOCB_CHECKSYNC) { in aio_bio_done_notify()
922 if (job->fd_file != sjob->fd_file || in aio_bio_done_notify()
923 job->seqno >= sjob->seqno) in aio_bio_done_notify()
947 struct kaiocb *job; in aio_schedule_fsync() local
952 job = TAILQ_FIRST(&ki->kaio_syncready); in aio_schedule_fsync()
953 TAILQ_REMOVE(&ki->kaio_syncready, job, list); in aio_schedule_fsync()
955 aio_schedule(job, aio_process_sync); in aio_schedule_fsync()
962 aio_cancel_cleared(struct kaiocb *job) in aio_cancel_cleared() argument
971 return ((job->jobflags & KAIOCB_CLEARED) != 0); in aio_cancel_cleared()
975 aio_clear_cancel_function_locked(struct kaiocb *job) in aio_clear_cancel_function_locked() argument
978 AIO_LOCK_ASSERT(job->userproc->p_aioinfo, MA_OWNED); in aio_clear_cancel_function_locked()
979 MPASS(job->cancel_fn != NULL); in aio_clear_cancel_function_locked()
980 if (job->jobflags & KAIOCB_CANCELLING) { in aio_clear_cancel_function_locked()
981 job->jobflags |= KAIOCB_CLEARED; in aio_clear_cancel_function_locked()
984 job->cancel_fn = NULL; in aio_clear_cancel_function_locked()
989 aio_clear_cancel_function(struct kaiocb *job) in aio_clear_cancel_function() argument
994 ki = job->userproc->p_aioinfo; in aio_clear_cancel_function()
996 ret = aio_clear_cancel_function_locked(job); in aio_clear_cancel_function()
1002 aio_set_cancel_function_locked(struct kaiocb *job, aio_cancel_fn_t *func) in aio_set_cancel_function_locked() argument
1005 AIO_LOCK_ASSERT(job->userproc->p_aioinfo, MA_OWNED); in aio_set_cancel_function_locked()
1006 if (job->jobflags & KAIOCB_CANCELLED) in aio_set_cancel_function_locked()
1008 job->cancel_fn = func; in aio_set_cancel_function_locked()
1013 aio_set_cancel_function(struct kaiocb *job, aio_cancel_fn_t *func) in aio_set_cancel_function() argument
1018 ki = job->userproc->p_aioinfo; in aio_set_cancel_function()
1020 ret = aio_set_cancel_function_locked(job, func); in aio_set_cancel_function()
1026 aio_complete(struct kaiocb *job, long status, int error) in aio_complete() argument
1031 job->uaiocb._aiocb_private.error = error; in aio_complete()
1032 job->uaiocb._aiocb_private.status = status; in aio_complete()
1034 userp = job->userproc; in aio_complete()
1038 KASSERT(!(job->jobflags & KAIOCB_FINISHED), in aio_complete()
1040 job->jobflags |= KAIOCB_FINISHED; in aio_complete()
1041 if ((job->jobflags & (KAIOCB_QUEUEING | KAIOCB_CANCELLING)) == 0) { in aio_complete()
1042 TAILQ_REMOVE(&ki->kaio_jobqueue, job, plist); in aio_complete()
1043 aio_bio_done_notify(userp, job); in aio_complete()
1049 aio_cancel(struct kaiocb *job) in aio_cancel() argument
1052 aio_complete(job, -1, ECANCELED); in aio_cancel()
1056 aio_switch_vmspace(struct kaiocb *job) in aio_switch_vmspace() argument
1059 vmspace_switch_aio(job->userproc->p_vmspace); in aio_switch_vmspace()
1069 struct kaiocb *job; in aio_daemon() local
1114 while ((job = aio_selectjob(aiop)) != NULL) { in aio_daemon()
1117 ki = job->userproc->p_aioinfo; in aio_daemon()
1118 job->handle_fn(job); in aio_daemon()
1209 aio_qbio(struct proc *p, struct kaiocb *job) in aio_qbio() argument
1224 cb = &job->uaiocb; in aio_qbio()
1225 fp = job->fd_file; in aio_qbio()
1241 iovcnt = job->uiop->uio_iovcnt; in aio_qbio()
1245 if (job->uiop->uio_iov[i].iov_len % vp->v_bufobj.bo_bsize != 0) in aio_qbio()
1247 if (job->uiop->uio_iov[i].iov_len > maxphys) { in aio_qbio()
1263 if (job->uiop->uio_resid > dev->si_iosize_max) { in aio_qbio()
1269 job->error = 0; in aio_qbio()
1284 refcount_init(&job->nbio, iovcnt); in aio_qbio()
1292 buf = job->uiop->uio_iov[i].iov_base; in aio_qbio()
1293 nbytes = job->uiop->uio_iov[i].iov_len; in aio_qbio()
1315 bp->bio_caller1 = job; in aio_qbio()
1498 struct kaiocb *job; in aio_aqueue() local
1523 job = uma_zalloc(aiocb_zone, M_WAITOK | M_ZERO); in aio_aqueue()
1524 knlist_init_mtx(&job->klist, AIO_MTX(ki)); in aio_aqueue()
1526 error = ops->aio_copyin(ujob, job, type); in aio_aqueue()
1530 if (job->uaiocb.aio_nbytes > IOSIZE_MAX) { in aio_aqueue()
1535 if (job->uaiocb.aio_sigevent.sigev_notify != SIGEV_KEVENT && in aio_aqueue()
1536 job->uaiocb.aio_sigevent.sigev_notify != SIGEV_SIGNAL && in aio_aqueue()
1537 job->uaiocb.aio_sigevent.sigev_notify != SIGEV_THREAD_ID && in aio_aqueue()
1538 job->uaiocb.aio_sigevent.sigev_notify != SIGEV_NONE) { in aio_aqueue()
1543 if ((job->uaiocb.aio_sigevent.sigev_notify == SIGEV_SIGNAL || in aio_aqueue()
1544 job->uaiocb.aio_sigevent.sigev_notify == SIGEV_THREAD_ID) && in aio_aqueue()
1545 !_SIG_VALID(job->uaiocb.aio_sigevent.sigev_signo)) { in aio_aqueue()
1552 switch (job->uaiocb.aio_lio_opcode & ~LIO_FOFFSET) { in aio_aqueue()
1558 opcode = job->uaiocb.aio_lio_opcode & ~LIO_FOFFSET; in aio_aqueue()
1559 if ((job->uaiocb.aio_lio_opcode & LIO_FOFFSET) != 0) in aio_aqueue()
1560 job->ioflags |= KAIOCB_IO_FOFFSET; in aio_aqueue()
1567 opcode = job->uaiocb.aio_lio_opcode = type; in aio_aqueue()
1569 ksiginfo_init(&job->ksi); in aio_aqueue()
1572 job->ujob = ujob; in aio_aqueue()
1582 fd = job->uaiocb.aio_fildes; in aio_aqueue()
1614 job->uaiocb.aio_offset < 0 && in aio_aqueue()
1625 job->fd_file = fp; in aio_aqueue()
1628 job->seqno = jobseqno++; in aio_aqueue()
1632 MPASS(job->uiop == &job->uio || job->uiop == NULL); in aio_aqueue()
1633 uma_zfree(aiocb_zone, job); in aio_aqueue()
1637 if (job->uaiocb.aio_sigevent.sigev_notify != SIGEV_KEVENT) in aio_aqueue()
1639 evflags = job->uaiocb.aio_sigevent.sigev_notify_kevent_flags; in aio_aqueue()
1644 kqfd = job->uaiocb.aio_sigevent.sigev_notify_kqueue; in aio_aqueue()
1646 kev.ident = (uintptr_t)job->ujob; in aio_aqueue()
1649 kev.data = (intptr_t)job; in aio_aqueue()
1650 kev.udata = job->uaiocb.aio_sigevent.sigev_value.sival_ptr; in aio_aqueue()
1658 job->uaiocb._aiocb_private.error = EINPROGRESS; in aio_aqueue()
1659 job->userproc = p; in aio_aqueue()
1660 job->cred = crhold(td->td_ucred); in aio_aqueue()
1661 job->jobflags = KAIOCB_QUEUEING; in aio_aqueue()
1662 job->lio = lj; in aio_aqueue()
1666 MPASS(job->uiop != &job->uio && job->uiop != NULL); in aio_aqueue()
1669 job->iov[0].iov_base = (void *)(uintptr_t)job->uaiocb.aio_buf; in aio_aqueue()
1670 job->iov[0].iov_len = job->uaiocb.aio_nbytes; in aio_aqueue()
1671 job->uio.uio_iov = job->iov; in aio_aqueue()
1672 job->uio.uio_iovcnt = 1; in aio_aqueue()
1673 job->uio.uio_resid = job->uaiocb.aio_nbytes; in aio_aqueue()
1674 job->uio.uio_segflg = UIO_USERSPACE; in aio_aqueue()
1675 job->uiop = &job->uio; in aio_aqueue()
1679 job->uiop->uio_rw = UIO_READ; in aio_aqueue()
1682 job->uiop->uio_rw = UIO_WRITE; in aio_aqueue()
1685 job->uiop->uio_offset = job->uaiocb.aio_offset; in aio_aqueue()
1686 job->uiop->uio_td = td; in aio_aqueue()
1689 aio_schedule(job, aio_process_mlock); in aio_aqueue()
1692 error = aio_queue_file(fp, job); in aio_aqueue()
1694 error = fo_aio_queue(fp, job); in aio_aqueue()
1699 job->jobflags &= ~KAIOCB_QUEUEING; in aio_aqueue()
1700 TAILQ_INSERT_TAIL(&ki->kaio_all, job, allist); in aio_aqueue()
1705 if (job->jobflags & KAIOCB_FINISHED) { in aio_aqueue()
1711 aio_bio_done_notify(p, job); in aio_aqueue()
1713 TAILQ_INSERT_TAIL(&ki->kaio_jobqueue, job, plist); in aio_aqueue()
1718 crfree(job->cred); in aio_aqueue()
1722 knlist_delete(&job->klist, curthread, 0); in aio_aqueue()
1724 if (job->uiop != &job->uio) in aio_aqueue()
1725 freeuio(job->uiop); in aio_aqueue()
1726 uma_zfree(aiocb_zone, job); in aio_aqueue()
1733 aio_cancel_daemon_job(struct kaiocb *job) in aio_cancel_daemon_job() argument
1737 if (!aio_cancel_cleared(job)) in aio_cancel_daemon_job()
1738 TAILQ_REMOVE(&aio_jobs, job, list); in aio_cancel_daemon_job()
1740 aio_cancel(job); in aio_cancel_daemon_job()
1744 aio_schedule(struct kaiocb *job, aio_handle_fn_t *func) in aio_schedule() argument
1748 if (!aio_set_cancel_function(job, aio_cancel_daemon_job)) { in aio_schedule()
1750 aio_cancel(job); in aio_schedule()
1753 job->handle_fn = func; in aio_schedule()
1754 TAILQ_INSERT_TAIL(&aio_jobs, job, list); in aio_schedule()
1755 aio_kick_nowait(job->userproc); in aio_schedule()
1760 aio_cancel_sync(struct kaiocb *job) in aio_cancel_sync() argument
1764 ki = job->userproc->p_aioinfo; in aio_cancel_sync()
1766 if (!aio_cancel_cleared(job)) in aio_cancel_sync()
1767 TAILQ_REMOVE(&ki->kaio_syncqueue, job, list); in aio_cancel_sync()
1769 aio_cancel(job); in aio_cancel_sync()
1773 aio_queue_file(struct file *fp, struct kaiocb *job) in aio_queue_file() argument
1782 ki = job->userproc->p_aioinfo; in aio_queue_file()
1783 error = aio_qbio(job->userproc, job); in aio_queue_file()
1801 if (job->uaiocb.aio_lio_opcode & (LIO_WRITE | LIO_READ)) { in aio_queue_file()
1802 aio_schedule(job, aio_process_rw); in aio_queue_file()
1804 } else if (job->uaiocb.aio_lio_opcode & LIO_SYNC) { in aio_queue_file()
1807 if (job2->fd_file == job->fd_file && in aio_queue_file()
1809 job2->seqno < job->seqno) { in aio_queue_file()
1811 job->pending++; in aio_queue_file()
1814 if (job->pending != 0) { in aio_queue_file()
1815 if (!aio_set_cancel_function_locked(job, in aio_queue_file()
1818 aio_cancel(job); in aio_queue_file()
1821 TAILQ_INSERT_TAIL(&ki->kaio_syncqueue, job, list); in aio_queue_file()
1826 aio_schedule(job, aio_process_sync); in aio_queue_file()
1901 struct kaiocb *job; in kern_aio_return() local
1909 TAILQ_FOREACH(job, &ki->kaio_done, plist) { in kern_aio_return()
1910 if (job->ujob == ujob) in kern_aio_return()
1913 if (job != NULL) { in kern_aio_return()
1914 MPASS(job->jobflags & KAIOCB_FINISHED); in kern_aio_return()
1915 status = job->uaiocb._aiocb_private.status; in kern_aio_return()
1916 error = job->uaiocb._aiocb_private.error; in kern_aio_return()
1918 td->td_ru.ru_oublock += job->outblock; in kern_aio_return()
1919 td->td_ru.ru_inblock += job->inblock; in kern_aio_return()
1920 td->td_ru.ru_msgsnd += job->msgsnd; in kern_aio_return()
1921 td->td_ru.ru_msgrcv += job->msgrcv; in kern_aio_return()
1922 aio_free_entry(job); in kern_aio_return()
1950 struct kaiocb *firstjob, *job; in kern_aio_suspend() local
1975 TAILQ_FOREACH(job, &ki->kaio_all, allist) { in kern_aio_suspend()
1977 if (job->ujob == ujoblist[i]) { in kern_aio_suspend()
1979 firstjob = job; in kern_aio_suspend()
1980 if (job->jobflags & KAIOCB_FINISHED) in kern_aio_suspend()
2036 struct kaiocb *job, *jobn; in sys_aio_cancel() local
2062 TAILQ_FOREACH_SAFE(job, &ki->kaio_jobqueue, plist, jobn) { in sys_aio_cancel()
2063 if ((uap->fd == job->uaiocb.aio_fildes) && in sys_aio_cancel()
2065 (uap->aiocbp == job->ujob))) { in sys_aio_cancel()
2066 if (aio_cancel_job(p, ki, job)) { in sys_aio_cancel()
2111 struct kaiocb *job; in kern_aio_error() local
2122 TAILQ_FOREACH(job, &ki->kaio_all, allist) { in kern_aio_error()
2123 if (job->ujob == ujob) { in kern_aio_error()
2124 if (job->jobflags & KAIOCB_FINISHED) in kern_aio_error()
2126 job->uaiocb._aiocb_private.error; in kern_aio_error()
2218 struct aiocb *job; in kern_lio_listio() local
2301 job = acb_list[i]; in kern_lio_listio()
2302 if (job != NULL) { in kern_lio_listio()
2303 error = aio_aqueue(td, job, lj, LIO_NOP, ops); in kern_lio_listio()
2433 struct kaiocb *job = (struct kaiocb *)bp->bio_caller1; in aio_biocleanup() local
2444 ki = job->userproc->p_aioinfo; in aio_biocleanup()
2460 struct kaiocb *job = (struct kaiocb *)bp->bio_caller1; in aio_biowakeup() local
2468 opcode = job->uaiocb.aio_lio_opcode; in aio_biowakeup()
2473 atomic_add_acq_long(&job->nbytes, nbytes); in aio_biowakeup()
2481 atomic_store_int(&job->error, bio_error); in aio_biowakeup()
2483 atomic_add_int(&job->outblock, nblks); in aio_biowakeup()
2485 atomic_add_int(&job->inblock, nblks); in aio_biowakeup()
2487 if (refcount_release(&job->nbio)) { in aio_biowakeup()
2488 bio_error = atomic_load_int(&job->error); in aio_biowakeup()
2490 aio_complete(job, -1, bio_error); in aio_biowakeup()
2492 aio_complete(job, atomic_load_long(&job->nbytes), 0); in aio_biowakeup()
2504 struct kaiocb *job; in kern_aio_waitcomplete() local
2533 job = NULL; in kern_aio_waitcomplete()
2535 while ((job = TAILQ_FIRST(&ki->kaio_done)) == NULL) { in kern_aio_waitcomplete()
2549 if (job != NULL) { in kern_aio_waitcomplete()
2550 MPASS(job->jobflags & KAIOCB_FINISHED); in kern_aio_waitcomplete()
2551 ujob = job->ujob; in kern_aio_waitcomplete()
2552 status = job->uaiocb._aiocb_private.status; in kern_aio_waitcomplete()
2553 error = job->uaiocb._aiocb_private.error; in kern_aio_waitcomplete()
2555 td->td_ru.ru_oublock += job->outblock; in kern_aio_waitcomplete()
2556 td->td_ru.ru_inblock += job->inblock; in kern_aio_waitcomplete()
2557 td->td_ru.ru_msgsnd += job->msgsnd; in kern_aio_waitcomplete()
2558 td->td_ru.ru_msgrcv += job->msgrcv; in kern_aio_waitcomplete()
2559 aio_free_entry(job); in kern_aio_waitcomplete()
2619 struct kaiocb *job; in filt_aioattach() local
2621 job = (struct kaiocb *)(uintptr_t)kn->kn_sdata; in filt_aioattach()
2630 kn->kn_ptr.p_aio = job; in filt_aioattach()
2633 knlist_add(&job->klist, kn, 0); in filt_aioattach()
2656 struct kaiocb *job = kn->kn_ptr.p_aio; in filt_aio() local
2658 kn->kn_data = job->uaiocb._aiocb_private.error; in filt_aio()
2659 if (!(job->jobflags & KAIOCB_FINISHED)) in filt_aio()