summaryrefslogtreecommitdiffstats
path: root/sys/fs/tmpfs/tmpfs_vnops.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2017-02-02 13:36:07 +0000
committerkib <kib@FreeBSD.org>2017-02-02 13:36:07 +0000
commit5a7588aafe7158db9d13f570db546f5e6ab45186 (patch)
tree24fddd2e1c8db8fcc28868b30538b8202d399780 /sys/fs/tmpfs/tmpfs_vnops.c
parentadaaf7e7e0a793e8615f1164cf0f38e56d0b4339 (diff)
downloadFreeBSD-src-5a7588aafe7158db9d13f570db546f5e6ab45186.zip
FreeBSD-src-5a7588aafe7158db9d13f570db546f5e6ab45186.tar.gz
MFC r312428:
Refcount tmpfs nodes and mount structures.
Diffstat (limited to 'sys/fs/tmpfs/tmpfs_vnops.c')
-rw-r--r--sys/fs/tmpfs/tmpfs_vnops.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/fs/tmpfs/tmpfs_vnops.c b/sys/fs/tmpfs/tmpfs_vnops.c
index 912d48b..6463fa6 100644
--- a/sys/fs/tmpfs/tmpfs_vnops.c
+++ b/sys/fs/tmpfs/tmpfs_vnops.c
@@ -82,7 +82,8 @@ tmpfs_lookup(struct vop_cachedlookup_args *v)
struct vnode **vpp = v->a_vpp;
struct componentname *cnp = v->a_cnp;
struct tmpfs_dirent *de;
- struct tmpfs_node *dnode;
+ struct tmpfs_node *dnode, *pnode;
+ struct tmpfs_mount *tm;
int error;
dnode = VP_TO_TMPFS_DIR(dvp);
@@ -104,8 +105,12 @@ tmpfs_lookup(struct vop_cachedlookup_args *v)
goto out;
}
if (cnp->cn_flags & ISDOTDOT) {
+ tm = VFS_TO_TMPFS(dvp->v_mount);
+ pnode = dnode->tn_dir.tn_parent;
+ tmpfs_ref_node(pnode);
error = vn_vget_ino_gen(dvp, tmpfs_vn_get_ino_alloc,
- dnode->tn_dir.tn_parent, cnp->cn_lkflags, vpp);
+ pnode, cnp->cn_lkflags, vpp);
+ tmpfs_free_node(tm, pnode);
if (error != 0)
goto out;
} else if (cnp->cn_namelen == 1 && cnp->cn_nameptr[0] == '.') {
OpenPOWER on IntegriCloud