svn commit: r363754 - in head/sys: kern sys

Mateusz Guzik mjg at FreeBSD.org
Sat Aug 1 06:33:39 UTC 2020


Author: mjg
Date: Sat Aug  1 06:33:38 2020
New Revision: 363754
URL: https://svnweb.freebsd.org/changeset/base/363754

Log:
  vfs: inline NDINIT_ALL
  
  The routine takes more than 6 arguments, which on amd64 means some of
  them have to be passed through the stack.

Modified:
  head/sys/kern/vfs_lookup.c
  head/sys/sys/namei.h

Modified: head/sys/kern/vfs_lookup.c
==============================================================================
--- head/sys/kern/vfs_lookup.c	Sat Aug  1 06:33:11 2020	(r363753)
+++ head/sys/kern/vfs_lookup.c	Sat Aug  1 06:33:38 2020	(r363754)
@@ -1365,25 +1365,6 @@ bad:
 	return (error);
 }
 
-void
-NDINIT_ALL(struct nameidata *ndp, u_long op, u_long flags, enum uio_seg segflg,
-    const char *namep, int dirfd, struct vnode *startdir, cap_rights_t *rightsp,
-    struct thread *td)
-{
-
-	MPASS(rightsp != NULL);
-	ndp->ni_cnd.cn_nameiop = op;
-	ndp->ni_cnd.cn_flags = flags;
-	ndp->ni_segflg = segflg;
-	ndp->ni_dirp = namep;
-	ndp->ni_dirfd = dirfd;
-	ndp->ni_startdir = startdir;
-	ndp->ni_resflags = 0;
-	filecaps_init(&ndp->ni_filecaps);
-	ndp->ni_cnd.cn_thread = td;
-	ndp->ni_rightsneeded = rightsp;
-}
-
 /*
  * Free data allocated by namei(); see namei(9) for details.
  */

Modified: head/sys/sys/namei.h
==============================================================================
--- head/sys/sys/namei.h	Sat Aug  1 06:33:11 2020	(r363753)
+++ head/sys/sys/namei.h	Sat Aug  1 06:33:38 2020	(r363754)
@@ -196,9 +196,22 @@ int	cache_fplookup(struct nameidata *ndp, enum cache_f
 #define	NDINIT_ATVP(ndp, op, flags, segflg, namep, vp, td)		\
 	NDINIT_ALL(ndp, op, flags, segflg, namep, AT_FDCWD, vp, &cap_no_rights, td)
 
-void NDINIT_ALL(struct nameidata *ndp, u_long op, u_long flags,
-    enum uio_seg segflg, const char *namep, int dirfd, struct vnode *startdir,
-    cap_rights_t *rightsp, struct thread *td);
+#define NDINIT_ALL(ndp, op, flags, segflg, namep, dirfd, startdir, rightsp, td)	\
+do {										\
+	struct nameidata *_ndp = (ndp);						\
+	cap_rights_t *_rightsp = (rightsp);					\
+	MPASS(_rightsp != NULL);						\
+	_ndp->ni_cnd.cn_nameiop = op;						\
+	_ndp->ni_cnd.cn_flags = flags;						\
+	_ndp->ni_segflg = segflg;						\
+	_ndp->ni_dirp = namep;							\
+	_ndp->ni_dirfd = dirfd;							\
+	_ndp->ni_startdir = startdir;						\
+	_ndp->ni_resflags = 0;							\
+	filecaps_init(&_ndp->ni_filecaps);					\
+	_ndp->ni_cnd.cn_thread = td;						\
+	_ndp->ni_rightsneeded = _rightsp;					\
+} while (0)
 
 #define NDF_NO_DVP_RELE		0x00000001
 #define NDF_NO_DVP_UNLOCK	0x00000002


More information about the svn-src-all mailing list