Lines Matching refs:aiop

97     aio_req_t *reqlist, aio_t *aiop, model_t model);
98 static int aio_reqlist_concat(aio_t *aiop, aio_req_t **reqlist, int max);
399 aio_t *aiop;
401 aiop = curproc->p_aio;
402 if (aiop == NULL)
405 mutex_enter(&aiop->aio_mutex);
406 aiop->aio_notifycnt++;
407 cv_broadcast(&aiop->aio_waitcv);
408 mutex_exit(&aiop->aio_mutex);
526 aio_t *aiop;
534 aiop = curproc->p_aio;
535 if (aiop == NULL)
551 mutex_enter(&aiop->aio_mutex);
554 if (aiop->aio_pollq) {
555 mutex_exit(&aiop->aio_mutex);
557 mutex_enter(&aiop->aio_mutex);
564 if (aiop->aio_notifycnt > 0) {
565 aiop->aio_notifycnt--;
570 if (aiop->aio_outstanding == 0 && dontblockflg) {
575 status = cv_waituntil_sig(&aiop->aio_waitcv,
576 &aiop->aio_mutex, rqtp, timecheck);
589 mutex_exit(&aiop->aio_mutex);
593 mutex_enter(&aiop->aio_mutex);
594 aio_req_free(aiop, reqp);
595 mutex_exit(&aiop->aio_mutex);
611 aio_t *aiop;
624 aiop = curproc->p_aio;
625 if (aiop == NULL || nent == 0 || nent > _AIO_LISTIO_MAX)
628 if (aiop->aio_outstanding == 0)
670 mutex_enter(&aiop->aio_mutex);
672 while (aiop->aio_flags & AIO_WAITN) {
674 mutex_exit(&aiop->aio_mutex);
679 aiop->aio_flags |= AIO_WAITN_PENDING;
680 if (!cv_wait_sig(&aiop->aio_waitncv, &aiop->aio_mutex)) {
681 mutex_exit(&aiop->aio_mutex);
696 if (iocbsz > aiop->aio_iocbsz && aiop->aio_iocb != NULL) {
697 kmem_free(aiop->aio_iocb, aiop->aio_iocbsz);
698 aiop->aio_iocb = NULL;
701 if (aiop->aio_iocb == NULL) {
704 mutex_exit(&aiop->aio_mutex);
707 aiop->aio_iocb = (aiocb_t **)iocblist;
708 aiop->aio_iocbsz = iocbsz;
710 iocblist = (char *)aiop->aio_iocb;
713 aiop->aio_waitncnt = waitcnt;
714 aiop->aio_flags |= AIO_WAITN;
718 if (aiop->aio_pollq) {
719 mutex_exit(&aiop->aio_mutex);
721 mutex_enter(&aiop->aio_mutex);
725 if (aiop->aio_doneq) {
726 cnt += aio_reqlist_concat(aiop, &reqlist, nent - cnt);
727 aiop->aio_waitncnt = waitcnt - cnt;
731 if (aiop->aio_notifycnt > 0) {
732 aiop->aio_notifycnt--;
745 if ((cnt >= waitcnt) || (cnt > 0 && aiop->aio_pending == 0 &&
746 aiop->aio_doneq == NULL)) {
752 int rval = cv_waituntil_sig(&aiop->aio_waitcv,
753 &aiop->aio_mutex, rqtp, timecheck);
766 mutex_exit(&aiop->aio_mutex);
771 aiop, model);
786 mutex_enter(&aiop->aio_mutex);
787 aiop->aio_flags &= ~AIO_WAITN;
788 if (aiop->aio_flags & AIO_WAITN_PENDING) {
789 aiop->aio_flags &= ~AIO_WAITN_PENDING;
790 cv_signal(&aiop->aio_waitncv);
792 mutex_exit(&aiop->aio_mutex);
810 aio_t *aiop,
822 mutex_enter(&aiop->aio_mutex);
823 aio_req_free(aiop, reqp);
824 mutex_exit(&aiop->aio_mutex);
835 mutex_enter(&aiop->aio_mutex);
836 aio_req_free(aiop, reqp);
837 mutex_exit(&aiop->aio_mutex);
853 aio_reqlist_concat(aio_t *aiop, aio_req_t **reqlist, int max)
859 q2 = aiop->aio_doneq;
873 aiop->aio_doneq = NULL;
883 aiop->aio_doneq = q2work;
902 aio_t *aiop;
920 aiop = curproc->p_aio;
921 if (aiop == NULL || nent <= 0 || nent > _AIO_LISTIO_MAX)
941 if (!blocking && (aiop->aio_pollq == NULL) &&
942 (aiop->aio_doneq == NULL)) {
967 mutex_enter(&aiop->aio_cleanupq_mutex);
968 mutex_enter(&aiop->aio_mutex);
971 if (aiop->aio_pollq) {
972 mutex_exit(&aiop->aio_mutex);
973 mutex_exit(&aiop->aio_cleanupq_mutex);
975 mutex_enter(&aiop->aio_cleanupq_mutex);
976 mutex_enter(&aiop->aio_mutex);
979 if (aiop->aio_doneq) {
1023 if (aiop->aio_doneq == NULL)
1029 if (aiop->aio_notifycnt > 0) {
1035 aiop->aio_notifycnt--;
1041 if (aiop->aio_outstanding == 0) {
1050 mutex_exit(&aiop->aio_cleanupq_mutex);
1051 rv = cv_waituntil_sig(&aiop->aio_waitcv,
1052 &aiop->aio_mutex, rqtp, timecheck);
1057 mutex_exit(&aiop->aio_mutex);
1058 mutex_enter(&aiop->aio_cleanupq_mutex);
1059 mutex_enter(&aiop->aio_mutex);
1071 mutex_exit(&aiop->aio_mutex);
1072 mutex_exit(&aiop->aio_cleanupq_mutex);
1077 mutex_enter(&aiop->aio_mutex);
1078 aio_req_free(aiop, reqp);
1079 mutex_exit(&aiop->aio_mutex);
1094 aio_t *aiop;
1096 if ((aiop = p->p_aio) == NULL) {
1097 aiop = aio_aiop_alloc();
1098 p->p_aio = aiop;
1101 if (aiop == NULL)
1123 aio_t *aiop;
1129 if ((aiop = p->p_aio) == NULL)
1132 first = aiop->aio_ok;
1133 if (aiop->aio_ok == 0)
1134 aiop->aio_ok = 1;
1138 return (aio_cleanup_thread(aiop));
1206 aio_t *aiop;
1230 aiop = curproc->p_aio;
1231 if (aiop == NULL || nent <= 0 || nent > _AIO_LISTIO_MAX)
1277 mutex_enter(&aiop->aio_mutex);
1279 mutex_exit(&aiop->aio_mutex);
1327 mutex_enter(&aiop->aio_mutex);
1330 mutex_exit(&aiop->aio_mutex);
1340 mutex_enter(&aiop->aio_mutex);
1343 mutex_exit(&aiop->aio_mutex);
1352 mutex_enter(&aiop->aio_mutex);
1355 mutex_exit(&aiop->aio_mutex);
1368 mutex_enter(&aiop->aio_mutex);
1371 mutex_exit(&aiop->aio_mutex);
1391 mutex_enter(&aiop->aio_mutex);
1394 mutex_exit(&aiop->aio_mutex);
1403 error = aio_req_setup(&reqp, aiop, aiocb,
1409 mutex_enter(&aiop->aio_mutex);
1412 mutex_exit(&aiop->aio_mutex);
1490 mutex_enter(&aiop->aio_mutex);
1493 mutex_exit(&aiop->aio_mutex);
1515 mutex_enter(&aiop->aio_mutex);
1517 if (!cv_wait_sig(&head->lio_notify, &aiop->aio_mutex)) {
1518 mutex_exit(&aiop->aio_mutex);
1523 mutex_exit(&aiop->aio_mutex);
1524 alio_cleanup(aiop, (aiocb_t **)cbplist, nent, AIO_64);
1559 aio_t *aiop;
1572 aiop = curproc->p_aio;
1573 if (aiop == NULL || nent <= 0 || nent > _AIO_LISTIO_MAX)
1658 mutex_enter(&aiop->aio_mutex);
1660 if (!cv_wait_sig(&head->lio_notify, &aiop->aio_mutex)) {
1661 mutex_exit(&aiop->aio_mutex);
1666 mutex_exit(&aiop->aio_mutex);
1667 alio_cleanup(aiop, (aiocb_t **)cbplist, nent, run_mode);
1677 aio_t *aiop;
1682 aiop = curproc->p_aio;
1683 if (aiop == NULL)
1688 bucket = &aiop->aio_hash[index];
1729 alio_cleanup(aio_t *aiop, aiocb_t **cbp, int nent, int run_mode)
1770 mutex_enter(&aiop->aio_cleanupq_mutex);
1771 mutex_enter(&aiop->aio_mutex);
1773 mutex_exit(&aiop->aio_mutex);
1774 mutex_exit(&aiop->aio_cleanupq_mutex);
1778 mutex_enter(&aiop->aio_mutex);
1779 aio_req_free(aiop, reqp);
1780 mutex_exit(&aiop->aio_mutex);
1792 aio_t *aiop;
1796 aiop = curproc->p_aio;
1797 if (aiop == NULL || cb == NULL)
1821 mutex_enter(&aiop->aio_cleanupq_mutex);
1822 mutex_enter(&aiop->aio_mutex);
1824 mutex_exit(&aiop->aio_mutex);
1825 mutex_exit(&aiop->aio_cleanupq_mutex);
1829 mutex_enter(&aiop->aio_mutex);
1830 aio_req_free(aiop, reqp);
1831 mutex_exit(&aiop->aio_mutex);
1853 aio_t *aiop;
1868 aiop = curproc->p_aio;
1869 if (aiop == NULL)
1872 if (aiop->aio_outstanding == 0) {
1877 mutex_enter(&aiop->aio_mutex);
1897 bucket = &aiop->aio_hash[index];
1901 mutex_exit(&aiop->aio_mutex);
1905 mutex_exit(&aiop->aio_mutex);
1910 mutex_exit(&aiop->aio_mutex);
1916 bucket = &aiop->aio_hash[index];
1920 mutex_exit(&aiop->aio_mutex);
1927 mutex_exit(&aiop->aio_mutex);
1949 aio_t *aiop;
1957 aiop = curproc->p_aio;
1958 if (aiop == NULL)
1985 error = aio_req_setup(&reqp, aiop, &aiocb, resultp, vp, 1);
1992 error = aio_req_setupLF(&reqp, aiop, &aiocb64, resultp, vp, 1);
2022 mutex_enter(&aiop->aio_mutex);
2023 aio_req_free(aiop, reqp);
2024 aiop->aio_pending--;
2025 if (aiop->aio_flags & AIO_REQ_BLOCK)
2026 cv_signal(&aiop->aio_cleanupcv);
2027 mutex_exit(&aiop->aio_mutex);
2056 aio_t *aiop;
2065 aiop = curproc->p_aio;
2066 if (aiop == NULL)
2175 error = aio_req_setupLF(&reqp, aiop, &aiocb64, resultp, vp, 0);
2177 error = aio_req_setup(&reqp, aiop, &aiocb, resultp, vp, 0);
2223 mutex_enter(&aiop->aio_mutex);
2225 aio_deq(&aiop->aio_portpending, reqp);
2226 aio_req_free(aiop, reqp);
2227 aiop->aio_pending--;
2228 if (aiop->aio_flags & AIO_REQ_BLOCK)
2229 cv_signal(&aiop->aio_cleanupcv);
2230 mutex_exit(&aiop->aio_mutex);
2244 aio_t *aiop = curproc->p_aio;
2246 if (aiop == NULL)
2249 mutex_enter(&aiop->aio_mutex);
2251 aio_deq(&aiop->aio_portpending, reqp);
2252 aiop->aio_pending--;
2262 aio_req_free(aiop, reqp);
2263 if (aiop->aio_flags & AIO_REQ_BLOCK)
2264 cv_signal(&aiop->aio_cleanupcv);
2265 mutex_exit(&aiop->aio_mutex);
2278 aio_t *aiop = curproc->p_aio;
2281 ASSERT(MUTEX_HELD(&aiop->aio_cleanupq_mutex));
2282 ASSERT(MUTEX_HELD(&aiop->aio_mutex));
2286 bucket = &aiop->aio_hash[index];
2314 aio_t *aiop = curproc->p_aio;
2317 ASSERT(MUTEX_HELD(&aiop->aio_cleanupq_mutex));
2318 ASSERT(MUTEX_HELD(&aiop->aio_mutex));
2321 bucket = &aiop->aio_hash[index];
2341 aio_t *aiop = curproc->p_aio;
2343 ASSERT(MUTEX_HELD(&aiop->aio_mutex));
2349 if (reqp == aiop->aio_doneq) {
2350 aiop->aio_doneq = NULL;
2352 ASSERT(reqp == aiop->aio_cleanupq);
2353 aiop->aio_cleanupq = NULL;
2362 if (reqp == aiop->aio_doneq)
2363 aiop->aio_doneq = reqp->aio_req_next;
2365 if (reqp == aiop->aio_cleanupq)
2366 aiop->aio_cleanupq = reqp->aio_req_next;
2371 } else if ((reqp = aiop->aio_doneq) != NULL) {
2375 aiop->aio_doneq = NULL;
2379 aiop->aio_doneq = reqp->aio_req_next;
2385 if (aiop->aio_doneq == NULL && (aiop->aio_flags & AIO_WAITN))
2386 cv_broadcast(&aiop->aio_waitcv);
2393 aio_t *aiop,
2422 mutex_enter(&aiop->aio_mutex);
2424 if (aiop->aio_flags & AIO_REQ_BLOCK) {
2425 mutex_exit(&aiop->aio_mutex);
2435 mutex_exit(&aiop->aio_mutex);
2440 aiop->aio_pending++;
2441 aiop->aio_outstanding++;
2446 aiop->aio_flags |= AIO_SOLARIS_REQ;
2450 aio_enq(&aiop->aio_portpending, reqp, 0);
2451 mutex_exit(&aiop->aio_mutex);
2475 aio_t *aiop;
2479 aiop = kmem_zalloc(sizeof (struct aio), KM_NOSLEEP);
2480 if (aiop) {
2481 mutex_init(&aiop->aio_mutex, NULL, MUTEX_DEFAULT, NULL);
2482 mutex_init(&aiop->aio_cleanupq_mutex, NULL, MUTEX_DEFAULT,
2484 mutex_init(&aiop->aio_portq_mutex, NULL, MUTEX_DEFAULT, NULL);
2486 return (aiop);
2496 aio_t *aiop = curproc->p_aio;
2498 ASSERT(MUTEX_HELD(&aiop->aio_mutex));
2500 if ((reqp = aiop->aio_free) != NULL) {
2501 aiop->aio_free = reqp->aio_req_next;
2521 if (aio_hash_insert(reqp, aiop)) {
2522 reqp->aio_req_next = aiop->aio_free;
2523 aiop->aio_free = reqp;
2537 aio_t *aiop = curproc->p_aio;
2539 ASSERT(MUTEX_HELD(&aiop->aio_mutex));
2541 if ((liop = aiop->aio_lio_free) != NULL) {
2542 aiop->aio_lio_free = liop->lio_next;
2573 aio_cleanup_thread(aio_t *aiop)
2595 mutex_enter(&aiop->aio_mutex);
2596 if ((aiop->aio_flags & AIO_CLEANUP) == 0) {
2597 aiop->aio_flags |= AIO_CLEANUP;
2599 if (aiop->aio_rqclnup) {
2600 aiop->aio_rqclnup = 0;
2604 if (aiop->aio_doneq) {
2605 aio_req_t *doneqhead = aiop->aio_doneq;
2606 aiop->aio_doneq = NULL;
2607 aio_cleanupq_concat(aiop, doneqhead, AIO_DONEQ);
2610 mutex_exit(&aiop->aio_mutex);
2616 cvp = &aiop->aio_cleanupcv;
2617 mutex_enter(&aiop->aio_mutex);
2619 if (aiop->aio_pollq != NULL || aiop->aio_cleanupq != NULL ||
2620 aiop->aio_notifyq != NULL ||
2621 aiop->aio_portcleanupq != NULL) {
2622 mutex_exit(&aiop->aio_mutex);
2650 (aiop->aio_pending == 0))) {
2651 aiop->aio_flags &= ~(AIO_CLEANUP | AIO_CLEANUP_PORT);
2655 mutex_exit(&aiop->aio_mutex);
2676 mutex_enter(&aiop->aio_mutex);
2677 aiop->aio_flags |= AIO_REQ_BLOCK;
2678 while (aiop->aio_pending != 0)
2679 cv_wait(&aiop->aio_cleanupcv,
2680 &aiop->aio_mutex);
2681 mutex_exit(&aiop->aio_mutex);
2725 if (aiop->aio_rqclnup &&
2726 (aiop->aio_flags & AIO_CLEANUP) == 0)
2731 if (aiop->aio_outstanding != 0)
2750 aio_t *aiop)
2758 nextp = &aiop->aio_hash[index];
2908 aio_t *aiop;
2935 aiop = curproc->p_aio;
2936 if (aiop == NULL || nent <= 0 || nent > _AIO_LISTIO_MAX)
2985 mutex_enter(&aiop->aio_mutex);
2987 mutex_exit(&aiop->aio_mutex);
3036 mutex_enter(&aiop->aio_mutex);
3039 mutex_exit(&aiop->aio_mutex);
3049 mutex_enter(&aiop->aio_mutex);
3052 mutex_exit(&aiop->aio_mutex);
3061 mutex_enter(&aiop->aio_mutex);
3064 mutex_exit(&aiop->aio_mutex);
3077 mutex_enter(&aiop->aio_mutex);
3080 mutex_exit(&aiop->aio_mutex);
3100 mutex_enter(&aiop->aio_mutex);
3103 mutex_exit(&aiop->aio_mutex);
3114 error = aio_req_setup(&reqp, aiop, &aiocb_n,
3117 error = aio_req_setupLF(&reqp, aiop, aiocb,
3124 mutex_enter(&aiop->aio_mutex);
3127 mutex_exit(&aiop->aio_mutex);
3205 mutex_enter(&aiop->aio_mutex);
3208 mutex_exit(&aiop->aio_mutex);
3230 mutex_enter(&aiop->aio_mutex);
3232 if (!cv_wait_sig(&head->lio_notify, &aiop->aio_mutex)) {
3233 mutex_exit(&aiop->aio_mutex);
3238 mutex_exit(&aiop->aio_mutex);
3239 alio_cleanup(aiop, (aiocb_t **)cbplist, nent, AIO_LARGEFILE);
3290 aio_t *aiop,
3319 mutex_enter(&aiop->aio_mutex);
3321 if (aiop->aio_flags & AIO_REQ_BLOCK) {
3322 mutex_exit(&aiop->aio_mutex);
3332 mutex_exit(&aiop->aio_mutex);
3337 aiop->aio_pending++;
3338 aiop->aio_outstanding++;
3343 aiop->aio_flags |= AIO_SOLARIS_REQ;
3347 aio_enq(&aiop->aio_portpending, reqp, 0);
3348 mutex_exit(&aiop->aio_mutex);
3383 aio_t *aiop;
3418 aiop = curproc->p_aio;
3419 if (aiop == NULL || nent <= 0 || nent > _AIO_LISTIO_MAX)
3470 mutex_enter(&aiop->aio_mutex);
3472 mutex_exit(&aiop->aio_mutex);
3527 mutex_enter(&aiop->aio_mutex);
3530 mutex_exit(&aiop->aio_mutex);
3546 mutex_enter(&aiop->aio_mutex);
3549 mutex_exit(&aiop->aio_mutex);
3558 mutex_enter(&aiop->aio_mutex);
3561 mutex_exit(&aiop->aio_mutex);
3574 mutex_enter(&aiop->aio_mutex);
3577 mutex_exit(&aiop->aio_mutex);
3597 mutex_enter(&aiop->aio_mutex);
3600 mutex_exit(&aiop->aio_mutex);
3609 error = aio_req_setup(&reqp, aiop, aiocb,
3615 mutex_enter(&aiop->aio_mutex);
3618 mutex_exit(&aiop->aio_mutex);
3710 mutex_enter(&aiop->aio_mutex);
3713 mutex_exit(&aiop->aio_mutex);
3735 mutex_enter(&aiop->aio_mutex);
3737 if (!cv_wait_sig(&head->lio_notify, &aiop->aio_mutex)) {
3738 mutex_exit(&aiop->aio_mutex);
3743 mutex_exit(&aiop->aio_mutex);
3744 alio_cleanup(aiop, (aiocb_t **)cbplist, nent, AIO_32);
3808 aio_t *aiop = curproc->p_aio;
3819 mutex_enter(&aiop->aio_portq_mutex);
3821 aio_req_remove_portq(aiop, reqp); /* remove request from portq */
3822 mutex_exit(&aiop->aio_portq_mutex);
3824 mutex_enter(&aiop->aio_mutex);
3826 aio_req_free_port(aiop, reqp); /* back to free list */
3827 mutex_exit(&aiop->aio_mutex);
3834 aio_req_free_port(aiop, reqp); /* request struct back to free list */
3835 mutex_exit(&aiop->aio_mutex);