Module Name:    src
Committed By:   dholland
Date:           Tue Jun 29 22:34:10 UTC 2021

Modified Files:
        src/sys/coda: coda_vnops.c
        src/sys/fs/adosfs: advnops.c
        src/sys/fs/autofs: autofs_vnops.c
        src/sys/fs/cd9660: cd9660_vnops.c
        src/sys/fs/efs: efs_vnops.c
        src/sys/fs/filecorefs: filecore_vnops.c
        src/sys/fs/hfs: hfs_vnops.c
        src/sys/fs/msdosfs: msdosfs_vnops.c
        src/sys/fs/nilfs: nilfs_vnops.c
        src/sys/fs/ntfs: ntfs_vnops.c
        src/sys/fs/ptyfs: ptyfs_vnops.c
        src/sys/fs/puffs: puffs_vnops.c
        src/sys/fs/sysvbfs: sysvbfs.c
        src/sys/fs/tmpfs: tmpfs_fifoops.c tmpfs_specops.c tmpfs_vnops.c
        src/sys/fs/udf: udf_vnops.c
        src/sys/fs/union: union_vnops.c
        src/sys/fs/unionfs: unionfs_vnops.c
        src/sys/fs/v7fs: v7fs_extern.c
        src/sys/kern: vfs_lookup.c vnode_if.src
        src/sys/miscfs/deadfs: dead_vnops.c
        src/sys/miscfs/fdesc: fdesc_vnops.c
        src/sys/miscfs/fifofs: fifo_vnops.c
        src/sys/miscfs/genfs: genfs.h genfs_vnops.c
        src/sys/miscfs/kernfs: kernfs_vnops.c
        src/sys/miscfs/procfs: procfs_vnops.c
        src/sys/miscfs/specfs: spec_vnops.c
        src/sys/nfs: nfs_vnops.c
        src/sys/rump/librump/rumpvfs: rumpfs.c
        src/sys/ufs/chfs: chfs_vnops.c
        src/sys/ufs/ext2fs: ext2fs_vnops.c
        src/sys/ufs/ffs: ffs_vnops.c
        src/sys/ufs/lfs: lfs_vnops.c
        src/sys/ufs/mfs: mfs_vnops.c

Log Message:
- Add a new vnode op: VOP_PARSEPATH.
 - Move namei_getcomponent to genfs_vnops.c and call it genfs_parsepath.
 - Add a parsepath entry to every vnode ops table.

VOP_PARSEPATH takes a directory vnode to be searched and a complete
following path and chooses how much of that path to consume. To begin
with, all parsepath calls are genfs_parsepath, which locates the first
'/' as always.

Note that the call doesn't take the whole struct componentname, only
the string. The other bits of struct componentname should not be
needed and there's no reason to cause potential complications by
exposing them.


To generate a diff of this commit:
cvs rdiff -u -r1.114 -r1.115 src/sys/coda/coda_vnops.c
cvs rdiff -u -r1.55 -r1.56 src/sys/fs/adosfs/advnops.c
cvs rdiff -u -r1.6 -r1.7 src/sys/fs/autofs/autofs_vnops.c
cvs rdiff -u -r1.58 -r1.59 src/sys/fs/cd9660/cd9660_vnops.c
cvs rdiff -u -r1.41 -r1.42 src/sys/fs/efs/efs_vnops.c
cvs rdiff -u -r1.47 -r1.48 src/sys/fs/filecorefs/filecore_vnops.c
cvs rdiff -u -r1.36 -r1.37 src/sys/fs/hfs/hfs_vnops.c
cvs rdiff -u -r1.104 -r1.105 src/sys/fs/msdosfs/msdosfs_vnops.c
cvs rdiff -u -r1.42 -r1.43 src/sys/fs/nilfs/nilfs_vnops.c
cvs rdiff -u -r1.65 -r1.66 src/sys/fs/ntfs/ntfs_vnops.c
cvs rdiff -u -r1.63 -r1.64 src/sys/fs/ptyfs/ptyfs_vnops.c
cvs rdiff -u -r1.217 -r1.218 src/sys/fs/puffs/puffs_vnops.c
cvs rdiff -u -r1.18 -r1.19 src/sys/fs/sysvbfs/sysvbfs.c
cvs rdiff -u -r1.12 -r1.13 src/sys/fs/tmpfs/tmpfs_fifoops.c
cvs rdiff -u -r1.13 -r1.14 src/sys/fs/tmpfs/tmpfs_specops.c
cvs rdiff -u -r1.145 -r1.146 src/sys/fs/tmpfs/tmpfs_vnops.c
cvs rdiff -u -r1.114 -r1.115 src/sys/fs/udf/udf_vnops.c
cvs rdiff -u -r1.74 -r1.75 src/sys/fs/union/union_vnops.c
cvs rdiff -u -r1.14 -r1.15 src/sys/fs/unionfs/unionfs_vnops.c
cvs rdiff -u -r1.7 -r1.8 src/sys/fs/v7fs/v7fs_extern.c
cvs rdiff -u -r1.227 -r1.228 src/sys/kern/vfs_lookup.c
cvs rdiff -u -r1.80 -r1.81 src/sys/kern/vnode_if.src
cvs rdiff -u -r1.63 -r1.64 src/sys/miscfs/deadfs/dead_vnops.c
cvs rdiff -u -r1.136 -r1.137 src/sys/miscfs/fdesc/fdesc_vnops.c
cvs rdiff -u -r1.82 -r1.83 src/sys/miscfs/fifofs/fifo_vnops.c
cvs rdiff -u -r1.36 -r1.37 src/sys/miscfs/genfs/genfs.h
cvs rdiff -u -r1.210 -r1.211 src/sys/miscfs/genfs/genfs_vnops.c
cvs rdiff -u -r1.167 -r1.168 src/sys/miscfs/kernfs/kernfs_vnops.c
cvs rdiff -u -r1.216 -r1.217 src/sys/miscfs/procfs/procfs_vnops.c
cvs rdiff -u -r1.181 -r1.182 src/sys/miscfs/specfs/spec_vnops.c
cvs rdiff -u -r1.317 -r1.318 src/sys/nfs/nfs_vnops.c
cvs rdiff -u -r1.162 -r1.163 src/sys/rump/librump/rumpvfs/rumpfs.c
cvs rdiff -u -r1.42 -r1.43 src/sys/ufs/chfs/chfs_vnops.c
cvs rdiff -u -r1.132 -r1.133 src/sys/ufs/ext2fs/ext2fs_vnops.c
cvs rdiff -u -r1.133 -r1.134 src/sys/ufs/ffs/ffs_vnops.c
cvs rdiff -u -r1.336 -r1.337 src/sys/ufs/lfs/lfs_vnops.c
cvs rdiff -u -r1.61 -r1.62 src/sys/ufs/mfs/mfs_vnops.c

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

Modified files:

Index: src/sys/coda/coda_vnops.c
diff -u src/sys/coda/coda_vnops.c:1.114 src/sys/coda/coda_vnops.c:1.115
--- src/sys/coda/coda_vnops.c:1.114	Sat Nov 14 11:42:56 2020
+++ src/sys/coda/coda_vnops.c	Tue Jun 29 22:34:05 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: coda_vnops.c,v 1.114 2020/11/14 11:42:56 hannken Exp $	*/
+/*	$NetBSD: coda_vnops.c,v 1.115 2021/06/29 22:34:05 dholland Exp $	*/
 
 /*
  *
@@ -46,7 +46,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.114 2020/11/14 11:42:56 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.115 2021/06/29 22:34:05 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -101,6 +101,7 @@ static int coda_lockdebug = 0;
 
 const struct vnodeopv_entry_desc coda_vnodeop_entries[] = {
     { &vop_default_desc, coda_vop_error },
+    { &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
     { &vop_lookup_desc, coda_lookup },		/* lookup */
     { &vop_create_desc, coda_create },		/* create */
     { &vop_mknod_desc, coda_vop_error },	/* mknod */

