Home | History | Annotate | Download | only in kern

Lines Matching defs:wg

534 	struct aiowaitgroup *wg;
546 wg = kmem_zalloc(sizeof(*wg), KM_SLEEP);
547 aiowaitgroup_init(wg);
563 mutex_enter(&wg->mtx);
564 wg->completed++;
565 wg->total++;
566 mutex_exit(&wg->mtx);
571 aiowaitgroup_join(wg, &job->lk);
580 mutex_enter(&wg->mtx);
581 const size_t target = (flags & AIOSP_SUSPEND_ANY) ? 1 : wg->total;
582 while (wg->completed < target) {
583 error = aiowaitgroup_wait(wg, timo);
588 mutex_exit(&wg->mtx);
590 mutex_enter(&wg->mtx);
591 wg->active = false;
592 if (--wg->refcnt == 0) {
593 mutex_exit(&wg->mtx);
594 aiowaitgroup_fini(wg);
596 mutex_exit(&wg->mtx);
1412 aiowaitgroup_init(struct aiowaitgroup *wg)
1414 wg->completed = 0;
1415 wg->total = 0;
1416 wg->refcnt = 1;
1417 wg->active = true;
1418 cv_init(&wg->done_cv, "aiodone");
1419 mutex_init(&wg->mtx, MUTEX_DEFAULT, IPL_NONE);
1426 aiowaitgroup_fini(struct aiowaitgroup *wg)
1428 cv_destroy(&wg->done_cv);
1429 mutex_destroy(&wg->mtx);
1430 kmem_free(wg, sizeof(*wg));
1437 aiowaitgroup_wait(struct aiowaitgroup *wg, int timo)
1441 error = cv_timedwait_sig(&wg->done_cv, &wg->mtx, timo);
1474 struct aiowaitgroup *wg = lk->wgs[i];
1475 if (!wg) {
1481 mutex_enter(&wg->mtx);
1482 if (--wg->refcnt == 0) {
1483 mutex_exit(&wg->mtx);
1484 aiowaitgroup_fini(wg);
1486 mutex_exit(&wg->mtx);
1509 struct aiowaitgroup *wg = lk->wgs[i];
1510 if (wg == NULL) {
1514 mutex_enter(&wg->mtx);
1516 if (wg->active) {
1517 wg->completed++;
1518 cv_signal(&wg->done_cv);
1521 if (--wg->refcnt == 0) {
1522 mutex_exit(&wg->mtx);
1523 aiowaitgroup_fini(wg);
1525 mutex_exit(&wg->mtx);
1544 aiowaitgroup_join(struct aiowaitgroup *wg, struct aiowaitgrouplk *lk)
1559 lk->wgs[lk->n] = wg;
1561 wg
1562 wg->refcnt++;