Lines Matching defs:pmp
315 puffs_getmsgid(struct puffs_mount *pmp)
319 mutex_enter(&pmp->pmp_lock);
320 rv = pmp->pmp_nextmsgid++;
321 mutex_exit(&pmp->pmp_lock);
334 puffs_msg_enqueue(struct puffs_mount *pmp, struct puffs_msgpark *park)
355 if (pmp->pmp_docompat) {
376 preq->preq_id = puffs_getmsgid(pmp);
419 mutex_enter(&pmp->pmp_lock);
420 if (pmp->pmp_status != PUFFSTAT_RUNNING) {
421 mutex_exit(&pmp->pmp_lock);
428 parkqdump(&pmp->pmp_msg_touser, puffsdebug > 1);
429 parkqdump(&pmp->pmp_msg_replywait, puffsdebug > 1);
436 TAILQ_INSERT_TAIL(&pmp->pmp_msg_touser, park, park_entries);
438 pmp->pmp_msg_touser_count++;
441 cv_broadcast(&pmp->pmp_msg_waiter_cv);
442 mutex_exit(&pmp->pmp_lock);
443 putter_notify(pmp->pmp_pi);
451 puffs_msg_wait(struct puffs_mount *pmp, struct puffs_msgpark *park)
477 mutex_enter(&pmp->pmp_lock);
478 puffs_mp_reference(pmp);
479 mutex_exit(&pmp->pmp_lock);
516 mutex_enter(&pmp->pmp_lock);
528 TAILQ_REMOVE(&pmp->pmp_msg_touser,
531 pmp->pmp_msg_touser_count--;
536 mutex_exit(&pmp->pmp_lock);
546 mutex_enter(&pmp->pmp_lock);
547 puffs_mp_release(pmp);
548 mutex_exit(&pmp->pmp_lock);
562 puffs_msg_wait2(struct puffs_mount *pmp, struct puffs_msgpark *park,
568 rv = puffs_msg_wait(pmp, park);
591 puffs_msg_sendresp(struct puffs_mount *pmp, struct puffs_req *origpreq, int rv)
603 puffs_msg_enqueue(pmp, park);
616 struct puffs_mount *pmp = ctx;
622 mutex_enter(&pmp->pmp_lock);
623 puffs_mp_reference(pmp);
626 if (pmp->pmp_status != PUFFSTAT_RUNNING) {
632 if (TAILQ_EMPTY(&pmp->pmp_msg_touser)) {
641 error = cv_wait_sig(&pmp->pmp_msg_waiter_cv,
642 &pmp->pmp_lock);
649 park = TAILQ_FIRST(&pmp->pmp_msg_touser);
691 TAILQ_REMOVE(&pmp->pmp_msg_touser, park, park_entries);
696 pmp->pmp_msg_touser_count--;
697 KASSERT(pmp->pmp_msg_touser_count >= 0);
701 puffs_mp_release(pmp);
702 mutex_exit(&pmp->pmp_lock);
722 struct puffs_mount *pmp = ctx;
727 mutex_enter(&pmp->pmp_lock);
732 TAILQ_INSERT_TAIL(&pmp->pmp_msg_replywait, park,
746 mutex_exit(&pmp->pmp_lock);
752 struct puffs_mount *pmp = ctx;
755 mutex_enter(&pmp->pmp_lock);
756 rv = pmp->pmp_msg_touser_count;
757 mutex_exit(&pmp->pmp_lock);
768 struct puffs_mount *pmp = ctx;
773 mutex_enter(&pmp->pmp_lock);
776 TAILQ_FOREACH(park, &pmp->pmp_msg_replywait, park_entries) {
783 mutex_exit(&pmp->pmp_lock);
796 mutex_exit(&pmp->pmp_lock);
802 TAILQ_REMOVE(&pmp->pmp_msg_replywait, park, park_entries);
804 mutex_exit(&pmp->pmp_lock);
815 KASSERT(pmp->pmp_docompat);
835 park->park_done(pmp, preq, park->park_donearg);
854 puffsop_expire(struct puffs_mount *pmp, puffs_cookie_t cookie)
858 KASSERT(PUFFS_USE_FS_TTL(pmp));
865 if (puffs_cookie2vnode(pmp, cookie, &vp) == 0) {
874 puffsop_flush(struct puffs_mount *pmp, struct puffs_flush *pf)
884 cache_purgevfs(PMPTOMP(pmp));
898 rv = puffs_cookie2vnode(pmp, pf->pf_cookie, &vp);
955 puffs_msg_sendresp(pmp, &pf->pf_req, rv);
961 struct puffs_mount *pmp = ctx;
966 puffs_msg_sendresp(pmp, preq, EINVAL); /* E2SMALL */
974 puffsop_msg(pmp, preq);
984 puffs_msg_sendresp(pmp, preq, EINVAL); /* E2SMALL */
994 mutex_enter(&pmp->pmp_sopmtx);
995 if (pmp->pmp_sopthrcount == 0) {
996 mutex_exit(&pmp->pmp_sopmtx);
998 puffs_msg_sendresp(pmp, preq, ENXIO);
1000 TAILQ_INSERT_TAIL(&pmp->pmp_sopfastreqs,
1002 cv_signal(&pmp->pmp_sopcv);
1003 mutex_exit(&pmp->pmp_sopmtx);
1018 mutex_enter(&pmp->pmp_sopmtx);
1019 if (pmp->pmp_sopthrcount == 0) {
1020 mutex_exit(&pmp->pmp_sopmtx);
1022 puffs_msg_sendresp(pmp, preq, ENXIO);
1024 TAILQ_INSERT_TAIL(&pmp->pmp_sopfastreqs,
1026 cv_signal(&pmp->pmp_sopcv);
1027 mutex_exit(&pmp->pmp_sopmtx);
1034 puffs_msg_sendresp(pmp, preq, EOPNOTSUPP);
1053 struct puffs_mount *pmp = arg;
1054 struct mount *mp = PMPTOMP(pmp);
1060 timeo = PUFFS_USE_FS_TTL(pmp) ? puffs_sopreq_expire_timeout : 0;
1062 mutex_enter(&pmp->pmp_sopmtx);
1070 psopr = TAILQ_FIRST(&pmp->pmp_sopfastreqs);
1072 TAILQ_REMOVE(&pmp->pmp_sopfastreqs,
1077 psopr = TAILQ_FIRST(&pmp->pmp_sopnodereqs);
1079 TAILQ_REMOVE(&pmp->pmp_sopnodereqs,
1084 cv_timedwait(&pmp->pmp_sopcv, &pmp->pmp_sopmtx, timeo);
1087 mutex_exit(&pmp->pmp_sopmtx);
1094 puffsop_flush(pmp, &psopr->psopr_pf);
1097 puffsop_expire(pmp, psopr->psopr_ck);
1100 puffs_msg_sendresp(pmp, &psopr->psopr_preq, 0);
1114 mutex_enter(&pmp->pmp_sopmtx);
1120 while ((psopr = TAILQ_FIRST(&pmp->pmp_sopfastreqs)) != NULL) {
1121 TAILQ_REMOVE(&pmp->pmp_sopfastreqs, psopr, psopr_entries);
1122 mutex_exit(&pmp->pmp_sopmtx);
1123 puffs_msg_sendresp(pmp, &psopr->psopr_preq, ENXIO);
1125 mutex_enter(&pmp->pmp_sopmtx);
1128 while ((psopr = TAILQ_FIRST(&pmp->pmp_sopnodereqs)) != NULL) {
1129 TAILQ_REMOVE(&pmp->pmp_sopnodereqs, psopr, psopr_entries);
1130 mutex_exit(&pmp->pmp_sopmtx);
1133 mutex_enter(&pmp->pmp_sopmtx);
1136 pmp->pmp_sopthrcount--;
1137 cv_broadcast(&pmp->pmp_sopcv);
1138 mutex_exit(&pmp->pmp_sopmtx); /* not allowed to access fs after this */
1158 struct puffs_mount *pmp = ctx;
1159 struct mount *mp = PMPTOMP(pmp);
1161 mutex_enter(&pmp->pmp_lock);
1162 puffs_mp_reference(pmp);
1170 puffs_userdead(pmp);
1181 * since pmp isn't locked. We might end up with PUTTER_DEAD after
1184 if (pmp->pmp_unmounting) {
1185 cv_wait(&pmp->pmp_unmounting_cv, &pmp->pmp_lock);
1186 puffs_mp_release(pmp);
1187 mutex_exit(&pmp->pmp_lock);
1188 DPRINTF(("puffs_fop_close: unmount was in progress for pmp %p, "
1189 "restart\n", pmp));
1193 /* Won't access pmp from here anymore */
1195 puffs_mp_release(pmp);
1196 mutex_exit(&pmp->pmp_lock);
1213 puffs_userdead(struct puffs_mount *pmp)
1221 pmp->pmp_status = PUFFSTAT_DYING;
1224 for (park = TAILQ_FIRST(&pmp->pmp_msg_touser); park; park = park_next) {
1231 TAILQ_REMOVE(&pmp->pmp_msg_touser, park, park_entries);
1233 pmp->pmp_msg_touser_count--;
1251 park->park_done(pmp, park->park_preq,
1265 for (park=TAILQ_FIRST(&pmp->pmp_msg_replywait); park; park=park_next) {
1273 TAILQ_REMOVE(&pmp->pmp_msg_replywait, park, park_entries);
1282 park->park_done(pmp, park->park_preq,
1292 cv_broadcast(&pmp->pmp_msg_waiter_cv);