Lines Matching refs:rn
332 struct rumpfs_node *rn;
377 et->et_rn = rn = makeprivate(ettype_to_vtype(ftype), RUMPFS_DEFAULTMODE,
382 rn->rn_flags |= RUMPNODE_ET_PHONE_HOST;
387 rn->rn_hostpath = malloc(len, M_TEMP, M_WAITOK | M_ZERO);
388 memcpy(rn->rn_hostpath, hostpath, len);
389 rn->rn_offset = begin;
393 rn->rn_flags |= RUMPNODE_DIR_ET;
400 rn->rn_flags |= RUMPNODE_DIR_ETSUBS;
478 struct rumpfs_node *rn;
483 rn = vp->v_data;
484 KASSERT(rn == et->et_rn);
489 if (mp && vcache_get(mp, &rn, sizeof(rn), &vp) == 0) {
512 struct rumpfs_node *rn;
517 rn = kmem_zalloc(sizeof(*rn), KM_SLEEP);
521 LIST_INIT(&rn->rn_dir);
525 rn->rn_readfd = -1;
526 rn->rn_writefd = -1;
535 va = &rn->rn_va;
559 return rn;
563 freeprivate(struct rumpfs_node *rn)
566 kmem_free(rn, sizeof(*rn));
571 struct componentname *cnp, struct rumpfs_node *rn)
577 rdent->rd_node = rn;
619 struct rumpfs_node *rn = vp->v_data;
628 rn->rn_va.va_atime = *acc;
630 rn->rn_va.va_mtime = *mod;
632 rn->rn_va.va_ctime = *chg;
680 struct rumpfs_node *rnd = dvp->v_data, *rn;
728 rn = et->et_rn;
760 rn = makeprivate(hft_to_vtype(hft), RUMPFS_DEFAULTMODE,
762 rn->rn_flags |= RUMPNODE_CANRECLAIM;
764 rn->rn_flags |= RUMPNODE_DIR_ET | RUMPNODE_DIR_ETSUBS;
765 rn->rn_flags |= RUMPNODE_ET_PHONE_HOST;
767 rn->rn_hostpath = newpath;
772 if ((rn = rnd->rn_parent) != NULL)
809 rn = rd->rd_node;
812 KASSERT(rn);
813 rv = vcache_get(dvp->v_mount, &rn, sizeof(rn), vpp);
816 freeprivate(rn);
865 struct rumpfs_node *rn = vp->v_data;
868 error = rump_check_possible(vp, rn, ap->a_accmode);
872 error = rump_check_permitted(vp, rn, ap->a_accmode, ap->a_cred);
886 struct rumpfs_node *rn = vp->v_data;
889 memcpy(vap, &rn->rn_va, sizeof(struct vattr));
904 struct rumpfs_node *rn = vp->v_data;
905 struct vattr *attr = &rn->rn_va;
911 #define SETIFVAL(a,t) if (CHANGED(a, t)) rn->rn_va.a = vap->a
986 vap->va_size != rn->rn_dlen &&
987 (rn->rn_flags & RUMPNODE_ET_PHONE_HOST) == 0) {
996 copylen = MIN(rn->rn_dlen, newlen);
998 memcpy(newdata, rn->rn_data, copylen);
1001 if ((rn->rn_flags & RUMPNODE_EXTSTORAGE) == 0) {
1002 rump_hyperfree(rn->rn_data, rn->rn_dlen);
1004 rn->rn_flags &= ~RUMPNODE_EXTSTORAGE;
1007 rn->rn_data = newdata;
1008 rn->rn_dlen = newlen;
1027 struct rumpfs_node *rnd = dvp->v_data, *rn;
1030 rn = makeprivate(VDIR, va->va_mode & ALLPERMS, NODEV, DEV_BSIZE, false);
1032 rn->rn_va.va_flags |= UF_OPAQUE;
1033 rn->rn_parent = rnd;
1034 rv = vcache_get(dvp->v_mount, &rn, sizeof(rn), vpp);
1036 freeprivate(rn);
1040 makedir(rnd, cnp, rn);
1057 struct rumpfs_node *rn = vp->v_data;
1061 LIST_FOREACH(rd, &rn->rn_dir, rd_entries) {
1067 while ((rd = LIST_FIRST(&rn->rn_dir)) != NULL) {
1075 rn->rn_flags |= RUMPNODE_CANRECLAIM;
1076 rn->rn_parent = NULL;
1077 rn->rn_va.va_nlink = 0;
1097 struct rumpfs_node *rn = vp->v_data;
1100 if (rn->rn_flags & RUMPNODE_ET_PHONE_HOST)
1104 rn->rn_flags |= RUMPNODE_CANRECLAIM;
1105 rn->rn_va.va_nlink = 0;
1124 struct rumpfs_node *rnd = dvp->v_data, *rn;
1127 rn = makeprivate(va->va_type, va->va_mode & ALLPERMS, va->va_rdev,
1130 rn->rn_va.va_flags |= UF_OPAQUE;
1131 rv = vcache_get(dvp->v_mount, &rn, sizeof(rn), vpp);
1133 freeprivate(rn);
1137 makedir(rnd, cnp, rn);
1155 struct rumpfs_node *rnd = dvp->v_data, *rn;
1160 rn = makeprivate(va->va_type, va->va_mode & ALLPERMS, NODEV,
1163 rn->rn_va.va_flags |= UF_OPAQUE;
1164 rv = vcache_get(dvp->v_mount, &rn, sizeof(rn), vpp);
1166 freeprivate(rn);
1170 makedir(rnd, cnp, rn);
1189 struct rumpfs_node *rnd = dvp->v_data, *rn;
1196 rn = makeprivate(VLNK, va->va_mode & ALLPERMS, NODEV, linklen, false);
1198 rn->rn_va.va_flags |= UF_OPAQUE;
1199 rv = vcache_get(dvp->v_mount, &rn, sizeof(rn), vpp);
1201 freeprivate(rn);
1205 makedir(rnd, cnp, rn);
1208 rn->rn_linktarg = PNBUF_GET();
1209 rn->rn_linklen = linklen;
1210 strcpy(rn->rn_linktarg, target);
1224 struct rumpfs_node *rn = vp->v_data;
1227 return uiomove(rn->rn_linktarg, rn->rn_linklen, uio);
1269 struct rumpfs_node *rn = vp->v_data;
1273 if (vp->v_type != VREG || (rn->rn_flags & RUMPNODE_ET_PHONE_HOST) == 0)
1277 if (rn->rn_readfd != -1)
1279 error = rumpuser_open(rn->rn_hostpath,
1280 RUMPUSER_OPEN_RDONLY, &rn->rn_readfd);
1284 if (rn->rn_writefd != -1)
1286 error = rumpuser_open(rn->rn_hostpath,
1287 RUMPUSER_OPEN_WRONLY, &rn->rn_writefd);
1367 etread(struct rumpfs_node *rn, struct uio *uio)
1381 if ((error = rumpuser_iovread(rn->rn_readfd, &iov, 1,
1382 uio->uio_offset + rn->rn_offset, &n)) == 0) {
1401 struct rumpfs_node *rn
1412 if (rn->rn_flags & RUMPNODE_ET_PHONE_HOST)
1413 return etread(rn, uio);
1420 chunk = MIN(uio->uio_resid, (off_t)rn->rn_dlen-uio->uio_offset);
1433 etwrite(struct rumpfs_node *rn, struct uio *uio)
1451 if ((error = rumpuser_iovwrite(rn->rn_writefd, &iov, 1,
1452 (uio->uio_offset-bufsize) + rn->rn_offset, &n)) == 0) {
1472 struct rumpfs_node *rn = vp->v_data;
1489 if (rn->rn_flags & RUMPNODE_ET_PHONE_HOST)
1490 return etwrite(rn, uio);
1505 if (rn->rn_dlen < newlen) {
1506 oldlen = rn->rn_dlen;
1507 olddata = rn->rn_data;
1509 rn->rn_data = rump_hypermalloc(newlen, 0, false, "rumpfs");
1510 if (rn->rn_data == NULL)
1512 rn->rn_dlen = newlen;
1513 memset(rn->rn_data, 0, newlen);
1515 memcpy(rn->rn_data, olddata, oldlen);
1522 chunk = MIN(uio->uio_resid, (off_t)rn->rn_dlen-uio->uio_offset);
1533 rump_hyperfree(rn->rn_data, newlen);
1534 rn->rn_data = olddata;
1535 rn->rn_dlen = oldlen;
1538 if ((rn->rn_flags & RUMPNODE_EXTSTORAGE) == 0) {
1541 rn->rn_flags &= ~RUMPNODE_EXTSTORAGE;
1579 struct rumpfs_node *rn = vp->v_data;
1584 if (vp->v_type != VREG || rn->rn_flags & RUMPNODE_ET_PHONE_HOST) {
1590 copylen = MIN(rn->rn_dlen - copyoff, bp->b_bcount);
1592 memcpy((uint8_t *)rn->rn_data + copyoff, bp->b_data, copylen);
1595 memcpy(bp->b_data, (uint8_t *)rn->rn_data + copyoff, copylen);
1668 struct rumpfs_node *rn = vp->v_data;
1670 if (rn->rn_flags & RUMPNODE_ET_PHONE_HOST && vp->v_type == VREG) {
1671 if (rn->rn_readfd != -1) {
1672 rumpuser_close(rn->rn_readfd);
1673 rn->rn_readfd = -1;
1675 if (rn->rn_writefd != -1) {
1676 rumpuser_close(rn->rn_writefd);
1677 rn->rn_writefd = -1;
1680 *ap->a_recycle = (rn->rn_flags & RUMPNODE_CANRECLAIM) ? true : false;
1692 struct rumpfs_node *rn = vp->v_data;
1697 rn->rn_vp = NULL;
1702 if (rn->rn_flags & RUMPNODE_CANRECLAIM) {
1704 && (rn->rn_flags & RUMPNODE_ET_PHONE_HOST) == 0
1705 && rn->rn_data) {
1706 if ((rn->rn_flags & RUMPNODE_EXTSTORAGE) == 0) {
1707 rump_hyperfree(rn->rn_data, rn->rn_dlen);
1709 rn->rn_flags &= ~RUMPNODE_EXTSTORAGE;
1711 rn->rn_data = NULL;
1715 PNBUF_PUT(rn->rn_linktarg);
1716 if (rn->rn_hostpath)
1717 free(rn->rn_hostpath, M_TEMP);
1718 freeprivate(rn);
1762 struct rumpfs_node *rn = vp->v_data;
1764 return lf_advlock(ap, &rn->rn_lockf, vp->v_size);
1779 struct rumpfs_node *rn = vp->v_data;
1799 if (vp->v_type != VREG || (rn->rn_flags & RUMPNODE_ET_PHONE_HOST))
1812 if (rn->rn_data && (rn->rn_flags & RUMPNODE_EXTSTORAGE) == 0) {
1813 rump_hyperfree(rn->rn_data, rn->rn_dlen);
1816 rn->rn_data = rfse->rfse_data;
1817 rn->rn_dlen = rfse->rfse_dlen;
1818 uvm_vnp_setsize(vp, rn->rn_dlen);
1819 rn->rn_flags |= RUMPNODE_EXTSTORAGE;
1863 struct rumpfs_node *rn;
1868 rn = makeprivate(VDIR, RUMPFS_DEFAULTMODE, NODEV, DEV_BSIZE, false);
1869 rn->rn_parent = rn;
1870 if ((error = vcache_get(mp, &rn, sizeof(rn), &rfsmp->rfsmp_rvp))
1872 freeprivate(rn);
1962 struct rumpfs_node *rn;
1967 KASSERT(key_len == sizeof(rn));
1968 memcpy(&rn, key, key_len);
1970 va = &rn->rn_va;
1985 vp->v_data = rn;
1989 rn->rn_vp = vp;