Index: src/sys/fs/adosfs/advnops.c
diff -u src/sys/fs/adosfs/advnops.c:1.55 src/sys/fs/adosfs/advnops.c:1.56
--- src/sys/fs/adosfs/advnops.c:1.55	Sat Jun 27 17:29:17 2020
+++ src/sys/fs/adosfs/advnops.c	Tue Jun 29 22:34:05 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: advnops.c,v 1.55 2020/06/27 17:29:17 christos Exp $	*/
+/*	$NetBSD: advnops.c,v 1.56 2021/06/29 22:34:05 dholland Exp $	*/
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: advnops.c,v 1.55 2020/06/27 17:29:17 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: advnops.c,v 1.56 2021/06/29 22:34:05 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -95,6 +95,7 @@ int	adosfs_pathconf(void *);
 
 const struct vnodeopv_entry_desc adosfs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, adosfs_lookup },		/* lookup */
 	{ &vop_create_desc, adosfs_create },		/* create */
 	{ &vop_mknod_desc, adosfs_mknod },		/* mknod */

Index: src/sys/fs/autofs/autofs_vnops.c
diff -u src/sys/fs/autofs/autofs_vnops.c:1.6 src/sys/fs/autofs/autofs_vnops.c:1.7
--- src/sys/fs/autofs/autofs_vnops.c:1.6	Sat May 16 18:31:48 2020
+++ src/sys/fs/autofs/autofs_vnops.c	Tue Jun 29 22:34:06 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: autofs_vnops.c,v 1.6 2020/05/16 18:31:48 christos Exp $	*/
+/*	$NetBSD: autofs_vnops.c,v 1.7 2021/06/29 22:34:06 dholland Exp $	*/
 /*-
  * Copyright (c) 2017 The NetBSD Foundation, Inc.
  * Copyright (c) 2016 The DragonFly Project
@@ -34,7 +34,7 @@
  *
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autofs_vnops.c,v 1.6 2020/05/16 18:31:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autofs_vnops.c,v 1.7 2021/06/29 22:34:06 dholland Exp $");
 
 #include "autofs.h"
 
@@ -587,6 +587,7 @@ autofs_reclaim(void *v)
 int (**autofs_vnodeop_p)(void *);
 static const struct vnodeopv_entry_desc autofs_vnodeop_entries[] = {
 	{ &vop_default_desc,	vn_default_error },
+	{ &vop_parsepath_desc,	genfs_parsepath },
 	{ &vop_lookup_desc,	autofs_lookup },
 	{ &vop_open_desc,	autofs_open },
 	{ &vop_close_desc,	autofs_close },

Index: src/sys/fs/cd9660/cd9660_vnops.c
diff -u src/sys/fs/cd9660/cd9660_vnops.c:1.58 src/sys/fs/cd9660/cd9660_vnops.c:1.59
--- src/sys/fs/cd9660/cd9660_vnops.c:1.58	Sat Jun 27 17:29:17 2020
+++ src/sys/fs/cd9660/cd9660_vnops.c	Tue Jun 29 22:34:06 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: cd9660_vnops.c,v 1.58 2020/06/27 17:29:17 christos Exp $	*/
+/*	$NetBSD: cd9660_vnops.c,v 1.59 2021/06/29 22:34:06 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1994
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cd9660_vnops.c,v 1.58 2020/06/27 17:29:17 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cd9660_vnops.c,v 1.59 2021/06/29 22:34:06 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -849,6 +849,7 @@ cd9660_setattr(void *v)
 int (**cd9660_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc cd9660_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, cd9660_lookup },		/* lookup */
 	{ &vop_create_desc, cd9660_create },		/* create */
 	{ &vop_mknod_desc, cd9660_mknod },		/* mknod */
@@ -902,6 +903,7 @@ const struct vnodeopv_desc cd9660_vnodeo
 int (**cd9660_specop_p)(void *);
 const struct vnodeopv_entry_desc cd9660_specop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, spec_lookup },		/* lookup */
 	{ &vop_create_desc, spec_create },		/* create */
 	{ &vop_mknod_desc, spec_mknod },		/* mknod */
@@ -953,6 +955,7 @@ const struct vnodeopv_desc cd9660_specop
 int (**cd9660_fifoop_p)(void *);
 const struct vnodeopv_entry_desc cd9660_fifoop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, vn_fifo_bypass },		/* lookup */
 	{ &vop_create_desc, vn_fifo_bypass },		/* create */
 	{ &vop_mknod_desc, vn_fifo_bypass },		/* mknod */

Index: src/sys/fs/efs/efs_vnops.c
diff -u src/sys/fs/efs/efs_vnops.c:1.41 src/sys/fs/efs/efs_vnops.c:1.42
--- src/sys/fs/efs/efs_vnops.c:1.41	Sat Jun 27 17:29:17 2020
+++ src/sys/fs/efs/efs_vnops.c	Tue Jun 29 22:34:06 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: efs_vnops.c,v 1.41 2020/06/27 17:29:17 christos Exp $	*/
+/*	$NetBSD: efs_vnops.c,v 1.42 2021/06/29 22:34:06 dholland Exp $	*/
 
 /*
  * Copyright (c) 2006 Stephen M. Rumble <rum...@ephemeral.org>
@@ -17,7 +17,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: efs_vnops.c,v 1.41 2020/06/27 17:29:17 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: efs_vnops.c,v 1.42 2021/06/29 22:34:06 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -783,6 +783,7 @@ efs_advlock(void *v)
 int (**efs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc efs_vnodeop_entries[] = {
 	{ &vop_default_desc,	vn_default_error},	/* error handler */
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc,	efs_lookup	},	/* lookup */
 	{ &vop_create_desc,	genfs_eopnotsupp},	/* create */
 	{ &vop_mknod_desc,	genfs_eopnotsupp},	/* mknod */
@@ -842,6 +843,7 @@ const struct vnodeopv_desc efs_vnodeop_o
 int (**efs_specop_p)(void *);
 const struct vnodeopv_entry_desc efs_specop_entries[] = {
 	{ &vop_default_desc,	vn_default_error},	/* error handler */
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc,	spec_lookup	},	/* lookup */
 	{ &vop_create_desc,	spec_create	},	/* create */
 	{ &vop_mknod_desc,	spec_mknod	},	/* mknod */
@@ -901,6 +903,7 @@ const struct vnodeopv_desc efs_specop_op
 int (**efs_fifoop_p)(void *);
 const struct vnodeopv_entry_desc efs_fifoop_entries[] = {
 	{ &vop_default_desc,	vn_default_error},	/* error handler */
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc,	vn_fifo_bypass	},	/* lookup */
 	{ &vop_create_desc,	vn_fifo_bypass	},	/* create */
 	{ &vop_mknod_desc,	vn_fifo_bypass	},	/* mknod */

