Lines Matching defs:aiowp

459 	aio_worker_t *aiowp;
478 aiowp = reqp->req_worker;
479 sig_mutex_lock(&aiowp->work_qlock1);
480 (void) _aio_cancel_req(aiowp, reqp, &canceled, &done);
481 sig_mutex_unlock(&aiowp->work_qlock1);
765 _aio_cancel_work(aio_worker_t *aiowp, int fd, int *canceled, int *done)
769 sig_mutex_lock(&aiowp->work_qlock1);
773 reqp = aiowp->work_tail1;
776 if (_aio_cancel_req(aiowp, reqp, canceled, done)) {
782 reqp = aiowp->work_tail1;
792 if ((reqp = aiowp->work_req) != NULL &&
794 (void) _aio_cancel_req(aiowp, reqp, canceled, done);
795 sig_mutex_unlock(&aiowp->work_qlock1);
803 _aio_cancel_req(aio_worker_t *aiowp, aio_req_t *reqp, int *canceled, int *done)
808 ASSERT(MUTEX_HELD(&aiowp->work_qlock1));
812 aiowp->work_prev1 == reqp) {
813 ASSERT(aiowp->work_done1 != 0);
832 if (reqp->req_op == AIOFSYNC && reqp != aiowp->work_req) {
843 _aio_req_del(aiowp, reqp, ostate);
846 if (reqp == aiowp->work_req) {
856 (void) thr_kill(aiowp->work_tid, SIGAIOCANCEL);
865 sig_mutex_unlock(&aiowp->work_qlock1);
869 sig_mutex_lock(&aiowp->work_qlock1);
876 aio_worker_t *aiowp, **workers, **nextworker;
910 if ((aiowp = _aio_worker_alloc()) == NULL)
915 reqp->req_worker = aiowp;
916 aiowp->work_head1 = reqp;
917 aiowp->work_tail1 = reqp;
918 aiowp->work_next1 = reqp;
919 aiowp->work_count1 = 1;
920 aiowp->work_minload1 = 1;
924 error = thr_create(NULL, AIOSTKSIZE, func, aiowp,
925 THR_DAEMON | THR_SUSPENDED, &aiowp->work_tid);
932 _aio_worker_free(aiowp);
939 aiowp->work_forw = aiowp;
940 aiowp->work_backw = aiowp;
941 *nextworker = aiowp;
942 *workers = aiowp;
944 aiowp->work_backw = (*workers)->work_backw;
945 aiowp->work_forw = (*workers);
946 (*workers)->work_backw->work_forw = aiowp;
947 (*workers)->work_backw = aiowp;
952 (void) thr_continue(aiowp->work_tid);
1027 aio_worker_t *aiowp = (aio_worker_t *)arglist;
1035 if (pthread_setspecific(_aio_key, aiowp) != 0)
1038 ASSERT(aiowp->work_req == NULL);
1042 * On first entry, aiowp->work_req == NULL, so all
1045 (void) sigsetjmp(aiowp->work_jmp_buf, 0);
1049 if (aiowp->work_req != NULL)
1050 _aio_finish_request(aiowp, -1, ECANCELED);
1058 if (aiowp->work_done1)
1059 _aio_work_done(aiowp);
1066 while ((reqp = _aio_req_get(aiowp)) == NULL) {
1067 if (_aio_idle(aiowp) != 0)
1171 if (_aio_fsync_del(aiowp, reqp))
1196 _aio_finish_request(aiowp, retval, error);
1207 _aio_finish_request(aio_worker_t *aiowp, ssize_t retval, int error)
1211 sig_mutex_lock(&aiowp->work_qlock1);
1212 if ((reqp = aiowp->work_req) == NULL)
1213 sig_mutex_unlock(&aiowp->work_qlock1);
1215 aiowp->work_req = NULL;
1226 sig_mutex_unlock(&aiowp->work_qlock1);
1253 sig_mutex_unlock(&aiowp->work_qlock1);
1312 aio_worker_t *aiowp = (aio_worker_t *)arg;
1318 if (pthread_setspecific(_aio_key, aiowp) != 0)
1326 while ((reqp = _aio_req_get(aiowp)) == NULL) {
1327 if (_aio_idle(aiowp) != 0)
1515 _aio_fsync_del(aio_worker_t *aiowp, aio_req_t *reqp)
1520 ASSERT(reqp == aiowp->work_req);
1521 sig_mutex_lock(&aiowp->work_qlock1);
1526 aiowp->work_req = NULL;
1528 sig_mutex_unlock(&aiowp->work_qlock1);
1541 aiowp->work_req = NULL;
1545 sig_mutex_unlock(&aiowp->work_qlock1);
1560 _aio_idle(aio_worker_t *aiowp)
1564 sig_mutex_lock(&aiowp->work_qlock1);
1565 if (aiowp->work_count1 == 0) {
1566 ASSERT(aiowp->work_minload1 == 0);
1567 aiowp->work_idleflg = 1;
1572 error = sig_cond_wait(&aiowp->work_idle_cv,
1573 &aiowp->work_qlock1);
1579 aiowp->work_idleflg = 0;
1581 sig_mutex_unlock(&aiowp->work_qlock1);
1592 _aio_work_done(aio_worker_t *aiowp)
1597 sig_mutex_lock(&aiowp->work_qlock1);
1598 reqp = aiowp->work_prev1;
1600 aiowp->work_done1 = 0;
1601 aiowp->work_tail1 = aiowp->work_next1;
1602 if (aiowp->work_tail1 == NULL)
1603 aiowp->work_head1 = NULL;
1604 aiowp->work_prev1 = NULL;
1614 sig_mutex_unlock(&aiowp->work_qlock1);
1624 sig_mutex_unlock(&aiowp->work_qlock1);
1716 aio_worker_t *aiowp;
1731 first = aiowp = *nextworker;
1748 if (sig_mutex_trylock(&aiowp->work_qlock1) == 0) {
1749 if (aiowp->work_idleflg) {
1753 sig_mutex_unlock(&aiowp->work_qlock1);
1755 } while ((aiowp = aiowp->work_forw) != first);
1758 aiowp->work_minload1++;
1764 if (sig_mutex_trylock(&aiowp->work_qlock1) == 0) {
1768 } while ((aiowp = aiowp->work_forw) != first);
1788 while (sig_mutex_trylock(&aiowp->work_qlock1) != 0) {
1793 aiowp = aiowp->work_forw;
1797 ASSERT(MUTEX_HELD(&aiowp->work_qlock1));
1799 aiowp->work_minload1 >= _minworkload) {
1800 sig_mutex_unlock(&aiowp->work_qlock1);
1802 *nextworker = aiowp->work_forw;
1809 aiowp->work_minload1++;
1814 sig_mutex_lock(&aiowp->work_qlock1);
1823 if (aiowp->work_tail1 == NULL) {
1824 ASSERT(aiowp->work_count1 == 0);
1825 aiowp->work_tail1 = reqp;
1826 aiowp->work_next1 = reqp;
1828 aiowp->work_head1->req_next = reqp;
1829 if (aiowp->work_next1 == NULL)
1830 aiowp->work_next1 = reqp;
1833 reqp->req_worker = aiowp;
1834 aiowp->work_head1 = reqp;
1838 if (aiowp->work_count1++ == 0 && aiowp->work_idleflg) {
1839 aiowp->work_idleflg = 0;
1840 (void) cond_signal(&aiowp->work_idle_cv);
1842 sig_mutex_unlock(&aiowp->work_qlock1);
1846 *nextworker = aiowp->work_forw;
1857 _aio_req_get(aio_worker_t *aiowp)
1861 sig_mutex_lock(&aiowp->work_qlock1);
1862 if ((reqp = aiowp->work_next1) != NULL) {
1874 if (aiowp->work_prev1 == NULL) {
1875 aiowp->work_tail1 = reqp->req_next;
1876 if (aiowp->work_tail1 == NULL)
1877 aiowp->work_head1 = NULL;
1879 aiowp->work_prev1->req_next = reqp->req_next;
1880 if (aiowp->work_head1 == reqp)
1881 aiowp->work_head1 = reqp->req_next;
1885 aiowp->work_prev1 = reqp;
1886 ASSERT(aiowp->work_done1 >= 0);
1887 aiowp->work_done1++;
1890 aiowp->work_next1 = reqp->req_next;
1891 ASSERT(aiowp->work_count1 >= 1);
1892 aiowp->work_count1--;
1902 ASSERT(aiowp->work_minload1 > 0);
1903 aiowp->work_minload1--;
1908 aiowp->work_req = reqp;
1909 ASSERT(reqp != NULL || aiowp->work_count1 == 0);
1910 sig_mutex_unlock(&aiowp->work_qlock1);
1915 _aio_req_del(aio_worker_t *aiowp, aio_req_t *reqp, int ostate)
1921 ASSERT(aiowp != NULL);
1922 ASSERT(MUTEX_HELD(&aiowp->work_qlock1));
1927 last = &aiowp->work_tail1;
1928 lastrp = aiowp->work_tail1;
1933 if (aiowp->work_next1 == next)
1934 aiowp->work_next1 = next->req_next;
1948 if (aiowp->work_head1 == next)
1949 aiowp->work_head1 = lastrp;
1961 if (aiowp->work_prev1 == next) {
1963 !POSIX_AIO(reqp) && aiowp->work_done1 > 0);
1964 aiowp->work_prev1 = NULL;
1965 aiowp->work_done1--;
1969 ASSERT(aiowp->work_count1 >= 1);
1970 aiowp->work_count1--;
1971 ASSERT(aiowp->work_minload1 >= 1);
1972 aiowp->work_minload1--;