Lines Matching defs:ki
276 #define AIO_LOCK(ki) mtx_lock(&(ki)->kaio_mtx)
277 #define AIO_UNLOCK(ki) mtx_unlock(&(ki)->kaio_mtx)
278 #define AIO_LOCK_ASSERT(ki, f) mtx_assert(&(ki)->kaio_mtx, (f))
279 #define AIO_MTX(ki) (&(ki)->kaio_mtx)
428 struct kaioinfo *ki;
430 ki = uma_zalloc(kaio_zone, M_WAITOK);
431 mtx_init(&ki->kaio_mtx, "aiomtx", NULL, MTX_DEF | MTX_NEW);
432 ki->kaio_flags = 0;
433 ki->kaio_active_count = 0;
434 ki->kaio_count = 0;
435 ki->kaio_buffer_count = 0;
436 TAILQ_INIT(&ki->kaio_all);
437 TAILQ_INIT(&ki->kaio_done);
438 TAILQ_INIT(&ki->kaio_jobqueue);
439 TAILQ_INIT(&ki->kaio_liojoblist);
440 TAILQ_INIT(&ki->kaio_syncqueue);
441 TAILQ_INIT(&ki->kaio_syncready);
442 TASK_INIT(&ki->kaio_task, 0, aio_kick_helper, p);
443 TASK_INIT(&ki->kaio_sync_task, 0, aio_schedule_fsync, ki);
446 p->p_aioinfo = ki;
450 mtx_destroy(&ki->kaio_mtx);
451 uma_zfree(kaio_zone, ki);
485 struct kaioinfo *ki;
491 ki = p->p_aioinfo;
492 MPASS(ki != NULL);
494 AIO_LOCK_ASSERT(ki, MA_OWNED);
499 ki->kaio_count--;
500 MPASS(ki->kaio_count >= 0);
502 TAILQ_REMOVE(&ki->kaio_done, job, plist);
503 TAILQ_REMOVE(&ki->kaio_all, job, allist);
511 TAILQ_REMOVE(&ki->kaio_liojoblist, lj, lioj_list);
527 AIO_UNLOCK(ki);
555 AIO_LOCK(ki);
568 aio_cancel_job(struct proc *p, struct kaioinfo *ki, struct kaiocb *job)
573 AIO_LOCK_ASSERT(ki, MA_OWNED);
598 AIO_UNLOCK(ki);
600 AIO_LOCK(ki);
604 TAILQ_REMOVE(&ki->kaio_jobqueue, job, plist);
624 struct kaioinfo *ki;
630 ki = p->p_aioinfo;
631 if (ki == NULL)
634 AIO_LOCK(ki);
635 ki->kaio_flags |= KAIO_RUNDOWN;
643 TAILQ_FOREACH_SAFE(job, &ki->kaio_jobqueue, plist, jobn) {
644 aio_cancel_job(p, ki, job);
648 if (TAILQ_FIRST(&ki->kaio_jobqueue) || ki->kaio_active_count != 0) {
649 ki->kaio_flags |= KAIO_WAKEUP;
650 msleep(&p->p_aioinfo, AIO_MTX(ki), PRIBIO, "aioprn", hz);
655 while ((job = TAILQ_FIRST(&ki->kaio_done)) != NULL)
658 while ((lj = TAILQ_FIRST(&ki->kaio_liojoblist)) != NULL) {
660 TAILQ_REMOVE(&ki->kaio_liojoblist, lj, lioj_list);
671 AIO_UNLOCK(ki);
672 taskqueue_drain(taskqueue_aiod_kick, &ki->kaio_task);
673 taskqueue_drain(taskqueue_aiod_kick, &ki->kaio_sync_task);
674 mtx_destroy(&ki->kaio_mtx);
675 uma_zfree(kaio_zone, ki);
686 struct kaioinfo *ki;
693 ki = userp->p_aioinfo;
695 if (ki->kaio_active_count < max_aio_per_proc) {
701 ki->kaio_active_count++;
866 struct kaioinfo *ki;
871 ki = userp->p_aioinfo;
872 AIO_LOCK_ASSERT(ki, MA_OWNED);
880 TAILQ_INSERT_TAIL(&ki->kaio_done, job, plist);
883 if (ki->kaio_flags & KAIO_RUNDOWN)
910 TAILQ_FOREACH_SAFE(sjob, &ki->kaio_syncqueue, list, sjobn) {
916 TAILQ_REMOVE(&ki->kaio_syncqueue, sjob, list);
919 TAILQ_INSERT_TAIL(&ki->kaio_syncready, sjob, list);
924 &ki->kaio_sync_task);
926 if (ki->kaio_flags & KAIO_WAKEUP) {
927 ki->kaio_flags &= ~KAIO_WAKEUP;
935 struct kaioinfo *ki;
938 ki = context;
939 AIO_LOCK(ki);
940 while (!TAILQ_EMPTY(&ki->kaio_syncready)) {
941 job = TAILQ_FIRST(&ki->kaio_syncready);
942 TAILQ_REMOVE(&ki->kaio_syncready, job, list);
943 AIO_UNLOCK(ki);
945 AIO_LOCK(ki);
947 AIO_UNLOCK(ki);
980 struct kaioinfo *ki;
983 ki = job->userproc->p_aioinfo;
984 AIO_LOCK(ki);
986 AIO_UNLOCK(ki);
1004 struct kaioinfo *ki;
1007 ki = job->userproc->p_aioinfo;
1008 AIO_LOCK(ki);
1010 AIO_UNLOCK(ki);
1017 struct kaioinfo *ki;
1024 ki = userp->p_aioinfo;
1026 AIO_LOCK(ki);
1031 TAILQ_REMOVE(&ki->kaio_jobqueue, job, plist);
1034 AIO_UNLOCK(ki);
1060 struct kaioinfo *ki;
1106 ki = job->userproc->p_aioinfo;
1111 ki->kaio_active_count--;
1206 struct kaioinfo *ki;
1257 ki = p->p_aioinfo;
1262 AIO_LOCK(ki);
1263 if (ki->kaio_buffer_count + iovcnt > max_buf_aio) {
1264 AIO_UNLOCK(ki);
1268 ki->kaio_buffer_count += iovcnt;
1269 AIO_UNLOCK(ki);
1488 struct kaioinfo *ki;
1498 ki = p->p_aioinfo;
1504 ki->kaio_count >= max_aio_queue_per_proc) {
1510 knlist_init_mtx(&job->klist, AIO_MTX(ki));
1684 AIO_LOCK(ki);
1686 TAILQ_INSERT_TAIL(&ki->kaio_all, job, allist);
1687 ki->kaio_count++;
1699 TAILQ_INSERT_TAIL(&ki->kaio_jobqueue, job, plist);
1700 AIO_UNLOCK(ki);
1748 struct kaioinfo *ki;
1750 ki = job->userproc->p_aioinfo;
1751 AIO_LOCK(ki);
1753 TAILQ_REMOVE(&ki->kaio_syncqueue, job, list);
1754 AIO_UNLOCK(ki);
1761 struct kaioinfo *ki;
1768 ki = job->userproc->p_aioinfo;
1791 AIO_LOCK(ki);
1792 TAILQ_FOREACH(job2, &ki->kaio_jobqueue, plist) {
1803 AIO_UNLOCK(ki);
1807 TAILQ_INSERT_TAIL(&ki->kaio_syncqueue, job, list);
1808 AIO_UNLOCK(ki);
1811 AIO_UNLOCK(ki);
1823 struct kaioinfo *ki = userp->p_aioinfo;
1832 ki->kaio_active_count + num_aio_resv_start < max_aio_per_proc) {
1833 taskqueue_enqueue(taskqueue_aiod_kick, &ki->kaio_task);
1840 struct kaioinfo *ki = userp->p_aioinfo;
1851 ki->kaio_active_count + num_aio_resv_start < max_aio_per_proc) {
1888 struct kaioinfo *ki;
1891 ki = p->p_aioinfo;
1892 if (ki == NULL)
1894 AIO_LOCK(ki);
1895 TAILQ_FOREACH(job, &ki->kaio_done, plist) {
1909 AIO_UNLOCK(ki);
1914 AIO_UNLOCK(ki);
1935 struct kaioinfo *ki;
1950 ki = p->p_aioinfo;
1951 if (ki == NULL)
1957 AIO_LOCK(ki);
1961 TAILQ_FOREACH(job, &ki->kaio_all, allist) {
1975 ki->kaio_flags |= KAIO_WAKEUP;
1976 error = msleep(&p->p_aioinfo, AIO_MTX(ki), PRIBIO | PCATCH,
1984 AIO_UNLOCK(ki);
2021 struct kaioinfo *ki;
2034 ki = p->p_aioinfo;
2035 if (ki == NULL)
2047 AIO_LOCK(ki);
2048 TAILQ_FOREACH_SAFE(job, &ki->kaio_jobqueue, plist, jobn) {
2052 if (aio_cancel_job(p, ki, job)) {
2061 AIO_UNLOCK(ki);
2098 struct kaioinfo *ki;
2101 ki = p->p_aioinfo;
2102 if (ki == NULL) {
2107 AIO_LOCK(ki);
2108 TAILQ_FOREACH(job, &ki->kaio_all, allist) {
2115 AIO_UNLOCK(ki);
2119 AIO_UNLOCK(ki);
2205 struct kaioinfo *ki;
2221 ki = p->p_aioinfo;
2228 knlist_init_mtx(&lj->klist, AIO_MTX(ki));
2267 AIO_LOCK(ki);
2268 TAILQ_INSERT_TAIL(&ki->kaio_liojoblist, lj, lioj_list);
2276 AIO_UNLOCK(ki);
2295 AIO_LOCK(ki);
2298 ki->kaio_flags |= KAIO_WAKEUP;
2299 error = msleep(&p->p_aioinfo, AIO_MTX(ki),
2324 TAILQ_REMOVE(&ki->kaio_liojoblist, lj, lioj_list);
2329 AIO_UNLOCK(ki);
2332 AIO_UNLOCK(ki);
2417 struct kaioinfo *ki;
2427 ki = job->userproc->p_aioinfo;
2428 AIO_LOCK(ki);
2429 ki->kaio_buffer_count--;
2430 AIO_UNLOCK(ki);
2486 struct kaioinfo *ki;
2510 ki = p->p_aioinfo;
2514 AIO_LOCK(ki);
2515 while ((job = TAILQ_FIRST(&ki->kaio_done)) == NULL) {
2520 ki->kaio_flags |= KAIO_WAKEUP;
2521 error = msleep(&p->p_aioinfo, AIO_MTX(ki), PRIBIO | PCATCH,
2540 AIO_UNLOCK(ki);
2545 AIO_UNLOCK(ki);