Index: src/sys/fs/filecorefs/filecore_vnops.c
diff -u src/sys/fs/filecorefs/filecore_vnops.c:1.47 src/sys/fs/filecorefs/filecore_vnops.c:1.48
--- src/sys/fs/filecorefs/filecore_vnops.c:1.47	Sat Jun 27 17:29:18 2020
+++ src/sys/fs/filecorefs/filecore_vnops.c	Tue Jun 29 22:34:06 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: filecore_vnops.c,v 1.47 2020/06/27 17:29:18 christos Exp $	*/
+/*	$NetBSD: filecore_vnops.c,v 1.48 2021/06/29 22:34:06 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1994 The Regents of the University of California.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: filecore_vnops.c,v 1.47 2020/06/27 17:29:18 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: filecore_vnops.c,v 1.48 2021/06/29 22:34:06 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -554,6 +554,7 @@ filecore_pathconf(void *v)
 int (**filecore_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc filecore_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, filecore_lookup },		/* lookup */
 	{ &vop_create_desc, filecore_create },		/* create */
 	{ &vop_mknod_desc, filecore_mknod },		/* mknod */

Index: src/sys/fs/hfs/hfs_vnops.c
diff -u src/sys/fs/hfs/hfs_vnops.c:1.36 src/sys/fs/hfs/hfs_vnops.c:1.37
--- src/sys/fs/hfs/hfs_vnops.c:1.36	Sat May 16 18:31:49 2020
+++ src/sys/fs/hfs/hfs_vnops.c	Tue Jun 29 22:34:06 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: hfs_vnops.c,v 1.36 2020/05/16 18:31:49 christos Exp $	*/
+/*	$NetBSD: hfs_vnops.c,v 1.37 2021/06/29 22:34:06 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2005, 2007 The NetBSD Foundation, Inc.
@@ -101,7 +101,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hfs_vnops.c,v 1.36 2020/05/16 18:31:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hfs_vnops.c,v 1.37 2021/06/29 22:34:06 dholland Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ipsec.h"
@@ -155,6 +155,7 @@ int	hfs_vop_print(void *);
 int (**hfs_vnodeop_p) (void *);
 const struct vnodeopv_entry_desc hfs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, hfs_vop_lookup },		/* lookup */
 	{ &vop_create_desc, genfs_eopnotsupp },		/* create */
 	{ &vop_whiteout_desc, genfs_eopnotsupp },	/* whiteout */
@@ -213,6 +214,7 @@ const struct vnodeopv_desc hfs_vnodeop_o
 int (**hfs_specop_p) (void *);
 const struct vnodeopv_entry_desc hfs_specop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, spec_lookup },		/* lookup */
 	{ &vop_create_desc, spec_create },		/* create */
 	{ &vop_mknod_desc, spec_mknod },		/* mknod */
@@ -272,6 +274,7 @@ const struct vnodeopv_desc hfs_specop_op
 int (**hfs_fifoop_p) (void *);
 const struct vnodeopv_entry_desc hfs_fifoop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, vn_fifo_bypass },		/* lookup */
 	{ &vop_create_desc, vn_fifo_bypass },		/* create */
 	{ &vop_mknod_desc, vn_fifo_bypass },		/* mknod */

Index: src/sys/fs/msdosfs/msdosfs_vnops.c
diff -u src/sys/fs/msdosfs/msdosfs_vnops.c:1.104 src/sys/fs/msdosfs/msdosfs_vnops.c:1.105
--- src/sys/fs/msdosfs/msdosfs_vnops.c:1.104	Sat Jun 27 17:29:18 2020
+++ src/sys/fs/msdosfs/msdosfs_vnops.c	Tue Jun 29 22:34:07 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: msdosfs_vnops.c,v 1.104 2020/06/27 17:29:18 christos Exp $	*/
+/*	$NetBSD: msdosfs_vnops.c,v 1.105 2021/06/29 22:34:07 dholland Exp $	*/
 
 /*-
  * Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank.
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: msdosfs_vnops.c,v 1.104 2020/06/27 17:29:18 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: msdosfs_vnops.c,v 1.105 2021/06/29 22:34:07 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1841,6 +1841,7 @@ msdosfs_detimes(struct denode *dep, cons
 int (**msdosfs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc msdosfs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, msdosfs_lookup },		/* lookup */
 	{ &vop_create_desc, msdosfs_create },		/* create */
 	{ &vop_mknod_desc, genfs_eopnotsupp },		/* mknod */

Index: src/sys/fs/nilfs/nilfs_vnops.c
diff -u src/sys/fs/nilfs/nilfs_vnops.c:1.42 src/sys/fs/nilfs/nilfs_vnops.c:1.43
--- src/sys/fs/nilfs/nilfs_vnops.c:1.42	Sat Jun 27 17:29:18 2020
+++ src/sys/fs/nilfs/nilfs_vnops.c	Tue Jun 29 22:34:07 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: nilfs_vnops.c,v 1.42 2020/06/27 17:29:18 christos Exp $	*/
+/*	$NetBSD: nilfs_vnops.c,v 1.43 2021/06/29 22:34:07 dholland Exp $	*/
 
 /*
  * Copyright (c) 2008, 2009 Reinoud Zandijk
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: nilfs_vnops.c,v 1.42 2020/06/27 17:29:18 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nilfs_vnops.c,v 1.43 2021/06/29 22:34:07 dholland Exp $");
 #endif /* not lint */
 
 
@@ -1543,6 +1543,7 @@ int (**nilfs_vnodeop_p) __P((void *));
 
 const struct vnodeopv_entry_desc nilfs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath }, /* parsepath */
 	{ &vop_lookup_desc, nilfs_lookup },	/* lookup */
 	{ &vop_create_desc, nilfs_create },	/* create */
 	{ &vop_mknod_desc, nilfs_mknod },	/* mknod */	/* TODO */

Index: src/sys/fs/ntfs/ntfs_vnops.c
diff -u src/sys/fs/ntfs/ntfs_vnops.c:1.65 src/sys/fs/ntfs/ntfs_vnops.c:1.66
--- src/sys/fs/ntfs/ntfs_vnops.c:1.65	Sat Jun 27 17:29:18 2020
+++ src/sys/fs/ntfs/ntfs_vnops.c	Tue Jun 29 22:34:07 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: ntfs_vnops.c,v 1.65 2020/06/27 17:29:18 christos Exp $	*/
+/*	$NetBSD: ntfs_vnops.c,v 1.66 2021/06/29 22:34:07 dholland Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.65 2020/06/27 17:29:18 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.66 2021/06/29 22:34:07 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -808,6 +808,7 @@ vop_t **ntfs_vnodeop_p;
 
 const struct vnodeopv_entry_desc ntfs_vnodeop_entries[] = {
 	{ &vop_default_desc, (vop_t *) ntfs_bypass },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, (vop_t *) ntfs_lookup },	/* lookup */
 	{ &vop_create_desc, genfs_eopnotsupp },		/* create */
 	{ &vop_mknod_desc, genfs_eopnotsupp },		/* mknod */

Index: src/sys/fs/ptyfs/ptyfs_vnops.c
diff -u src/sys/fs/ptyfs/ptyfs_vnops.c:1.63 src/sys/fs/ptyfs/ptyfs_vnops.c:1.64
--- src/sys/fs/ptyfs/ptyfs_vnops.c:1.63	Mon Jun 28 17:52:12 2021
+++ src/sys/fs/ptyfs/ptyfs_vnops.c	Tue Jun 29 22:34:07 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: ptyfs_vnops.c,v 1.63 2021/06/28 17:52:12 chs Exp $	*/
+/*	$NetBSD: ptyfs_vnops.c,v 1.64 2021/06/29 22:34:07 dholland Exp $	*/
 
 /*
  * Copyright (c) 1993, 1995
@@ -76,7 +76,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ptyfs_vnops.c,v 1.63 2021/06/28 17:52:12 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ptyfs_vnops.c,v 1.64 2021/06/29 22:34:07 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -166,6 +166,7 @@ static int atoi(const char *, size_t);
 int (**ptyfs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc ptyfs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, ptyfs_lookup },		/* lookup */
 	{ &vop_create_desc, ptyfs_create },		/* create */
 	{ &vop_mknod_desc, ptyfs_mknod },		/* mknod */

