Home | History | Annotate | Download | only in libpuffs

Lines Matching defs:pu

119 finalpush(struct puffs_usermount *pu)
123 LIST_FOREACH(fio, &pu->pu_ios, fio_entries) {
127 puffs__framev_output(pu, fio->fctrl, fio);
133 puffs_kernerr_abort(struct puffs_usermount *pu, uint8_t type,
144 puffs_kernerr_log(struct puffs_usermount *pu, uint8_t type,
153 puffs_getselectable(struct puffs_usermount *pu)
156 return pu->pu_fd;
160 puffs__nextreq(struct puffs_usermount *pu)
165 rv = pu->pu_nextreq++ | (uint64_t)1<<63;
172 puffs_setblockingmode(struct puffs_usermount *pu, int mode)
176 assert(puffs_getstate(pu) == PUFFS_STATE_RUNNING);
184 rv = ioctl(pu->pu_fd, FIONBIO, &x);
188 pu->pu_state &= ~PU_ASYNCFD;
190 pu->pu_state |= PU_ASYNCFD;
197 puffs_getstate(struct puffs_usermount *pu)
200 return pu->pu_state & PU_STATEMASK;
204 puffs_setstacksize(struct puffs_usermount *pu, size_t ss)
210 assert(puffs_getstate(pu) == PUFFS_STATE_BEFOREMOUNT);
235 pu->pu_cc_stackshift = stackshift;
239 puffs_getrootpathobj(struct puffs_usermount *pu)
243 pnr = pu->pu_pn_root;
253 puffs_setroot(struct puffs_usermount *pu, struct puffs_node *pn)
256 pu->pu_pn_root = pn;
260 puffs_getroot(struct puffs_usermount *pu)
263 return pu->pu_pn_root;
267 puffs_setrootinfo(struct puffs_usermount *pu, enum vtype vt,
270 struct puffs_kargs *pargs = pu->pu_kargp;
272 if (puffs_getstate(pu) != PUFFS_STATE_BEFOREMOUNT) {
283 puffs_getspecific(struct puffs_usermount *pu)
286 return pu->pu_privdata;
290 puffs_setspecific(struct puffs_usermount *pu, void *privdata)
293 pu->pu_privdata = privdata;
297 puffs_setmntinfo(struct puffs_usermount *pu,
300 struct puffs_kargs *pargs = pu->pu_kargp;
309 puffs_getmaxreqlen(struct puffs_usermount *pu)
312 return pu->pu_maxreqlen;
316 puffs_setmaxreqlen(struct puffs_usermount *pu, size_t reqlen)
319 if (puffs_getstate(pu) != PUFFS_STATE_BEFOREMOUNT)
322 pu->pu_kargp->pa_maxmsglen = reqlen;
326 puffs_setfhsize(struct puffs_usermount *pu, size_t fhsize, int flags)
329 if (puffs_getstate(pu) != PUFFS_STATE_BEFOREMOUNT)
332 pu->pu_kargp->pa_fhsize = fhsize;
333 pu->pu_kargp->pa_fhflags = flags;
337 puffs_setncookiehash(struct puffs_usermount *pu, int nhash)
340 if (puffs_getstate(pu) != PUFFS_STATE_BEFOREMOUNT)
343 pu->pu_kargp->pa_nhashbuckets = nhash;
347 puffs_set_pathbuild(struct puffs_usermount *pu, pu_pathbuild_fn fn)
350 pu->pu_pathbuild = fn;
354 puffs_set_pathtransform(struct puffs_usermount *pu, pu_pathtransform_fn fn)
357 pu->pu_pathtransform = fn;
361 puffs_set_pathcmp(struct puffs_usermount *pu, pu_pathcmp_fn fn)
364 pu->pu_pathcmp = fn;
368 puffs_set_pathfree(struct puffs_usermount *pu, pu_pathfree_fn fn)
371 pu->pu_pathfree = fn;
375 puffs_set_namemod(struct puffs_usermount *pu, pu_namemod_fn fn)
378 pu->pu_namemod = fn;
382 puffs_set_errnotify(struct puffs_usermount *pu, pu_errnotify_fn fn)
385 pu->pu_errnotify = fn;
389 puffs_set_cmap(struct puffs_usermount *pu, pu_cmap_fn fn)
392 pu->pu_cmap = fn;
396 puffs_ml_setloopfn(struct puffs_usermount *pu, puffs_ml_loop_fn lfn)
399 pu->pu_ml_lfn = lfn;
403 puffs_ml_settimeout(struct puffs_usermount *pu, struct timespec *ts)
407 pu->pu_ml_timep = NULL;
409 pu->pu_ml_timeout = *ts;
410 pu->pu_ml_timep = &pu->pu_ml_timeout;
415 puffs_set_prepost(struct puffs_usermount *pu,
419 pu->pu_oppre = pre;
420 pu->pu_oppost = pst;
439 puffs_daemon(struct puffs_usermount *pu, int nochdir, int noclose)
445 is_beforemount = (puffs_getstate(pu) < PUFFS_STATE_RUNNING);
447 if (pipe(pu->pu_dpipe) == -1)
461 PU_SETSFLAG(pu, PU_PUFFSDAEMON);
465 close(pu->pu_dpipe[1]);
466 n = read(pu->pu_dpipe[0], &value, sizeof(int));
499 n = write(pu->pu_dpipe[1], &errno, sizeof(int));
506 shutdaemon(struct puffs_usermount *pu, int error)
510 n = write(pu->pu_dpipe[1], &error, sizeof(int));
512 close(pu->pu_dpipe[0]);
513 close(pu->pu_dpipe[1]);
514 pu->pu_state &= ~PU_PUFFSDAEMON;
518 puffs_mount(struct puffs_usermount *pu, const char *dir, int mntflags,
524 pu->pu_kargp->pa_root_cookie = cookie;
545 if (sscanf(comfd, "%d", &pu->pu_fd) != 1) {
551 if (fcntl(pu->pu_fd, F_GETFL) == -1) {
559 al_rv = write(pu->pu_fd, buf, len); \
570 len = strlen(pu->pu_kargp->pa_mntfromname)+1;
572 allwrite(pu->pu_kargp->pa_mntfromname, len);
574 len = sizeof(*pu->pu_kargp);
576 allwrite(pu->pu_kargp, sizeof(*pu->pu_kargp));
577 allwrite(&pu->pu_flags, sizeof(pu->pu_flags));
609 pu->pu_kargp->pa_fd = pu->pu_fd = fd;
611 pu->pu_kargp, sizeof(struct puffs_kargs))) == -1)
615 PU_SETSTATE(pu, PUFFS_STATE_RUNNING);
622 free(pu->pu_kargp);
623 pu->pu_kargp = NULL;
625 if (PU_GETSFLAG(pu, PU_PUFFSDAEMON))
626 shutdaemon(pu, sverrno);
636 struct puffs_usermount *pu;
647 pu = malloc(sizeof(struct puffs_usermount));
648 if (pu == NULL)
650 memset(pu, 0, sizeof(struct puffs_usermount));
652 pargs = pu->pu_kargp = malloc(sizeof(struct puffs_kargs));
660 puffs_setmntinfo(pu, mntfromname, puffsname);
673 pu->pu_flags = pflags;
674 pu->pu_ops = *pops;
677 pu->pu_privdata = priv;
678 pu->pu_cc_stackshift = PUFFS_CC_STACKSHIFT_DEFAULT;
679 LIST_INIT(&pu->pu_pnodelst);
680 LIST_INIT(&pu->pu_ios);
681 LIST_INIT(&pu->pu_ios_rmlist);
682 LIST_INIT(&pu->pu_ccmagazin);
683 TAILQ_INIT(&pu->pu_sched);
685 pu->pu_framectrl[PU_FRAMECTRL_FS].rfb = puffs__fsframe_read;
686 pu->pu_framectrl[PU_FRAMECTRL_FS].wfb = puffs__fsframe_write;
687 pu->pu_framectrl[PU_FRAMECTRL_FS].cmpfb = puffs__fsframe_cmp;
688 pu->pu_framectrl[PU_FRAMECTRL_FS].gotfb = puffs__fsframe_gotframe;
689 pu->pu_framectrl[PU_FRAMECTRL_FS].fdnotfn = puffs_framev_unmountonclose;
692 pu->pu_cmap = NULL; /* identity translation */
694 pu->pu_pathbuild = puffs_stdpath_buildpath;
695 pu->pu_pathfree = puffs_stdpath_freepath;
696 pu->pu_pathcmp = puffs_stdpath_cmppath;
697 pu->pu_pathtransform = NULL;
698 pu->pu_namemod = NULL;
700 pu->pu_errnotify = puffs_kernerr_log;
702 PU_SETSTATE(pu, PUFFS_STATE_BEFOREMOUNT);
704 return pu;
709 free(pu);
715 puffs_cancel(struct puffs_usermount *pu, int error)
717 assert(puffs_getstate(pu) < PUFFS_STATE_RUNNING);
718 assert(PU_GETSFLAG(pu, PU_PUFFSDAEMON));
719 shutdaemon(pu, error);
720 free(pu);
725 puffs_exit(struct puffs_usermount *pu, int unused /* strict compat */)
750 preq->preq_id = puffs__nextreq(pu);
752 puffs_framev_enqueue_justsend(pu, puffs_getselectable(pu), pb, 1, 0);
788 struct puffs_usermount *pu = pcc->pcc_pu;
795 while (puffs_getstate(pu) != PUFFS_STATE_UNMOUNTED) {
800 while ((pcc = TAILQ_FIRST(&pu->pu_sched)) != NULL) {
801 TAILQ_REMOVE(&pu->pu_sched, pcc, pcc_schedent);
805 if (pu->pu_ml_lfn)
806 pu->pu_ml_lfn(pu);
820 if (pu->pu_nfds == 1 && pu->pu_ml_timep == NULL
821 && (pu->pu_state & PU_ASYNCFD) == 0) {
823 puffs_framev_input(pu, pfctrl, XXX);
830 LIST_FOREACH(fio, &pu->pu_ios, fio_entries) {
842 puffs__framev_output(pu, pfctrl, fio);
849 LIST_FOREACH(fio, &pu->pu_ios, fio_entries) {
856 EV_SET(&pu->pu_evs[nchanges], fio->io_fd,
863 EV_SET(&pu->pu_evs[nchanges], fio->io_fd,
871 ndone = kevent(pu->pu_kq, pu->pu_evs, nchanges,
872 pu->pu_evs, pu->pu_nevs, pu->pu_ml_timep);
886 for (curev = pu->pu_evs; ndone--; curev++) {
908 puffs__framev_writeclose(pu, fio,
917 puffs__framev_input(pu, pfctrl, fio);
921 puffs__framev_output(pu, pfctrl, fio);
925 if ((pu->pu_state & PU_DONEXIT) == 0) {
926 PU_SETSFLAG(pu, PU_DONEXIT);
927 puffs_exit(pu, 0);
941 while ((fio = LIST_FIRST(&pu->pu_ios_rmlist)) != NULL) {
947 if (puffs__cc_restoremain(pu) == -1)
951 puffs_mainloop(struct puffs_usermount *pu)
959 assert(puffs_getstate(pu) >= PUFFS_STATE_RUNNING);
961 pu->pu_kq = kqueue();
962 if (pu->pu_kq == -1)
964 pu->pu_state |= PU_HASKQ;
966 puffs_setblockingmode(pu, PUFFSDEV_NONBLOCK);
967 if (puffs__framev_addfd_ctrl(pu, puffs_getselectable(pu),
969 &pu->pu_framectrl[PU_FRAMECTRL_FS]) == -1)
972 nevs = pu->pu_nevs + sigcatch;
973 if (reallocarr(&pu->pu_evs, nevs, sizeof(struct kevent)) != 0) {
977 pu->pu_nevs = nevs;
979 curev = pu->pu_evs;
981 LIST_FOREACH(fio, &pu->pu_ios, fio_entries) {
996 assert(curev - pu->pu_evs == (ssize_t)pu->pu_nevs);
997 if (kevent(pu->pu_kq, pu->pu_evs, pu->pu_nevs, NULL, 0, NULL) == -1)
1000 pu->pu_state |= PU_INLOOP;
1010 if (puffs__cc_create(pu, puffs__theloop, &pcc) == -1) {
1015 if (puffs__cc_savemain(pu) == -1) {
1030 PU_CLRSFLAG(pu, PU_MAINRESTORE);
1031 if (getcontext(&pu->pu_mainctx) == -1) {
1037 if ((pu->pu_state & PU_MAINRESTORE) == 0)
1040 finalpush(pu);