Home | History | Annotate | Download | only in puffs

Lines Matching defs:pmp

96 	struct puffs_mount *pmp = NULL;
109 pmp = MPTOPUFFSMP(mp);
110 *(struct puffs_kargs *)data = pmp->pmp_args;
227 pmp = kmem_zalloc(sizeof(struct puffs_mount), KM_SLEEP);
232 mp->mnt_data = pmp;
259 pmp->pmp_status = PUFFSTAT_MOUNTING;
260 pmp->pmp_mp = mp;
261 pmp->pmp_msg_maxsize = args->pa_maxmsglen;
262 pmp->pmp_args = *args;
269 if ((pmp->pmp_pi
270 = putter_attach(mntpid, args->pa_fd, pmp, &puffs_putter)) == NULL) {
276 pmp->pmp_root_cookie = args->pa_root_cookie;
285 pmp->pmp_root_vtype = args->pa_root_vtype;
291 pmp->pmp_root_vsize = args->pa_root_vsize;
293 pmp->pmp_root_rdev = args->pa_root_rdev;
294 pmp->pmp_docompat = args->pa_time32;
296 mutex_init(&pmp->pmp_lock, MUTEX_DEFAULT, IPL_NONE);
297 mutex_init(&pmp->pmp_sopmtx, MUTEX_DEFAULT, IPL_NONE);
298 cv_init(&pmp->pmp_msg_waiter_cv, "puffsget");
299 cv_init(&pmp->pmp_refcount_cv, "puffsref");
300 cv_init(&pmp->pmp_unmounting_cv, "puffsum");
301 cv_init(&pmp->pmp_sopcv, "puffsop");
302 TAILQ_INIT(&pmp->pmp_msg_touser);
303 TAILQ_INIT(&pmp->pmp_msg_replywait);
304 TAILQ_INIT(&pmp->pmp_sopfastreqs);
305 TAILQ_INIT(&pmp->pmp_sopnodereqs);
308 puffs_sop_thread, pmp, NULL, "puffsop")) != 0)
310 pmp->pmp_sopthrcount = 1;
318 if (error && pmp && pmp->pmp_pi)
319 putter_detach(pmp->pmp_pi);
320 if (error && pmp)
321 kmem_free(pmp, sizeof(struct puffs_mount));
328 struct puffs_mount *pmp = MPTOPUFFSMP(mp);
330 KASSERT(pmp->pmp_status == PUFFSTAT_MOUNTING);
331 pmp->pmp_status = PUFFSTAT_RUNNING;
340 struct puffs_mount *pmp;
345 pmp = MPTOPUFFSMP(mp);
348 "status 0x%x\n", pmp->pmp_status));
366 mutex_enter(&pmp->pmp_lock);
367 if (pmp->pmp_status != PUFFSTAT_DYING) {
368 pmp->pmp_unmounting = 1;
369 mutex_exit(&pmp->pmp_lock);
376 PUFFS_MSG_ENQUEUEWAIT(pmp, park_unmount, error);
379 error = checkerr(pmp, error, __func__);
382 mutex_enter(&pmp->pmp_lock);
383 pmp->pmp_unmounting = 0;
384 cv_broadcast(&pmp->pmp_unmounting_cv);
395 puffs_userdead(pmp);
396 putter_detach(pmp->pmp_pi);
406 while (pmp->pmp_refcount != 0)
407 cv_wait(&pmp->pmp_refcount_cv, &pmp->pmp_lock);
408 mutex_exit(&pmp->pmp_lock);
417 mutex_enter(&pmp->pmp_sopmtx);
418 if (pmp->pmp_sopthrcount == 0) {
419 mutex_exit(&pmp->pmp_sopmtx);
421 mutex_enter(&pmp->pmp_sopmtx);
422 KASSERT(pmp->pmp_sopthrcount == 0);
424 TAILQ_INSERT_TAIL(&pmp->pmp_sopfastreqs,
426 cv_signal(&pmp->pmp_sopcv);
428 while (pmp->pmp_sopthrcount > 0)
429 cv_wait(&pmp->pmp_sopcv, &pmp->pmp_sopmtx);
430 mutex_exit(&pmp->pmp_sopmtx);
433 cv_destroy(&pmp->pmp_unmounting_cv);
434 cv_destroy(&pmp->pmp_refcount_cv);
435 cv_destroy(&pmp->pmp_msg_waiter_cv);
436 cv_destroy(&pmp->pmp_sopcv);
437 mutex_destroy(&pmp->pmp_lock);
438 mutex_destroy(&pmp->pmp_sopmtx);
440 kmem_free(pmp, sizeof(struct puffs_mount));
443 mutex_exit(&pmp->pmp_lock);
457 struct puffs_mount *pmp = MPTOPUFFSMP(mp);
460 rv = puffs_cookie2vnode(pmp, pmp->pmp_root_cookie, vpp);
477 struct puffs_mount *pmp;
480 pmp = MPTOPUFFSMP(mp);
488 if (__predict_false(pmp->pmp_status == PUFFSTAT_MOUNTING))
494 PUFFS_MSG_ENQUEUEWAIT(pmp, park_statvfs, error);
495 error = checkerr(pmp, error, __func__);
595 struct puffs_mount *pmp = MPTOPUFFSMP(mp);
606 PUFFS_MSG_ENQUEUEWAIT(pmp, park_sync, rv);
607 rv = checkerr(pmp, rv, __func__);
620 struct puffs_mount *pmp = MPTOPUFFSMP(mp);
626 if (pmp->pmp_args.pa_fhsize == 0)
629 if (pmp->pmp_args.pa_fhflags & PUFFS_FHFLAG_PASSTHROUGH) {
636 if (pmp->pmp_args.pa_fhflags & PUFFS_FHFLAG_DYNAMIC) {
637 if (pmp->pmp_args.pa_fhsize < fhlen)
640 if (pmp->pmp_args.pa_fhsize != fhlen)
651 PUFFS_MSG_ENQUEUEWAIT(pmp, park_fhtonode, error);
652 error = checkerr(pmp, error, __func__);
673 struct puffs_mount *pmp = MPTOPUFFSMP(vp->v_mount);
677 if (pmp->pmp_args.pa_fhsize == 0)
681 if (((pmp->pmp_args.pa_fhflags & PUFFS_FHFLAG_DYNAMIC) == 0)
682 && ((pmp->pmp_args.pa_fhflags & PUFFS_FHFLAG_PASSTHROUGH) == 0)
683 && (PUFFS_FROMFHSIZE(*fh_size) < pmp->pmp_args.pa_fhsize)) {
684 *fh_size = PUFFS_TOFHSIZE(pmp->pmp_args.pa_fhsize);
688 if (pmp->pmp_args.pa_fhflags & PUFFS_FHFLAG_PASSTHROUGH)
699 PUFFS_MSG_ENQUEUEWAIT(pmp, park_nodetofh, error);
700 error = checkerr(pmp, error, __func__);
702 if (pmp->pmp_args.pa_fhflags & PUFFS_FHFLAG_PASSTHROUGH)
704 else if (pmp->pmp_args.pa_fhflags & PUFFS_FHFLAG_DYNAMIC)
707 fhlen = PUFFS_TOFHSIZE(pmp->pmp_args.pa_fhsize);
716 puffs_senderr(pmp, PUFFS_ERR_VPTOFH, E2BIG,
730 if (pmp->pmp_args.pa_fhflags & PUFFS_FHFLAG_PASSTHROUGH) {
748 struct puffs_mount *pmp;
753 pmp = MPTOPUFFSMP(mp);
768 if (pnode->pn_cookie == pmp->pmp_root_cookie)
814 struct puffs_mount *pmp = MPTOPUFFSMP(mp);
843 puffs_msg_enqueue(pmp, park_extattrctl);
850 error = puffs_msg_wait2(pmp, park_extattrctl, pnp, NULL);
856 return checkerr(pmp, error, __func__);