Index: src/sys/fs/puffs/puffs_vnops.c
diff -u src/sys/fs/puffs/puffs_vnops.c:1.217 src/sys/fs/puffs/puffs_vnops.c:1.218
--- src/sys/fs/puffs/puffs_vnops.c:1.217	Sat May 16 18:31:49 2020
+++ src/sys/fs/puffs/puffs_vnops.c	Tue Jun 29 22:34:07 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_vnops.c,v 1.217 2020/05/16 18:31:49 christos Exp $	*/
+/*	$NetBSD: puffs_vnops.c,v 1.218 2021/06/29 22:34:07 dholland Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006, 2007  Antti Kantee.  All Rights Reserved.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.217 2020/05/16 18:31:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.218 2021/06/29 22:34:07 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -105,6 +105,7 @@ int	puffs_vnop_checkop(void *);
 int (**puffs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc puffs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, puffs_vnop_lookup },	/* REAL lookup */
 	{ &vop_create_desc, puffs_vnop_checkop },	/* create */
         { &vop_mknod_desc, puffs_vnop_checkop },	/* mknod */
@@ -163,6 +164,7 @@ const struct vnodeopv_desc puffs_vnodeop
 int (**puffs_specop_p)(void *);
 const struct vnodeopv_entry_desc puffs_specop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, spec_lookup },		/* lookup, ENOTDIR */
 	{ &vop_create_desc, spec_create },		/* genfs_badop */
 	{ &vop_mknod_desc, spec_mknod },		/* genfs_badop */
@@ -223,6 +225,7 @@ const struct vnodeopv_desc puffs_specop_
 int (**puffs_fifoop_p)(void *);
 const struct vnodeopv_entry_desc puffs_fifoop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, vn_fifo_bypass },		/* lookup, ENOTDIR */
 	{ &vop_create_desc, vn_fifo_bypass },		/* genfs_badop */
 	{ &vop_mknod_desc, vn_fifo_bypass },		/* genfs_badop */
@@ -283,6 +286,7 @@ const struct vnodeopv_desc puffs_fifoop_
 int (**puffs_msgop_p)(void *);
 const struct vnodeopv_entry_desc puffs_msgop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },
 	{ &vop_create_desc, puffs_vnop_create },	/* create */
         { &vop_mknod_desc, puffs_vnop_mknod },		/* mknod */
         { &vop_open_desc, puffs_vnop_open },		/* open */

Index: src/sys/fs/sysvbfs/sysvbfs.c
diff -u src/sys/fs/sysvbfs/sysvbfs.c:1.18 src/sys/fs/sysvbfs/sysvbfs.c:1.19
--- src/sys/fs/sysvbfs/sysvbfs.c:1.18	Sat May 16 18:31:49 2020
+++ src/sys/fs/sysvbfs/sysvbfs.c	Tue Jun 29 22:34:07 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysvbfs.c,v 1.18 2020/05/16 18:31:49 christos Exp $	*/
+/*	$NetBSD: sysvbfs.c,v 1.19 2021/06/29 22:34:07 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysvbfs.c,v 1.18 2020/05/16 18:31:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysvbfs.c,v 1.19 2021/06/29 22:34:07 dholland Exp $");
 
 #include <sys/resource.h>
 #include <sys/param.h>
@@ -49,6 +49,7 @@ int (**sysvbfs_vnodeop_p)(void *);	/* fi
 
 const struct vnodeopv_entry_desc sysvbfs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, sysvbfs_lookup },		/* lookup */
 	{ &vop_create_desc, sysvbfs_create },		/* create */
 	{ &vop_mknod_desc, genfs_eopnotsupp },		/* mknod */

Index: src/sys/fs/tmpfs/tmpfs_fifoops.c
diff -u src/sys/fs/tmpfs/tmpfs_fifoops.c:1.12 src/sys/fs/tmpfs/tmpfs_fifoops.c:1.13
--- src/sys/fs/tmpfs/tmpfs_fifoops.c:1.12	Sat May 16 18:31:49 2020
+++ src/sys/fs/tmpfs/tmpfs_fifoops.c	Tue Jun 29 22:34:07 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: tmpfs_fifoops.c,v 1.12 2020/05/16 18:31:49 christos Exp $	*/
+/*	$NetBSD: tmpfs_fifoops.c,v 1.13 2021/06/29 22:34:07 dholland Exp $	*/
 
 /*
  * Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tmpfs_fifoops.c,v 1.12 2020/05/16 18:31:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tmpfs_fifoops.c,v 1.13 2021/06/29 22:34:07 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/vnode.h>
@@ -49,6 +49,7 @@ __KERNEL_RCSID(0, "$NetBSD: tmpfs_fifoop
 int (**tmpfs_fifoop_p)(void *);
 const struct vnodeopv_entry_desc tmpfs_fifoop_entries[] = {
 	{ &vop_default_desc,		vn_default_error },
+	{ &vop_parsepath_desc,		genfs_parsepath },
 	{ &vop_lookup_desc,		tmpfs_fifo_lookup },
 	{ &vop_create_desc,		tmpfs_fifo_create },
 	{ &vop_mknod_desc,		tmpfs_fifo_mknod },

Index: src/sys/fs/tmpfs/tmpfs_specops.c
diff -u src/sys/fs/tmpfs/tmpfs_specops.c:1.13 src/sys/fs/tmpfs/tmpfs_specops.c:1.14
--- src/sys/fs/tmpfs/tmpfs_specops.c:1.13	Sat May 16 18:31:49 2020
+++ src/sys/fs/tmpfs/tmpfs_specops.c	Tue Jun 29 22:34:07 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: tmpfs_specops.c,v 1.13 2020/05/16 18:31:49 christos Exp $	*/
+/*	$NetBSD: tmpfs_specops.c,v 1.14 2021/06/29 22:34:07 dholland Exp $	*/
 
 /*
  * Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tmpfs_specops.c,v 1.13 2020/05/16 18:31:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tmpfs_specops.c,v 1.14 2021/06/29 22:34:07 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/vnode.h>
@@ -52,6 +52,7 @@ int (**tmpfs_specop_p)(void *);
 
 const struct vnodeopv_entry_desc tmpfs_specop_entries[] = {
 	{ &vop_default_desc,		vn_default_error },
+	{ &vop_parsepath_desc,		genfs_parsepath },
 	{ &vop_lookup_desc,		tmpfs_spec_lookup },
 	{ &vop_create_desc,		tmpfs_spec_create },
 	{ &vop_mknod_desc,		tmpfs_spec_mknod },

Index: src/sys/fs/tmpfs/tmpfs_vnops.c
diff -u src/sys/fs/tmpfs/tmpfs_vnops.c:1.145 src/sys/fs/tmpfs/tmpfs_vnops.c:1.146
--- src/sys/fs/tmpfs/tmpfs_vnops.c:1.145	Sun Dec 13 19:22:02 2020
+++ src/sys/fs/tmpfs/tmpfs_vnops.c	Tue Jun 29 22:34:07 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: tmpfs_vnops.c,v 1.145 2020/12/13 19:22:02 chs Exp $	*/
+/*	$NetBSD: tmpfs_vnops.c,v 1.146 2021/06/29 22:34:07 dholland Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006, 2007, 2020 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.c,v 1.145 2020/12/13 19:22:02 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.c,v 1.146 2021/06/29 22:34:07 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/dirent.h>
@@ -64,6 +64,7 @@ __KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.
 int (**tmpfs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc tmpfs_vnodeop_entries[] = {
 	{ &vop_default_desc,		vn_default_error },
+	{ &vop_parsepath_desc,		genfs_parsepath },
 	{ &vop_lookup_desc,		tmpfs_lookup },
 	{ &vop_create_desc,		tmpfs_create },
 	{ &vop_mknod_desc,		tmpfs_mknod },

Index: src/sys/fs/udf/udf_vnops.c
diff -u src/sys/fs/udf/udf_vnops.c:1.114 src/sys/fs/udf/udf_vnops.c:1.115
--- src/sys/fs/udf/udf_vnops.c:1.114	Sat Jun 27 17:29:18 2020
+++ src/sys/fs/udf/udf_vnops.c	Tue Jun 29 22:34:07 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_vnops.c,v 1.114 2020/06/27 17:29:18 christos Exp $ */
+/* $NetBSD: udf_vnops.c,v 1.115 2021/06/29 22:34:07 dholland Exp $ */
 
 /*
  * Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -32,7 +32,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.114 2020/06/27 17:29:18 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.115 2021/06/29 22:34:07 dholland Exp $");
 #endif /* not lint */
 
 
