- struct vnode *targetvp;
-#ifdef NULLFS_DIAGNOSTIC
- printf("null_reclaim(ap->a_vp = %x->%x)\n", ap->a_vp, NULLVPTOLOWERVP(ap->a_vp));
+ struct vnode *vp = ap->a_vp;
+ struct null_node *xp = VTONULL(vp);
+ struct vnode *lowervp = xp->null_lowervp;
+
+#ifdef AVOID_CACHING
+ return 0;
+#else
+ /*
+ * Note: at this point, vp->v_op == dead_vnodeop_p,
+ * so we can't call VOPs on ourself.
+ */
+ /* After this assignment, this node will not be re-used. */
+#ifdef DIAGNOSTIC
+ if (lowervp->v_usecount == 1 && ISLOCKED(lowervp)) {
+ panic("null_reclaim: lowervp is locked but must go away.");
+ };
+#endif
+ xp->null_lowervp = NULL;
+ remque(xp);
+ FREE(vp->v_data, M_TEMP);
+ vp->v_data = NULL;
+ vrele (lowervp);
+ return 0;