Lines Matching refs:aiop
190 aio_t *aiop; in aio_done() local
219 aiop = p->p_aio; in aio_done()
220 ASSERT(aiop != NULL); in aio_done()
222 mutex_enter(&aiop->aio_portq_mutex); in aio_done()
223 mutex_enter(&aiop->aio_mutex); in aio_done()
224 ASSERT(aiop->aio_pending > 0); in aio_done()
226 aiop->aio_pending--; in aio_done()
236 portevpend = --aiop->aio_portpendcnt; in aio_done()
237 aio_deq(&aiop->aio_portpending, reqp); in aio_done()
238 aio_enq(&aiop->aio_portq, reqp, 0); in aio_done()
239 mutex_exit(&aiop->aio_mutex); in aio_done()
240 mutex_exit(&aiop->aio_portq_mutex); in aio_done()
243 cv_broadcast(&aiop->aio_portcv); in aio_done()
247 if (aiop->aio_flags & AIO_CLEANUP) { in aio_done()
253 aio_deq(&aiop->aio_portpending, reqp); in aio_done()
254 aio_enq(&aiop->aio_portcleanupq, reqp, 0); in aio_done()
255 cv_signal(&aiop->aio_cleanupcv); in aio_done()
257 mutex_exit(&aiop->aio_mutex); in aio_done()
258 mutex_exit(&aiop->aio_portq_mutex); in aio_done()
262 aio_deq(&aiop->aio_portpending, reqp); in aio_done()
263 aio_enq(&aiop->aio_portq, reqp, 0); in aio_done()
273 cleanupqflag = (aiop->aio_flags & AIO_CLEANUP); in aio_done()
289 aio_enq(&aiop->aio_pollq, reqp, AIO_POLLQ); in aio_done()
291 aio_enq(&aiop->aio_notifyq, reqp, AIO_NOTIFYQ); in aio_done()
293 aio_enq(&aiop->aio_cleanupq, reqp, in aio_done()
297 cv_signal(&aiop->aio_cleanupcv); in aio_done()
299 mutex_exit(&aiop->aio_mutex); in aio_done()
300 mutex_exit(&aiop->aio_portq_mutex); in aio_done()
304 aiop->aio_flags |= AIO_DONE_ACTIVE; in aio_done()
305 mutex_exit(&aiop->aio_mutex); in aio_done()
306 mutex_exit(&aiop->aio_portq_mutex); in aio_done()
314 mutex_enter(&aiop->aio_mutex); in aio_done()
316 cv_broadcast(&aiop->aio_waitcv); in aio_done()
319 if (aiop->aio_flags & AIO_CLEANUP) in aio_done()
320 cv_signal(&aiop->aio_cleanupcv); in aio_done()
321 aiop->aio_flags &= ~AIO_DONE_ACTIVE; in aio_done()
322 mutex_exit(&aiop->aio_mutex); in aio_done()
335 aio_enq(&aiop->aio_doneq, reqp, AIO_DONEQ); in aio_done()
364 if (aiop->aio_flags & AIO_WAITN) { in aio_done()
365 if (aiop->aio_waitncnt > 0) in aio_done()
366 aiop->aio_waitncnt--; in aio_done()
367 if (aiop->aio_pending == 0 || in aio_done()
368 aiop->aio_waitncnt == 0) in aio_done()
369 cv_broadcast(&aiop->aio_waitcv); in aio_done()
371 cv_broadcast(&aiop->aio_waitcv); in aio_done()
387 mutex_exit(&aiop->aio_mutex); in aio_done()
388 mutex_exit(&aiop->aio_portq_mutex); in aio_done()
491 aio_hash_delete(aio_t *aiop, struct aio_req_t *reqp) in aio_hash_delete() argument
499 nextp = (aiop->aio_hash + index); in aio_hash_delete()
513 aio_lio_free(aio_t *aiop, aio_lio_t *head) in aio_lio_free() argument
515 ASSERT(MUTEX_HELD(&aiop->aio_mutex)); in aio_lio_free()
519 head->lio_next = aiop->aio_lio_free; in aio_lio_free()
520 aiop->aio_lio_free = head; in aio_lio_free()
527 aio_req_free(aio_t *aiop, aio_req_t *reqp) in aio_req_free() argument
531 ASSERT(MUTEX_HELD(&aiop->aio_mutex)); in aio_req_free()
540 aio_lio_free(aiop, liop); in aio_req_free()
547 reqp->aio_req_next = aiop->aio_free; in aio_req_free()
549 aiop->aio_free = reqp; in aio_req_free()
550 aiop->aio_outstanding--; in aio_req_free()
551 if (aiop->aio_outstanding == 0) in aio_req_free()
552 cv_broadcast(&aiop->aio_waitcv); in aio_req_free()
553 aio_hash_delete(aiop, reqp); in aio_req_free()
560 aio_req_free_port(aio_t *aiop, aio_req_t *reqp) in aio_req_free_port() argument
562 ASSERT(MUTEX_HELD(&aiop->aio_mutex)); in aio_req_free_port()
564 reqp->aio_req_next = aiop->aio_free; in aio_req_free_port()
566 aiop->aio_free = reqp; in aio_req_free_port()
567 aiop->aio_outstanding--; in aio_req_free_port()
568 aio_hash_delete(aiop, reqp); in aio_req_free_port()
652 aio_cleanupq_concat(aio_t *aiop, aio_req_t *q2, int qflg) in aio_cleanupq_concat() argument
663 cleanupqhead = aiop->aio_cleanupq; in aio_cleanupq_concat()
665 aiop->aio_cleanupq = q2; in aio_cleanupq_concat()
681 aio_t *aiop = curproc->p_aio; in aio_cleanup() local
690 ASSERT(aiop != NULL); in aio_cleanup()
701 mutex_enter(&aiop->aio_cleanupq_mutex); in aio_cleanup()
706 mutex_enter(&aiop->aio_mutex); in aio_cleanup()
707 if ((cleanupqhead = aiop->aio_cleanupq) != NULL) { in aio_cleanup()
708 aiop->aio_cleanupq = NULL; in aio_cleanup()
711 if ((notifyqhead = aiop->aio_notifyq) != NULL) { in aio_cleanup()
712 aiop->aio_notifyq = NULL; in aio_cleanup()
715 if ((pollqhead = aiop->aio_pollq) != NULL) { in aio_cleanup()
716 aiop->aio_pollq = NULL; in aio_cleanup()
720 if ((portq = aiop->aio_portq) != NULL) in aio_cleanup()
723 if ((cleanupport = aiop->aio_portcleanupq) != NULL) { in aio_cleanup()
724 aiop->aio_portcleanupq = NULL; in aio_cleanup()
728 mutex_exit(&aiop->aio_mutex); in aio_cleanup()
736 mutex_exit(&aiop->aio_cleanupq_mutex); in aio_cleanup()
744 signalled = aio_cleanup_cleanupq(aiop, cleanupqhead, exitflg); in aio_cleanup()
745 mutex_exit(&aiop->aio_cleanupq_mutex); in aio_cleanup()
747 signalled = aio_cleanup_notifyq(aiop, notifyqhead, exitflg); in aio_cleanup()
749 aio_cleanup_pollq(aiop, pollqhead, exitflg); in aio_cleanup()
751 aio_cleanup_portq(aiop, cleanupport, exitflg); in aio_cleanup()
765 mutex_enter(&aiop->aio_mutex); in aio_cleanup()
770 if (!(aiop->aio_flags & AIO_SOLARIS_REQ)) in aio_cleanup()
772 cv_broadcast(&aiop->aio_waitcv); in aio_cleanup()
773 mutex_exit(&aiop->aio_mutex); in aio_cleanup()
790 aio_cleanup_portq(aio_t *aiop, aio_req_t *cleanupq, int exitflag) in aio_cleanup_portq() argument
798 if (exitflag || ((aiop->aio_flags & AIO_CLEANUP_PORT) == 0)) { in aio_cleanup_portq()
799 mutex_enter(&aiop->aio_mutex); in aio_cleanup_portq()
800 if (aiop->aio_flags & AIO_CLEANUP) in aio_cleanup_portq()
801 aiop->aio_flags |= AIO_CLEANUP_PORT; in aio_cleanup_portq()
802 mutex_exit(&aiop->aio_mutex); in aio_cleanup_portq()
811 mutex_enter(&aiop->aio_portq_mutex); in aio_cleanup_portq()
812 headp = aiop->aio_portq; in aio_cleanup_portq()
813 aiop->aio_portq = NULL; in aio_cleanup_portq()
814 mutex_exit(&aiop->aio_portq_mutex); in aio_cleanup_portq()
820 mutex_enter(&aiop->aio_mutex); in aio_cleanup_portq()
821 aio_req_free(aiop, reqp); in aio_cleanup_portq()
822 mutex_exit(&aiop->aio_mutex); in aio_cleanup_portq()
831 mutex_enter(&aiop->aio_portq_mutex); in aio_cleanup_portq()
832 if ((newq = aiop->aio_portq) != NULL) { in aio_cleanup_portq()
841 aiop->aio_portq = headp; in aio_cleanup_portq()
842 cv_broadcast(&aiop->aio_portcv); in aio_cleanup_portq()
843 mutex_exit(&aiop->aio_portq_mutex); in aio_cleanup_portq()
854 mutex_enter(&aiop->aio_mutex); in aio_cleanup_portq()
855 aio_req_free(aiop, reqp); in aio_cleanup_portq()
856 mutex_exit(&aiop->aio_mutex); in aio_cleanup_portq()
858 mutex_enter(&aiop->aio_portq_mutex); in aio_cleanup_portq()
859 aio_enq(&aiop->aio_portq, reqp, 0); in aio_cleanup_portq()
860 mutex_exit(&aiop->aio_portq_mutex); in aio_cleanup_portq()
865 mutex_enter(&aiop->aio_mutex); in aio_cleanup_portq()
874 mutex_exit(&aiop->aio_mutex); in aio_cleanup_portq()
886 aio_cleanup_cleanupq(aio_t *aiop, aio_req_t *qhead, int exitflg) in aio_cleanup_cleanupq() argument
891 ASSERT(MUTEX_HELD(&aiop->aio_cleanupq_mutex)); in aio_cleanup_cleanupq()
907 mutex_enter(&aiop->aio_mutex); in aio_cleanup_cleanupq()
909 aio_req_free(aiop, reqp); in aio_cleanup_cleanupq()
911 aio_enq(&aiop->aio_doneq, reqp, AIO_DONEQ); in aio_cleanup_cleanupq()
918 mutex_exit(&aiop->aio_mutex); in aio_cleanup_cleanupq()
927 aio_cleanup_notifyq(aio_t *aiop, aio_req_t *qhead, int exitflg) in aio_cleanup_notifyq() argument
941 mutex_enter(&aiop->aio_mutex); in aio_cleanup_notifyq()
942 aio_req_free(aiop, reqp); in aio_cleanup_notifyq()
943 mutex_exit(&aiop->aio_mutex); in aio_cleanup_notifyq()
945 mutex_enter(&aiop->aio_mutex); in aio_cleanup_notifyq()
946 aio_enq(&aiop->aio_doneq, reqp, AIO_DONEQ); in aio_cleanup_notifyq()
957 mutex_exit(&aiop->aio_mutex); in aio_cleanup_notifyq()
978 aio_cleanup_pollq(aio_t *aiop, aio_req_t *qhead, int exitflg) in aio_cleanup_pollq() argument
993 mutex_enter(&aiop->aio_mutex); in aio_cleanup_pollq()
994 aio_req_free(aiop, reqp); in aio_cleanup_pollq()
995 mutex_exit(&aiop->aio_mutex); in aio_cleanup_pollq()
998 mutex_enter(&aiop->aio_mutex); in aio_cleanup_pollq()
999 aio_enq(&aiop->aio_doneq, reqp, AIO_DONEQ); in aio_cleanup_pollq()
1000 mutex_exit(&aiop->aio_mutex); in aio_cleanup_pollq()
1013 aio_t *aiop = p->p_aio; in aio_cleanup_exit() local
1022 mutex_enter(&aiop->aio_mutex); in aio_cleanup_exit()
1023 aiop->aio_flags |= AIO_CLEANUP; in aio_cleanup_exit()
1024 while ((aiop->aio_pending != 0) || (aiop->aio_flags & AIO_DONE_ACTIVE)) in aio_cleanup_exit()
1025 cv_wait(&aiop->aio_cleanupcv, &aiop->aio_mutex); in aio_cleanup_exit()
1026 mutex_exit(&aiop->aio_mutex); in aio_cleanup_exit()
1041 if ((head = aiop->aio_doneq) != NULL) { in aio_cleanup_exit()
1042 aiop->aio_doneq = NULL; in aio_cleanup_exit()
1053 for (reqp = aiop->aio_free; reqp != NULL; reqp = next) { in aio_cleanup_exit()
1061 for (liop = aiop->aio_lio_free; liop != NULL; liop = nxtlio) { in aio_cleanup_exit()
1066 if (aiop->aio_iocb) in aio_cleanup_exit()
1067 kmem_free(aiop->aio_iocb, aiop->aio_iocbsz); in aio_cleanup_exit()
1069 mutex_destroy(&aiop->aio_mutex); in aio_cleanup_exit()
1070 mutex_destroy(&aiop->aio_portq_mutex); in aio_cleanup_exit()
1071 mutex_destroy(&aiop->aio_cleanupq_mutex); in aio_cleanup_exit()
1074 kmem_free(aiop, sizeof (struct aio)); in aio_cleanup_exit()
1160 aio_req_remove_portq(aio_t *aiop, aio_req_t *reqp) in aio_req_remove_portq() argument
1162 ASSERT(MUTEX_HELD(&aiop->aio_portq_mutex)); in aio_req_remove_portq()
1163 while (aiop->aio_portq == NULL) { in aio_req_remove_portq()
1172 cv_wait(&aiop->aio_portcv, &aiop->aio_portq_mutex); in aio_req_remove_portq()
1174 aio_deq(&aiop->aio_portq, reqp); in aio_req_remove_portq()
1181 aio_t *aiop; in aio_close_port() local
1188 aiop = curproc->p_aio; in aio_close_port()
1190 aiop = (aio_t *)arg; in aio_close_port()
1198 if (aiop == NULL) in aio_close_port()
1211 mutex_enter(&aiop->aio_portq_mutex); in aio_close_port()
1212 mutex_enter(&aiop->aio_mutex); in aio_close_port()
1214 if ((headp = aiop->aio_portpending) != NULL) { in aio_close_port()
1226 mutex_exit(&aiop->aio_mutex); in aio_close_port()
1227 mutex_exit(&aiop->aio_portq_mutex); in aio_close_port()
1230 aiop->aio_portpendcnt += counter; in aio_close_port()
1231 mutex_exit(&aiop->aio_mutex); in aio_close_port()
1232 while (aiop->aio_portpendcnt) in aio_close_port()
1233 cv_wait(&aiop->aio_portcv, &aiop->aio_portq_mutex); in aio_close_port()
1240 if ((reqp = aiop->aio_portq) != NULL) { in aio_close_port()
1245 aio_req_remove_portq(aiop, reqp); in aio_close_port()
1251 } while ((reqp = next) != aiop->aio_portq); in aio_close_port()
1253 mutex_exit(&aiop->aio_portq_mutex); in aio_close_port()
1259 mutex_enter(&aiop->aio_mutex); in aio_close_port()
1260 aio_req_free_port(aiop, reqp); in aio_close_port()
1261 mutex_exit(&aiop->aio_mutex); in aio_close_port()
1264 if (aiop->aio_flags & AIO_CLEANUP) in aio_close_port()
1265 cv_broadcast(&aiop->aio_waitcv); in aio_close_port()
1279 struct aio *aiop = procp->p_aio; in aio_cleanup_dr_delete_memory() local
1287 if (aiop != NULL) { in aio_cleanup_dr_delete_memory()
1288 aiop->aio_rqclnup = 1; in aio_cleanup_dr_delete_memory()