@@ -2173,6 +2173,7 @@ int (**udf_vnodeop_p)(void *);
 
 const struct vnodeopv_entry_desc udf_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath }, /* parsepath */
 	{ &vop_lookup_desc, udf_lookup },	/* lookup */
 	{ &vop_create_desc, udf_create },	/* create */
 	{ &vop_mknod_desc, udf_mknod },		/* mknod */	/* TODO */

Index: src/sys/fs/union/union_vnops.c
diff -u src/sys/fs/union/union_vnops.c:1.74 src/sys/fs/union/union_vnops.c:1.75
--- src/sys/fs/union/union_vnops.c:1.74	Tue Aug 18 09:44:07 2020
+++ src/sys/fs/union/union_vnops.c	Tue Jun 29 22:34:07 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: union_vnops.c,v 1.74 2020/08/18 09:44:07 hannken Exp $	*/
+/*	$NetBSD: union_vnops.c,v 1.75 2021/06/29 22:34:07 dholland Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993, 1994, 1995
@@ -72,7 +72,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.74 2020/08/18 09:44:07 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.75 2021/06/29 22:34:07 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -144,6 +144,7 @@ static int union_lookup1(struct vnode *,
 int (**union_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc union_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, union_lookup },		/* lookup */
 	{ &vop_create_desc, union_create },		/* create */
 	{ &vop_whiteout_desc, union_whiteout },		/* whiteout */

Index: src/sys/fs/unionfs/unionfs_vnops.c
diff -u src/sys/fs/unionfs/unionfs_vnops.c:1.14 src/sys/fs/unionfs/unionfs_vnops.c:1.15
--- src/sys/fs/unionfs/unionfs_vnops.c:1.14	Sat May 16 18:31:50 2020
+++ src/sys/fs/unionfs/unionfs_vnops.c	Tue Jun 29 22:34:08 2021
@@ -1814,6 +1814,7 @@ unionfs_revoke(void *v)
 int (**unionfs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc unionfs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, unionfs_lookup },		/* lookup */
 	{ &vop_create_desc, unionfs_create },		/* create */
 	{ &vop_whiteout_desc, unionfs_whiteout },	/* whiteout */

Index: src/sys/fs/v7fs/v7fs_extern.c
diff -u src/sys/fs/v7fs/v7fs_extern.c:1.7 src/sys/fs/v7fs/v7fs_extern.c:1.8
--- src/sys/fs/v7fs/v7fs_extern.c:1.7	Sat May 16 18:31:50 2020
+++ src/sys/fs/v7fs/v7fs_extern.c	Tue Jun 29 22:34:08 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: v7fs_extern.c,v 1.7 2020/05/16 18:31:50 christos Exp $	*/
+/*	$NetBSD: v7fs_extern.c,v 1.8 2021/06/29 22:34:08 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2004, 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: v7fs_extern.c,v 1.7 2020/05/16 18:31:50 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: v7fs_extern.c,v 1.8 2021/06/29 22:34:08 dholland Exp $");
 
 #if defined _KERNEL_OPT
 #include "opt_v7fs.h"
@@ -55,6 +55,7 @@ int (**v7fs_vnodeop_p)(void *);	/* fille
 
 const struct vnodeopv_entry_desc v7fs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, v7fs_lookup },		/* lookup */
 	{ &vop_create_desc, v7fs_create },		/* create */
 	{ &vop_mknod_desc, v7fs_mknod },		/* mknod */
@@ -105,6 +106,7 @@ const struct vnodeopv_entry_desc v7fs_vn
 int (**v7fs_specop_p)(void *);
 const struct vnodeopv_entry_desc v7fs_specop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, spec_lookup },		/* lookup */
 	{ &vop_create_desc, spec_create },		/* create xxx*/
 	{ &vop_mknod_desc, spec_mknod },		/* mknod xxx*/
@@ -154,6 +156,7 @@ const struct vnodeopv_entry_desc v7fs_sp
 int (**v7fs_fifoop_p)(void *);
 const struct vnodeopv_entry_desc v7fs_fifoop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, vn_fifo_bypass },		/* lookup */
 	{ &vop_create_desc, vn_fifo_bypass },		/* create */
 	{ &vop_mknod_desc, vn_fifo_bypass },		/* mknod */

Index: src/sys/kern/vfs_lookup.c
diff -u src/sys/kern/vfs_lookup.c:1.227 src/sys/kern/vfs_lookup.c:1.228
--- src/sys/kern/vfs_lookup.c:1.227	Tue Jun 29 22:29:59 2021
+++ src/sys/kern/vfs_lookup.c	Tue Jun 29 22:34:08 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_lookup.c,v 1.227 2021/06/29 22:29:59 dholland Exp $	*/
+/*	$NetBSD: vfs_lookup.c,v 1.228 2021/06/29 22:34:08 dholland Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_lookup.c,v 1.227 2021/06/29 22:29:59 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_lookup.c,v 1.228 2021/06/29 22:34:08 dholland Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_magiclinks.h"
@@ -225,25 +225,6 @@ namei_hash(const char *name, const char 
 	return (hash + (hash >> 5));
 }
 
-/*
- * Find the end of the first path component in NAME and return its
- * length.
- */
-static int
-namei_getcomponent(struct vnode *dvp, const char *name, size_t *ret)
-{
-	size_t pos;
-
-	(void)dvp;
-
-	pos = 0;
-	while (name[pos] != '\0' && name[pos] != '/') {
-		pos++;
-	}
-	*ret = pos;
-	return 0;
-}
-
 ////////////////////////////////////////////////////////////
 
 /*
@@ -865,8 +846,7 @@ lookup_parsepath(struct namei_state *sta
 	 * is held.
 	 */
 	cnp->cn_consume = 0;
-	error = namei_getcomponent(searchdir, cnp->cn_nameptr,
-				   &cnp->cn_namelen);
+	error = VOP_PARSEPATH(searchdir, cnp->cn_nameptr, &cnp->cn_namelen);
 	if (error) {
 		return error;
 	}
