Add a vclean_unlocked() call that allows HAMMER to try to get rid of a
authorMatthew Dillon <dillon@dragonflybsd.org>
Sat, 12 Jul 2008 01:09:46 +0000 (01:09 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Sat, 12 Jul 2008 01:09:46 +0000 (01:09 +0000)
vnode.

sys/kern/vfs_subr.c
sys/sys/vnode.h

index 30249bf..6e80097 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)vfs_subr.c  8.31 (Berkeley) 5/26/95
  * $FreeBSD: src/sys/kern/vfs_subr.c,v 1.249.2.30 2003/04/04 20:35:57 tegge Exp $
- * $DragonFly: src/sys/kern/vfs_subr.c,v 1.114 2008/05/18 05:54:25 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_subr.c,v 1.115 2008/07/12 01:09:46 dillon Exp $
  */
 
 /*
@@ -1055,6 +1055,23 @@ addaliasu(struct vnode *nvp, int x, int y)
        nvp->v_uminor = y;
 }
 
+/*
+ * Simple call that a filesystem can make to try to get rid of a
+ * vnode.  It will fail if anyone is referencing the vnode (including
+ * the caller).
+ *
+ * The filesystem can check whether its in-memory inode structure still
+ * references the vp on return.
+ */
+void
+vclean_unlocked(struct vnode *vp)
+{
+       vx_get(vp);
+       if (sysref_isactive(&vp->v_sysref) == 0)
+               vclean_vxlocked(vp, 0);
+       vx_put(vp);
+}
+
 /*
  * Disassociate a vnode from its underlying filesystem. 
  *
index 15e357f..350ae6c 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)vnode.h     8.7 (Berkeley) 2/4/94
  * $FreeBSD: src/sys/sys/vnode.h,v 1.111.2.19 2002/12/29 18:19:53 dillon Exp $
- * $DragonFly: src/sys/sys/vnode.h,v 1.81 2008/07/01 02:02:55 dillon Exp $
+ * $DragonFly: src/sys/sys/vnode.h,v 1.82 2008/07/12 01:09:45 dillon Exp $
  */
 
 #ifndef _SYS_VNODE_H_
@@ -476,6 +476,7 @@ int vmntvnodescan(struct mount *mp, int flags,
 void   insmntque(struct vnode *vp, struct mount *mp);
 
 void   vclean_vxlocked (struct vnode *vp, int flags);
+void   vclean_unlocked (struct vnode *vp);
 void   vgone_vxlocked (struct vnode *vp);
 void   vupdatefsmid (struct vnode *vp);
 int    vinvalbuf (struct vnode *vp, int save, int slpflag, int slptimeo);