Page MenuHomeFreeBSD

D20519.id58248.diff
No OneTemporary

D20519.id58248.diff

Index: sys/kern/vfs_subr.c
===================================================================
--- sys/kern/vfs_subr.c
+++ sys/kern/vfs_subr.c
@@ -339,6 +339,54 @@
SYSCTL_INT(_debug, OID_AUTO, vnlru_nowhere, CTLFLAG_RW,
&vnlru_nowhere, 0, "Number of times the vnlru process ran without success");
+#ifdef INVARIANTS
+static int
+sysctl_try_reclaim_vnode(SYSCTL_HANDLER_ARGS)
+{
+ struct vnode *vp;
+ struct nameidata nd;
+ char buf[PATH_MAX];
+ int error;
+
+ if (req->newptr == NULL)
+ return (EINVAL);
+
+ if (req->newlen > sizeof(buf))
+ return (E2BIG);
+
+ error = SYSCTL_IN(req, buf, req->newlen);
+ if (error != 0)
+ return (error);
+
+ buf[req->newlen] = '\0';
+
+ NDINIT(&nd, LOOKUP,
+ LOCKLEAF| NOFOLLOW | AUDITVNODE1 | NOCACHE | SAVENAME,
+ UIO_SYSSPACE, buf, curthread);
+ if ((error = namei(&nd)) != 0)
+ return (error);
+ vp = nd.ni_vp;
+ NDFREE(&nd, NDF_NO_FREE_PNBUF | NDF_NO_VP_UNLOCK | NDF_NO_VP_RELE);
+
+ if (vp->v_usecount > 1 || (vp->v_iflag & VI_DOOMED)) {
+ vput(vp);
+ return (EBUSY);
+ }
+
+ vhold(vp);
+ counter_u64_add(recycles_count, 1);
+ vgone(vp);
+ vdrop(vp);
+ vput(vp);
+
+ return (0);
+}
+
+SYSCTL_PROC(_debug, OID_AUTO, try_reclaim_vnode,
+ CTLTYPE_STRING | CTLFLAG_MPSAFE | CTLFLAG_WR, NULL, 0,
+ sysctl_try_reclaim_vnode, "A", "Try to reclaim a vnode by its pathname");
+#endif /* INVARIANTS */
+
/* Shift count for (uintptr_t)vp to initialize vp->v_hash. */
static int vnsz2log;

File Metadata

Mime Type
text/plain
Expires
Sun, Jul 26, 2:27 PM (10 m, 19 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35537122
Default Alt Text
D20519.id58248.diff (1 KB)

Event Timeline