@@ -2080,8 +2060,7 @@ do_lookup_for_nfsd_index(struct namei_st
 	ndp->ni_dvp = NULL;
 
 	cnp->cn_consume = 0;
-	error = namei_getcomponent(startdir, cnp->cn_nameptr,
-				   &cnp->cn_namelen);
+	error = VOP_PARSEPATH(startdir, cnp->cn_nameptr, &cnp->cn_namelen);
 	if (error) {
 		return error;
 	}
@@ -2216,7 +2195,7 @@ relookup(struct vnode *dvp, struct vnode
 	if ((uint32_t)newhash != (uint32_t)cnp->cn_hash)
 		panic("relookup: bad hash");
 #endif
-	error = namei_getcomponent(dvp, cnp->cn_nameptr, &newlen);
+	error = VOP_PARSEPATH(dvp, cnp->cn_nameptr, &newlen);
 	if (error) {
 		panic("relookup: parsepath failed with error %d", error);
 	}

Index: src/sys/kern/vnode_if.src
diff -u src/sys/kern/vnode_if.src:1.80 src/sys/kern/vnode_if.src:1.81
--- src/sys/kern/vnode_if.src:1.80	Mon May 18 08:29:34 2020
+++ src/sys/kern/vnode_if.src	Tue Jun 29 22:34:08 2021
@@ -1,4 +1,4 @@
-#	$NetBSD: vnode_if.src,v 1.80 2020/05/18 08:29:34 hannken Exp $
+#	$NetBSD: vnode_if.src,v 1.81 2021/06/29 22:34:08 dholland Exp $
 #
 # Copyright (c) 1992, 1993
 #	The Regents of the University of California.  All rights reserved.
@@ -58,6 +58,15 @@ vop_bwrite {
 	IN struct vnode *vp;
 	IN struct buf *bp;
 };
+
+#
+#% parsepath  dvp     L L L
+#
+vop_parsepath {
+	IN struct vnode *dvp;
+	IN const char *name;
+	OUT size_t *retval;
+};
  
 #
 #% lookup     dvp     L L L

Index: src/sys/miscfs/deadfs/dead_vnops.c
diff -u src/sys/miscfs/deadfs/dead_vnops.c:1.63 src/sys/miscfs/deadfs/dead_vnops.c:1.64
--- src/sys/miscfs/deadfs/dead_vnops.c:1.63	Sun Feb 23 15:46:41 2020
+++ src/sys/miscfs/deadfs/dead_vnops.c	Tue Jun 29 22:34:08 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: dead_vnops.c,v 1.63 2020/02/23 15:46:41 ad Exp $	*/
+/*	$NetBSD: dead_vnops.c,v 1.64 2021/06/29 22:34:08 dholland Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dead_vnops.c,v 1.63 2020/02/23 15:46:41 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dead_vnops.c,v 1.64 2021/06/29 22:34:08 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -82,6 +82,7 @@ int (**dead_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc dead_vnodeop_entries[] = {
 	{ &vop_default_desc, dead_default_error },
 	{ &vop_bwrite_desc, dead_bwrite },		/* bwrite */
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, dead_lookup },		/* lookup */
 	{ &vop_open_desc, dead_open },			/* open */
 	{ &vop_close_desc, dead_close },		/* close */

Index: src/sys/miscfs/fdesc/fdesc_vnops.c
diff -u src/sys/miscfs/fdesc/fdesc_vnops.c:1.136 src/sys/miscfs/fdesc/fdesc_vnops.c:1.137
--- src/sys/miscfs/fdesc/fdesc_vnops.c:1.136	Mon Jun 28 17:52:13 2021
+++ src/sys/miscfs/fdesc/fdesc_vnops.c	Tue Jun 29 22:34:08 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: fdesc_vnops.c,v 1.136 2021/06/28 17:52:13 chs Exp $	*/
+/*	$NetBSD: fdesc_vnops.c,v 1.137 2021/06/29 22:34:08 dholland Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdesc_vnops.c,v 1.136 2021/06/28 17:52:13 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdesc_vnops.c,v 1.137 2021/06/29 22:34:08 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -119,6 +119,7 @@ static int fdesc_attr(int, struct vattr 
 int (**fdesc_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc fdesc_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, fdesc_lookup },		/* lookup */
 	{ &vop_create_desc, fdesc_create },		/* create */
 	{ &vop_mknod_desc, fdesc_mknod },		/* mknod */

Index: src/sys/miscfs/fifofs/fifo_vnops.c
diff -u src/sys/miscfs/fifofs/fifo_vnops.c:1.82 src/sys/miscfs/fifofs/fifo_vnops.c:1.83
--- src/sys/miscfs/fifofs/fifo_vnops.c:1.82	Sat Dec 19 22:09:15 2020
+++ src/sys/miscfs/fifofs/fifo_vnops.c	Tue Jun 29 22:34:08 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: fifo_vnops.c,v 1.82 2020/12/19 22:09:15 thorpej Exp $	*/
+/*	$NetBSD: fifo_vnops.c,v 1.83 2021/06/29 22:34:08 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fifo_vnops.c,v 1.82 2020/12/19 22:09:15 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fifo_vnops.c,v 1.83 2021/06/29 22:34:08 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -631,6 +631,7 @@ fifo_kqfilter(void *v)
 int (**fifo_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc fifo_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, fifo_lookup },		/* lookup */
 	{ &vop_create_desc, genfs_badop },		/* create */
 	{ &vop_mknod_desc, genfs_badop },		/* mknod */

Index: src/sys/miscfs/genfs/genfs.h
diff -u src/sys/miscfs/genfs/genfs.h:1.36 src/sys/miscfs/genfs/genfs.h:1.37
--- src/sys/miscfs/genfs/genfs.h:1.36	Fri Aug  7 18:14:21 2020
+++ src/sys/miscfs/genfs/genfs.h	Tue Jun 29 22:34:08 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfs.h,v 1.36 2020/08/07 18:14:21 christos Exp $	*/
+/*	$NetBSD: genfs.h,v 1.37 2021/06/29 22:34:08 dholland Exp $	*/
 
 #ifndef	_MISCFS_GENFS_GENFS_H_
 #define	_MISCFS_GENFS_GENFS_H_
@@ -27,6 +27,7 @@ int	genfs_deadlock(void *);
 #define	genfs_deadislocked genfs_islocked
 int	genfs_deadunlock(void *);
 
+int	genfs_parsepath(void *);
 int	genfs_poll(void *);
 int	genfs_kqfilter(void *);
 int	genfs_fcntl(void *);

Index: src/sys/miscfs/genfs/genfs_vnops.c
diff -u src/sys/miscfs/genfs/genfs_vnops.c:1.210 src/sys/miscfs/genfs/genfs_vnops.c:1.211
--- src/sys/miscfs/genfs/genfs_vnops.c:1.210	Sat Sep  5 16:30:12 2020
+++ src/sys/miscfs/genfs/genfs_vnops.c	Tue Jun 29 22:34:08 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfs_vnops.c,v 1.210 2020/09/05 16:30:12 riastradh Exp $	*/
+/*	$NetBSD: genfs_vnops.c,v 1.211 2021/06/29 22:34:08 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.210 2020/09/05 16:30:12 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.211 2021/06/29 22:34:08 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -84,6 +84,31 @@ static void filt_genfsdetach(struct knot
 static int filt_genfsread(struct knote *, long);
 static int filt_genfsvnode(struct knote *, long);
 
+/*
+ * Find the end of the first path component in NAME and return its
+ * length.
+ */
+int
+genfs_parsepath(void *v)
+{
+	struct vop_parsepath_args /* {
+		struct vnode *a_dvp;
+		const char *a_name;
+		size_t *a_ret;
+	} */ *ap = v;
+	const char *name = ap->a_name;
+	size_t pos;
+
+	(void)ap->a_dvp;
+
+	pos = 0;
+	while (name[pos] != '\0' && name[pos] != '/') {
+		pos++;
+	}
+	*ap->a_retval = pos;
+	return 0;
+}
+
 int
 genfs_poll(void *v)
 {

Index: src/sys/miscfs/kernfs/kernfs_vnops.c
diff -u src/sys/miscfs/kernfs/kernfs_vnops.c:1.167 src/sys/miscfs/kernfs/kernfs_vnops.c:1.168
--- src/sys/miscfs/kernfs/kernfs_vnops.c:1.167	Mon Jun 28 17:52:13 2021
+++ src/sys/miscfs/kernfs/kernfs_vnops.c	Tue Jun 29 22:34:08 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: kernfs_vnops.c,v 1.167 2021/06/28 17:52:13 chs Exp $	*/
+/*	$NetBSD: kernfs_vnops.c,v 1.168 2021/06/29 22:34:08 dholland Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.167 2021/06/28 17:52:13 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.168 2021/06/29 22:34:08 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -182,6 +182,7 @@ static int	kernfs_xwrite(const struct ke
 int (**kernfs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc kernfs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, kernfs_lookup },		/* lookup */
 	{ &vop_create_desc, kernfs_create },		/* create */
 	{ &vop_mknod_desc, kernfs_mknod },		/* mknod */
@@ -231,6 +232,7 @@ const struct vnodeopv_desc kernfs_vnodeo
 int (**kernfs_specop_p)(void *);
 const struct vnodeopv_entry_desc kernfs_specop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, spec_lookup },		/* lookup */
 	{ &vop_create_desc, spec_create },		/* create */
 	{ &vop_mknod_desc, spec_mknod },		/* mknod */

Index: src/sys/miscfs/procfs/procfs_vnops.c
diff -u src/sys/miscfs/procfs/procfs_vnops.c:1.216 src/sys/miscfs/procfs/procfs_vnops.c:1.217
--- src/sys/miscfs/procfs/procfs_vnops.c:1.216	Mon Jun 28 17:52:13 2021
+++ src/sys/miscfs/procfs/procfs_vnops.c	Tue Jun 29 22:34:09 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: procfs_vnops.c,v 1.216 2021/06/28 17:52:13 chs Exp $	*/
+/*	$NetBSD: procfs_vnops.c,v 1.217 2021/06/29 22:34:09 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2006, 2007, 2008, 2020 The NetBSD Foundation, Inc.
@@ -105,7 +105,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.216 2021/06/28 17:52:13 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.217 2021/06/29 22:34:09 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -255,6 +255,7 @@ static int atoi(const char *, size_t);
 int (**procfs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc procfs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, procfs_lookup },		/* lookup */
 	{ &vop_create_desc, procfs_create },		/* create */
 	{ &vop_mknod_desc, procfs_mknod },		/* mknod */

Index: src/sys/miscfs/specfs/spec_vnops.c
diff -u src/sys/miscfs/specfs/spec_vnops.c:1.181 src/sys/miscfs/specfs/spec_vnops.c:1.182
--- src/sys/miscfs/specfs/spec_vnops.c:1.181	Fri Dec 25 09:28:56 2020
+++ src/sys/miscfs/specfs/spec_vnops.c	Tue Jun 29 22:34:09 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: spec_vnops.c,v 1.181 2020/12/25 09:28:56 mlelstv Exp $	*/
+/*	$NetBSD: spec_vnops.c,v 1.182 2021/06/29 22:34:09 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.181 2020/12/25 09:28:56 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.182 2021/06/29 22:34:09 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -115,6 +115,7 @@ extern struct mount *dead_rootmount;
 int (**spec_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc spec_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, spec_lookup },		/* lookup */
 	{ &vop_create_desc, spec_create },		/* create */
 	{ &vop_mknod_desc, spec_mknod },		/* mknod */

Index: src/sys/nfs/nfs_vnops.c
diff -u src/sys/nfs/nfs_vnops.c:1.317 src/sys/nfs/nfs_vnops.c:1.318
--- src/sys/nfs/nfs_vnops.c:1.317	Sat Sep  5 16:30:12 2020
+++ src/sys/nfs/nfs_vnops.c	Tue Jun 29 22:34:09 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: nfs_vnops.c,v 1.317 2020/09/05 16:30:12 riastradh Exp $	*/
+/*	$NetBSD: nfs_vnops.c,v 1.318 2021/06/29 22:34:09 dholland Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.317 2020/09/05 16:30:12 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.318 2021/06/29 22:34:09 dholland Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_nfs.h"
@@ -100,6 +100,7 @@ __KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,
 int (**nfsv2_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc nfsv2_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, nfs_lookup },		/* lookup */
 	{ &vop_create_desc, nfs_create },		/* create */
 	{ &vop_mknod_desc, nfs_mknod },			/* mknod */
@@ -154,6 +155,7 @@ const struct vnodeopv_desc nfsv2_vnodeop
 int (**spec_nfsv2nodeop_p)(void *);
 const struct vnodeopv_entry_desc spec_nfsv2nodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, spec_lookup },		/* lookup */
 	{ &vop_create_desc, spec_create },		/* create */
 	{ &vop_mknod_desc, spec_mknod },		/* mknod */
