summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMerlin Scholz <merlin@scholz.ruhr>2023-05-31 02:02:40 +0200
committerMerlin Scholz <merlin@scholz.ruhr>2023-07-19 19:38:47 +0200
commit8654ce02872d6d32a63860294c2935efff29efd2 (patch)
treed81d078ce21d730fc76fc69ec157574d525c5e01
parent9197215d550315fea0dae1ab7369800b5d097761 (diff)
Fix logic errors in VFS subsys lockdoc memory loggin
-rw-r--r--sys/kern/vfs_vnode.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/kern/vfs_vnode.c b/sys/kern/vfs_vnode.c
index 2ae94366266..4e8f504d33c 100644
--- a/sys/kern/vfs_vnode.c
+++ b/sys/kern/vfs_vnode.c
@@ -184,6 +184,11 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.149 2023/02/24 11:02:27 riastradh Ex
#include <uvm/uvm_stat.h>
#ifdef LOCKDOC
+/*
+ * LOCKDOC TODO: Right now, only completely free'd vnodes are being logged
+ * as free'd by FAIL*. Evaluate, whether recycled vnodes need to be handled
+ * as well.
+ */
#include <sys/lockdoc.h>
#endif
@@ -997,6 +1002,9 @@ out:
}
membar_acquire();
+ // LOCKDOC TEST CODE
+ KASSERT(VSTATE_GET(vp) == VS_RECLAIMED);
+
if (VSTATE_GET(vp) == VS_RECLAIMED && vp->v_holdcnt == 0) {
/*
* It's clean so destroy it. It isn't referenced
@@ -1427,7 +1435,7 @@ vcache_dealloc(vnode_impl_t *vip)
/*
* LOCKDOC: No log_memory here, since vrelel calls
- * vcache_free or vcache_reclaim at some point
+ * vcache_free directly or defers the freeing
*/
vrelel(vp, 0, LK_NONE);
}
@@ -1955,10 +1963,6 @@ vcache_reclaim(vnode_t *vp)
mutex_enter(vp->v_interlock);
fstrans_done(mp);
KASSERT((vp->v_iflag & VI_ONWORKLST) == 0);
-
-#ifdef LOCKDOC
- lockdoc_log_memory(0, "vnode_impl", vip, sizeof(*vip));
-#endif
}
/*