aboutsummaryrefslogtreecommitdiff
path: root/sys/fs/nullfs/null_vnops.c
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2016-02-17 19:43:03 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2016-02-17 19:43:03 +0000
commit830cd4b810a9f50568f3a3440fd7d950db38d4dd (patch)
tree58540661db6ffa79911a3c19cbae6e4f5bbf756d /sys/fs/nullfs/null_vnops.c
parentfa48f413ef6bced0595495a53589093ea137dc5e (diff)
downloadsrc-830cd4b810a9f50568f3a3440fd7d950db38d4dd.tar.gz
src-830cd4b810a9f50568f3a3440fd7d950db38d4dd.zip
After nullfs rmdir operation, reclaim the directory vnode which was
unlinked. Otherwise the vnode stays cached, causing leak. This is similar to r292961 for regular files. Reported and tested by: pho (previous version) Sponsored by: The FreeBSD Foundation MFC after: 1 week
Notes
Notes: svn path=/head/; revision=295717
Diffstat (limited to 'sys/fs/nullfs/null_vnops.c')
-rw-r--r--sys/fs/nullfs/null_vnops.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/fs/nullfs/null_vnops.c b/sys/fs/nullfs/null_vnops.c
index 72b884f65cac..ec7d0462638f 100644
--- a/sys/fs/nullfs/null_vnops.c
+++ b/sys/fs/nullfs/null_vnops.c
@@ -619,6 +619,14 @@ null_rename(struct vop_rename_args *ap)
return (null_bypass((struct vop_generic_args *)ap));
}
+static int
+null_rmdir(struct vop_rmdir_args *ap)
+{
+
+ VTONULL(ap->a_vp)->null_flags |= NULLV_DROP;
+ return (null_bypass(&ap->a_gen));
+}
+
/*
* We need to process our own vnode lock and then clear the
* interlock flag as it applies only to our vnode, not the
@@ -920,6 +928,7 @@ struct vop_vector null_vnodeops = {
.vop_reclaim = null_reclaim,
.vop_remove = null_remove,
.vop_rename = null_rename,
+ .vop_rmdir = null_rmdir,
.vop_setattr = null_setattr,
.vop_strategy = VOP_EOPNOTSUPP,
.vop_unlock = null_unlock,