@@ -205,6 +207,7 @@ const struct vnodeopv_desc spec_nfsv2nod
 int (**fifo_nfsv2nodeop_p)(void *);
 const struct vnodeopv_entry_desc fifo_nfsv2nodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, vn_fifo_bypass },		/* lookup */
 	{ &vop_create_desc, vn_fifo_bypass },		/* create */
 	{ &vop_mknod_desc, vn_fifo_bypass },		/* mknod */

Index: src/sys/rump/librump/rumpvfs/rumpfs.c
diff -u src/sys/rump/librump/rumpvfs/rumpfs.c:1.162 src/sys/rump/librump/rumpvfs/rumpfs.c:1.163
--- src/sys/rump/librump/rumpvfs/rumpfs.c:1.162	Sat May 16 18:31:52 2020
+++ src/sys/rump/librump/rumpvfs/rumpfs.c	Tue Jun 29 22:34:09 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpfs.c,v 1.162 2020/05/16 18:31:52 christos Exp $	*/
+/*	$NetBSD: rumpfs.c,v 1.163 2021/06/29 22:34:09 dholland Exp $	*/
 
 /*
  * Copyright (c) 2009, 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.162 2020/05/16 18:31:52 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.163 2021/06/29 22:34:09 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -90,6 +90,7 @@ static int rump_vop_fcntl(void *);
 int (**rump_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc rump_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },
 	{ &vop_lookup_desc, rump_vop_lookup },
 	{ &vop_getattr_desc, rump_vop_getattr },
 	{ &vop_setattr_desc, rump_vop_setattr },

Index: src/sys/ufs/chfs/chfs_vnops.c
diff -u src/sys/ufs/chfs/chfs_vnops.c:1.42 src/sys/ufs/chfs/chfs_vnops.c:1.43
--- src/sys/ufs/chfs/chfs_vnops.c:1.42	Sat Sep  5 16:30:12 2020
+++ src/sys/ufs/chfs/chfs_vnops.c	Tue Jun 29 22:34:09 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: chfs_vnops.c,v 1.42 2020/09/05 16:30:12 riastradh Exp $	*/
+/*	$NetBSD: chfs_vnops.c,v 1.43 2021/06/29 22:34:09 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2010 Department of Software Engineering,
@@ -1598,6 +1598,7 @@ int
 const struct vnodeopv_entry_desc chfs_vnodeop_entries[] =
 	{
 		{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 		{ &vop_lookup_desc, chfs_lookup },
 		{ &vop_create_desc, chfs_create },
 		{ &vop_mknod_desc, chfs_mknod },
@@ -1657,6 +1658,7 @@ int
 const struct vnodeopv_entry_desc chfs_specop_entries[] =
 	{
 		{ &vop_default_desc, vn_default_error },
+		{ &vop_parsepath_desc, genfs_parsepath },
 		{ &vop_lookup_desc, spec_lookup },
 		{ &vop_create_desc, spec_create },
 		{ &vop_mknod_desc, spec_mknod },
@@ -1714,6 +1716,7 @@ int
 const struct vnodeopv_entry_desc chfs_fifoop_entries[] =
 	{
 		{ &vop_default_desc, vn_default_error },
+		{ &vop_parsepath_desc, genfs_parsepath },
 		{ &vop_lookup_desc, vn_fifo_bypass },
 		{ &vop_create_desc, vn_fifo_bypass },
 		{ &vop_mknod_desc, vn_fifo_bypass },

Index: src/sys/ufs/ext2fs/ext2fs_vnops.c
diff -u src/sys/ufs/ext2fs/ext2fs_vnops.c:1.132 src/sys/ufs/ext2fs/ext2fs_vnops.c:1.133
--- src/sys/ufs/ext2fs/ext2fs_vnops.c:1.132	Sat May 16 18:31:53 2020
+++ src/sys/ufs/ext2fs/ext2fs_vnops.c	Tue Jun 29 22:34:09 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: ext2fs_vnops.c,v 1.132 2020/05/16 18:31:53 christos Exp $	*/
+/*	$NetBSD: ext2fs_vnops.c,v 1.133 2021/06/29 22:34:09 dholland Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.132 2020/05/16 18:31:53 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.133 2021/06/29 22:34:09 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1094,6 +1094,7 @@ ext2fs_reclaim(void *v)
 int (**ext2fs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc ext2fs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, ext2fs_lookup },		/* lookup */
 	{ &vop_create_desc, ext2fs_create },		/* create */
 	{ &vop_mknod_desc, ext2fs_mknod },		/* mknod */
