Lines Matching refs:aiosp
36 * Each process owns an aiosp (service pool) with work threads (aiost).
43 * Jobs are appended to aiosp->jobs which are then distributed to a worker
130 static int aiost_create(struct aiosp *, struct aiost **);
134 static int aiosp_worker_extract(struct aiosp *, struct aiost **);
149 static void aiocbp_destroy(struct aiosp *);
150 static int aiocbp_init(struct aiosp *, u_int);
151 static int aiocbp_insert(struct aiosp *, struct aiocbp *);
152 static int aiocbp_lookup_job(struct aiosp *, const void *,
154 static int aiocbp_remove_job(struct aiosp *, const void *,
274 error = aiosp_initialize(&aio->aiosp);
280 error = aiocbp_init(&aio->aiosp, 256);
282 aiosp_destroy(&aio->aiosp, NULL);
317 aiocbp_destroy(&aio->aiosp);
318 aiosp_destroy(&aio->aiosp, NULL);
396 * Cancel a job pending on aiosp->jobs
399 aio_job_cancel(struct aiosp *aiosp, struct aio_job *job)
402 TAILQ_REMOVE(&aiosp->jobs, job, list);
403 aiosp->jobs_pending--;
413 aiosp_fg_teardown_locked(struct aiosp *sp, struct aiost_file_group *fg)
428 aiosp_fg_teardown(struct aiosp *sp, struct aiost_file_group *fg)
445 aiosp_distribute_jobs(struct aiosp *sp)
530 aiosp_suspend(struct aiosp *aiosp, struct aiocb **aiocbp_list, int nent,
554 error = aiocbp_lookup_job(aiosp, aiocbp_list[i], &job);
607 struct aiosp *aiosp = &aio->aiosp;
609 return aiosp_suspend(aiosp, aiocbp_list, nent, ts, AIOSP_SUSPEND_ANY);
616 aiosp_initialize(struct aiosp *sp)
632 aiosp_worker_extract(struct aiosp *sp, struct aiost **aiost)
659 aiosp_destroy(struct aiosp *sp, int *cn)
700 aiosp_enqueue_job(struct aiosp *aiosp, struct aio_job *job)
702 aiosp->mtx);
704 TAILQ_INSERT_TAIL(&aiosp->jobs, job, list);
705 aiosp->jobs_pending++;
708 mutex_exit(&aiosp->mtx);
717 aiost_create(struct aiosp *sp, struct aiost **ret)
729 st->aiosp = sp;
774 aiost_process_fg(struct aiosp *sp, struct aiost_file_group *fg)
800 struct aiosp *sp = st->aiosp;
1133 aiosp_validate_conflicts(struct aiosp *aiosp, const void *uptr)
1138 mutex_enter(&aiosp->mtx);
1141 TAILQ_FOREACH(st, &aiosp->active, list) {
1144 mutex_exit(&aiosp->mtx);
1151 mutex_exit(&aiosp->mtx);
1161 mutex_exit(&aiosp->mtx);
1169 aiosp_error(struct aiosp *aiosp, const void *uptr, register_t *retval)
1174 error = aiocbp_lookup_job(aiosp, uptr, &job);
1194 aiosp_return(struct aiosp *aiosp, const void *uptr, register_t *retval)
1200 error = aiocbp_remove_job(aiosp, uptr, &job, &handle);
1256 aiocbp_lookup_job(struct aiosp *aiosp, const void *uptr,
1264 hash = aiocbp_hash(uptr) & aiosp->aio_hash_mask;
1266 mutex_enter(&aiosp->aio_hash_mtx);
1267 TAILQ_FOREACH(aiocbp, &aiosp->aio_hash[hash], list) {
1274 mutex_exit(&aiosp->aio_hash_mtx);
1279 mutex_exit(&aiosp->aio_hash_mtx);
1289 aiocbp_remove_job(struct aiosp *aiosp, const void *uptr,
1300 hash = aiocbp_hash(uptr) & aiosp->aio_hash_mask;
1302 mutex_enter(&aiosp->aio_hash_mtx);
1303 TAILQ_FOREACH(aiocbp, &aiosp->aio_hash[hash], list) {
1310 TAILQ_REMOVE(&aiosp->aio_hash[hash], aiocbp, list);
1311 mutex_exit(&aiosp->aio_hash_mtx);
1320 mutex_exit(&aiosp->aio_hash_mtx);
1329 aiocbp_insert(struct aiosp *aiosp, struct aiocbp *aiocbp)
1336 hash = aiocbp_hash(uptr) & aiosp->aio_hash_mask;
1338 mutex_enter(&aiosp->aio_hash_mtx);
1339 TAILQ_FOREACH(found, &aiosp->aio_hash[hash], list) {
1342 mutex_exit(&aiosp->aio_hash_mtx);
1347 TAILQ_INSERT_HEAD(&aiosp->aio_hash[hash], aiocbp, list);
1348 mutex_exit(&aiosp->aio_hash_mtx);
1357 aiocbp_init(struct aiosp *aiosp, u_int hashsize)
1363 aiosp->aio_hash = kmem_zalloc(hashsize * sizeof(*aiosp->aio_hash),
1366 aiosp->aio_hash_mask = hashsize - 1;
1367 aiosp->aio_hash_size = hashsize;
1369 mutex_init(&aiosp->aio_hash_mtx, MUTEX_DEFAULT, IPL_NONE);
1372 TAILQ_INIT(&aiosp->aio_hash[i]);
1382 aiocbp_destroy(struct aiosp *aiosp)
1384 if (aiosp->aio_hash == NULL) {
1390 mutex_enter(&aiosp->aio_hash_mtx);
1391 for (size_t i = 0; i < aiosp->aio_hash_size; i++) {
1393 TAILQ_FOREACH_SAFE(aiocbp, &aiosp->aio_hash[i], list, tmp) {
1394 TAILQ_REMOVE(&aiosp->aio_hash[i], aiocbp, list);
1398 mutex_exit(&aiosp->aio_hash_mtx);
1400 kmem_free(aiosp->aio_hash,
1401 aiosp->aio_hash_size * sizeof(*aiosp->aio_hash));
1402 aiosp->aio_hash = NULL;
1403 aiosp->aio_hash_mask = 0;
1404 aiosp->aio_hash_size = 0;
1405 mutex_destroy(&aiosp->aio_hash_mtx);
1621 error = aiosp_validate_conflicts(&aio->aiosp, aiocb_uptr);
1677 error = aiocbp_insert(&aio->aiosp, aiocbp);
1701 error = aiosp_enqueue_job(&aio->aiosp, a_job);
1716 aiocbp_remove_job(&aio->aiosp, aiocb_uptr, &a_job, NULL);
1740 struct aiosp *aiosp;
1767 aiosp = &aio->aiosp;
1770 mutex_enter(&aiosp->mtx);
1777 fg = RB_FIND(aiost_file_tree, aiosp->fg_root, &find);
1788 error = aiocbp_lookup_job(aiosp, aiocbp_uptr, &job);
1807 aio_job_cancel(aiosp, job);
1818 TAILQ_FOREACH_SAFE(job, &aiosp->jobs, list, tmp) {
1820 aio_job_cancel(aiosp, job);
1835 mutex_exit(&aiosp->mtx);
1853 return aiosp_error(&aio->aiosp, uptr, retval);
1885 return aiosp_distribute_jobs(&aio->aiosp);
1900 return aiosp_return(&aio->aiosp, uptr, retval);
1936 error = aiosp_suspend(&aio->aiosp, list, nent, SCARG(uap, timeout) ?
1957 return aiosp_distribute_jobs(&aio->aiosp);
2044 error = aiosp_distribute_jobs(&aio->aiosp);
2058 error = aiosp_suspend(&aio->aiosp, aiocbp_list, nent,
2173 struct aiosp *sp;
2188 sp = &aio->aiosp;