svn commit: r362888 - head/sys/kern

Mateusz Guzik mjg at FreeBSD.org
Thu Jul 2 12:54:51 UTC 2020


Author: mjg
Date: Thu Jul  2 12:54:50 2020
New Revision: 362888
URL: https://svnweb.freebsd.org/changeset/base/362888

Log:
  cache: fix misplaced fence in cache_ncp_invalidate
  
  The intent was to mark the entry as invalid before cache_zap starts messing
  with it.
  
  While here add some comments.

Modified:
  head/sys/kern/vfs_cache.c

Modified: head/sys/kern/vfs_cache.c
==============================================================================
--- head/sys/kern/vfs_cache.c	Thu Jul  2 10:44:45 2020	(r362887)
+++ head/sys/kern/vfs_cache.c	Thu Jul  2 12:54:50 2020	(r362888)
@@ -147,22 +147,33 @@ struct	namecache_ts {
 #define	NCF_HOTNEGATIVE	0x40
 #define NCF_INVALID	0x80
 
-static bool
-cache_ncp_invalid(struct namecache *ncp)
-{
-
-	atomic_thread_fence_acq();
-	return ((ncp->nc_flag & NCF_INVALID) != 0);
-}
-
+/*
+ * Mark an entry as invalid.
+ *
+ * This is called before it starts getting deconstructed.
+ */
 static void
 cache_ncp_invalidate(struct namecache *ncp)
 {
 
-	atomic_thread_fence_rel();
 	KASSERT((ncp->nc_flag & NCF_INVALID) == 0,
 	    ("%s: entry %p already invalid", __func__, ncp));
 	ncp->nc_flag |= NCF_INVALID;
+	atomic_thread_fence_rel();
+}
+
+/*
+ * Verify validity of an entry.
+ *
+ * All places which elide locks are supposed to call this after they are
+ * done with reading from an entry.
+ */
+static bool
+cache_ncp_invalid(struct namecache *ncp)
+{
+
+	atomic_thread_fence_acq();
+	return ((ncp->nc_flag & NCF_INVALID) != 0);
 }
 
 /*


More information about the svn-src-head mailing list