@@ -1149,6 +1150,7 @@ const struct vnodeopv_desc ext2fs_vnodeo
 int (**ext2fs_specop_p)(void *);
 const struct vnodeopv_entry_desc ext2fs_specop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, spec_lookup },		/* lookup */
 	{ &vop_create_desc, spec_create },		/* create */
 	{ &vop_mknod_desc, spec_mknod },		/* mknod */
@@ -1204,6 +1206,7 @@ const struct vnodeopv_desc ext2fs_specop
 int (**ext2fs_fifoop_p)(void *);
 const struct vnodeopv_entry_desc ext2fs_fifoop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, vn_fifo_bypass },		/* lookup */
 	{ &vop_create_desc, vn_fifo_bypass },		/* create */
 	{ &vop_mknod_desc, vn_fifo_bypass },		/* mknod */

Index: src/sys/ufs/ffs/ffs_vnops.c
diff -u src/sys/ufs/ffs/ffs_vnops.c:1.133 src/sys/ufs/ffs/ffs_vnops.c:1.134
--- src/sys/ufs/ffs/ffs_vnops.c:1.133	Sat Sep  5 16:30:13 2020
+++ src/sys/ufs/ffs/ffs_vnops.c	Tue Jun 29 22:34:09 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs_vnops.c,v 1.133 2020/09/05 16:30:13 riastradh Exp $	*/
+/*	$NetBSD: ffs_vnops.c,v 1.134 2021/06/29 22:34:09 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_vnops.c,v 1.133 2020/09/05 16:30:13 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_vnops.c,v 1.134 2021/06/29 22:34:09 dholland Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ffs.h"
@@ -102,6 +102,7 @@ __KERNEL_RCSID(0, "$NetBSD: ffs_vnops.c,
 int (**ffs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc ffs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, ufs_lookup },		/* lookup */
 	{ &vop_create_desc, ufs_create },		/* create */
 	{ &vop_whiteout_desc, ufs_whiteout },		/* whiteout */
@@ -163,6 +164,7 @@ const struct vnodeopv_desc ffs_vnodeop_o
 int (**ffs_specop_p)(void *);
 const struct vnodeopv_entry_desc ffs_specop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, spec_lookup },		/* lookup */
 	{ &vop_create_desc, spec_create },		/* create */
 	{ &vop_mknod_desc, spec_mknod },		/* mknod */
@@ -223,6 +225,7 @@ const struct vnodeopv_desc ffs_specop_op
 int (**ffs_fifoop_p)(void *);
 const struct vnodeopv_entry_desc ffs_fifoop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, vn_fifo_bypass },		/* lookup */
 	{ &vop_create_desc, vn_fifo_bypass },		/* create */
 	{ &vop_mknod_desc, vn_fifo_bypass },		/* mknod */

Index: src/sys/ufs/lfs/lfs_vnops.c
diff -u src/sys/ufs/lfs/lfs_vnops.c:1.336 src/sys/ufs/lfs/lfs_vnops.c:1.337
--- src/sys/ufs/lfs/lfs_vnops.c:1.336	Sat Sep  5 16:30:13 2020
+++ src/sys/ufs/lfs/lfs_vnops.c	Tue Jun 29 22:34:09 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_vnops.c,v 1.336 2020/09/05 16:30:13 riastradh Exp $	*/
+/*	$NetBSD: lfs_vnops.c,v 1.337 2021/06/29 22:34:09 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -125,7 +125,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.336 2020/09/05 16:30:13 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.337 2021/06/29 22:34:09 dholland Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -182,6 +182,7 @@ static int lfs_makeinode(struct vattr *v
 int (**lfs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc lfs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, ulfs_lookup },		/* lookup */
 	{ &vop_create_desc, lfs_create },		/* create */
 	{ &vop_whiteout_desc, ulfs_whiteout },		/* whiteout */
@@ -240,6 +241,7 @@ const struct vnodeopv_desc lfs_vnodeop_o
 int (**lfs_specop_p)(void *);
 const struct vnodeopv_entry_desc lfs_specop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, spec_lookup },		/* lookup */
 	{ &vop_create_desc, spec_create },		/* create */
 	{ &vop_mknod_desc, spec_mknod },		/* mknod */
@@ -297,6 +299,7 @@ const struct vnodeopv_desc lfs_specop_op
 int (**lfs_fifoop_p)(void *);
 const struct vnodeopv_entry_desc lfs_fifoop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, vn_fifo_bypass },		/* lookup */
 	{ &vop_create_desc, vn_fifo_bypass },		/* create */
 	{ &vop_mknod_desc, vn_fifo_bypass },		/* mknod */

Index: src/sys/ufs/mfs/mfs_vnops.c
diff -u src/sys/ufs/mfs/mfs_vnops.c:1.61 src/sys/ufs/mfs/mfs_vnops.c:1.62
--- src/sys/ufs/mfs/mfs_vnops.c:1.61	Sat May 16 18:31:54 2020
+++ src/sys/ufs/mfs/mfs_vnops.c	Tue Jun 29 22:34:10 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mfs_vnops.c,v 1.61 2020/05/16 18:31:54 christos Exp $	*/
+/*	$NetBSD: mfs_vnops.c,v 1.62 2021/06/29 22:34:10 dholland Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c,v 1.61 2020/05/16 18:31:54 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c,v 1.62 2021/06/29 22:34:10 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -58,6 +58,7 @@ __KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c,
 int (**mfs_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc mfs_vnodeop_entries[] = {
 	{ &vop_default_desc, vn_default_error },
+	{ &vop_parsepath_desc, genfs_parsepath },	/* parsepath */
 	{ &vop_lookup_desc, mfs_lookup },		/* lookup */
 	{ &vop_create_desc, mfs_create },		/* create */
 	{ &vop_mknod_desc, mfs_mknod },			/* mknod */

Reply via email to