Module Name:    src
Committed By:   christos
Date:           Fri Sep 13 13:58:53 UTC 2019

Modified Files:
        src/sys/sys: namei.src

Log Message:
- make nc_nlen short since we can now accommodate more than len 256 names.
- reorder the struct to have the lists first for performance
- put name last and make it variable length
- add an assert to make sure we don't waster space
- bump the size we can store in the pool a little because we have more space
  now because of alignment.


To generate a diff of this commit:
cvs rdiff -u -r1.42 -r1.43 src/sys/sys/namei.src

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/sys/namei.src
diff -u src/sys/sys/namei.src:1.42 src/sys/sys/namei.src:1.43
--- src/sys/sys/namei.src:1.42	Mon Jun  3 02:04:21 2019
+++ src/sys/sys/namei.src	Fri Sep 13 09:58:53 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: namei.src,v 1.42 2019/06/03 06:04:21 msaitoh Exp $	*/
+/*	$NetBSD: namei.src,v 1.43 2019/09/13 13:58:53 christos Exp $	*/
 
 /*
  * Copyright (c) 1985, 1989, 1991, 1993
@@ -187,20 +187,17 @@ NAMEIFL	PARAMASK	0x02ee300	/* mask of pa
 
 #endif
 
+#ifdef __NAMECACHE_PRIVATE
 /*
- * This structure describes the elements in the cache of recent
- * names looked up by namei. NCHNAMLEN is sized to make structure
- * size a power of two to optimize allocations.  Minimum reasonable
- * size is 15.
+ * For simplicity (and economy of storage), names longer than
+ * a maximum length of NCHNAMLEN are stored in non-pooled storage.
  */
-
-#define	NCHNAMLEN	31	/* maximum name segment length we bother with */
+#define	NCHNAMLEN	32	/* up to this size gets stored in pool */
 
 /*
- * Namecache entry.  This structure is arranged so that frequently
- * accessed and mostly read-only data is toward the front, with
- * infrequently accessed data and the lock towards the rear.  The
- * lock is then more likely to be in a separate cache line.
+ * Namecache entry.  
+ * This structure describes the elements in the cache of recent
+ * names looked up by namei.
  *
  * Locking rules:
  *
@@ -214,18 +211,21 @@ NAMEIFL	PARAMASK	0x02ee300	/* mask of pa
 struct namecache {
 	LIST_ENTRY(namecache) nc_hash;	/* L/C hash chain */
 	LIST_ENTRY(namecache) nc_vhash;	/* L directory hash chain */
+	TAILQ_ENTRY(namecache) nc_lru;	/* L pseudo-lru chain */
+	LIST_ENTRY(namecache) nc_dvlist;/* L dvp's list of cache entries */
+	LIST_ENTRY(namecache) nc_vlist; /* L vp's list of cache entries */
 	struct	vnode *nc_dvp;		/* N vnode of parent of name */
 	struct	vnode *nc_vp;		/* N vnode the name refers to */
-	int	nc_flags;		/* - copy of componentname ISWHITEOUT */
-	char	nc_nlen;		/* - length of name */
-	char	nc_name[NCHNAMLEN];	/* - segment name */
 	void	*nc_gcqueue;		/* N queue for garbage collection */
-	TAILQ_ENTRY(namecache) nc_lru;	/* L psuedo-lru chain */
-	LIST_ENTRY(namecache) nc_dvlist;/* L dvp's list of cache entries */
-	LIST_ENTRY(namecache) nc_vlist; /* L vp's list of cache entries */
 	kmutex_t nc_lock;		/*   lock on this entry */
 	int	nc_hittime;		/* N last time scored a hit */
+	int	nc_flags;		/* - copy of componentname ISWHITEOUT */
+	u_short	nc_nlen;		/* - length of name */
+	char	nc_name[0];		/* - segment name */
 };
+__CTASSERT((sizeof(struct namecache) + NCHNAMLEN)
+    % __alignof(struct namecache) == 0);
+#endif
 
 #ifdef _KERNEL
 #include <sys/pool.h>

Reply via email to