Module Name:    src
Committed By:   dholland
Date:           Sun Jul 18 23:56:14 UTC 2021

Modified Files:
        src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c
        src/sys/fs/cd9660: cd9660_vnops.c
        src/sys/fs/efs: efs_vnops.c
        src/sys/fs/hfs: hfs_vnops.c
        src/sys/fs/puffs: puffs_vnops.c
        src/sys/fs/tmpfs: tmpfs_fifoops.c tmpfs_specops.c
        src/sys/fs/v7fs: v7fs_extern.c
        src/sys/miscfs/fifofs: fifo.h
        src/sys/miscfs/kernfs: kernfs_vnops.c
        src/sys/miscfs/specfs: specdev.h
        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

Log Message:
Use macros for the canned parts of device and fifo vnode op tables.

Add GENFS_SPECOP_ENTRIES and GENFS_FIFOOP_ENTRIES macros that contain
the portion of the vnode ops table declaration that is
(conservatively) the same in every fs. Use these in every fs that
supports devices and/or fifos with separate ops tables.

Note that ptyfs works differently (it has one type of vnode with
open-coded dispatch to the specfs code, which I haven't changed in
this commit) and rump/librump/rumpvfs/rumpfs.c has an indirect dynamic
dispatch that already does more or less the same thing, which I also
haven't changed.

Also note that this anticipates a few bits in the next changeset here
and there, and adds missing but unreachable calls in some cases (e.g.
most fses weren't defining whiteout on devices and fifos, but it isn't
reachable there), and it changes parsepath on devices and fifos to
genfs_badop from genfs_parsepath (but it's not reachable there
either).

It appears that devices in kernfs were missing kqfilter, so it's
possible that if you try to use kqueue on /kern/rootdev that it'll
explode.

And finally note that the ops declaration tables aren't
order-dependent. (Other than vop_default_desc has to come first.)
Otherwise this wouldn't work.


To generate a diff of this commit:
cvs rdiff -u -r1.72 -r1.73 \
    src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
cvs rdiff -u -r1.59 -r1.60 src/sys/fs/cd9660/cd9660_vnops.c
cvs rdiff -u -r1.42 -r1.43 src/sys/fs/efs/efs_vnops.c
cvs rdiff -u -r1.38 -r1.39 src/sys/fs/hfs/hfs_vnops.c
cvs rdiff -u -r1.219 -r1.220 src/sys/fs/puffs/puffs_vnops.c
cvs rdiff -u -r1.13 -r1.14 src/sys/fs/tmpfs/tmpfs_fifoops.c
cvs rdiff -u -r1.14 -r1.15 src/sys/fs/tmpfs/tmpfs_specops.c
cvs rdiff -u -r1.8 -r1.9 src/sys/fs/v7fs/v7fs_extern.c
cvs rdiff -u -r1.26 -r1.27 src/sys/miscfs/fifofs/fifo.h
cvs rdiff -u -r1.170 -r1.171 src/sys/miscfs/kernfs/kernfs_vnops.c
cvs rdiff -u -r1.44 -r1.45 src/sys/miscfs/specfs/specdev.h
cvs rdiff -u -r1.318 -r1.319 src/sys/nfs/nfs_vnops.c
cvs rdiff -u -r1.164 -r1.165 src/sys/rump/librump/rumpvfs/rumpfs.c
cvs rdiff -u -r1.44 -r1.45 src/sys/ufs/chfs/chfs_vnops.c
cvs rdiff -u -r1.133 -r1.134 src/sys/ufs/ext2fs/ext2fs_vnops.c
cvs rdiff -u -r1.135 -r1.136 src/sys/ufs/ffs/ffs_vnops.c
cvs rdiff -u -r1.337 -r1.338 src/sys/ufs/lfs/lfs_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/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.72 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.73
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.72	Fri Jul  2 17:14:36 2021
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Sun Jul 18 23:56:12 2021
@@ -6394,10 +6394,7 @@ const struct vnodeopv_desc zfs_vnodeop_o
 int (**zfs_specop_p)(void *);
 const struct vnodeopv_entry_desc zfs_specop_entries[] = {
 	{ &vop_default_desc,		vn_default_error },
-	{ &vop_lookup_desc,		spec_lookup },
-	{ &vop_create_desc,		spec_create },
-	{ &vop_mknod_desc,		spec_mknod },
-	{ &vop_open_desc,		spec_open },
+	GENFS_SPECOP_ENTRIES,
 	{ &vop_close_desc,		spec_close },
 	{ &vop_access_desc,		zfs_netbsd_access },
 	{ &vop_accessx_desc,		genfs_accessx },
@@ -6405,31 +6402,12 @@ const struct vnodeopv_entry_desc zfs_spe
 	{ &vop_setattr_desc,		zfs_netbsd_setattr },
 	{ &vop_read_desc,		/**/zfs_netbsd_read },
 	{ &vop_write_desc,		/**/zfs_netbsd_write },
-	{ &vop_ioctl_desc,		spec_ioctl },
-	{ &vop_poll_desc,		spec_poll },
-	{ &vop_kqfilter_desc,		spec_kqfilter },
-	{ &vop_revoke_desc,		spec_revoke },
 	{ &vop_fsync_desc,		zfs_spec_fsync },
-	{ &vop_remove_desc,		spec_remove },
-	{ &vop_link_desc,		spec_link },
 	{ &vop_lock_desc,		zfs_netbsd_lock },
 	{ &vop_unlock_desc,		zfs_netbsd_unlock },
-	{ &vop_rename_desc,		spec_rename },
-	{ &vop_mkdir_desc,		spec_mkdir },
-	{ &vop_rmdir_desc,		spec_rmdir },
-	{ &vop_symlink_desc,		spec_symlink },
-	{ &vop_readdir_desc,		spec_readdir },
-	{ &vop_readlink_desc,		spec_readlink },
 	{ &vop_inactive_desc,		zfs_netbsd_inactive },
 	{ &vop_reclaim_desc,		zfs_netbsd_reclaim },
-	{ &vop_pathconf_desc,		spec_pathconf },
-	{ &vop_seek_desc,		spec_seek },
-	{ &vop_getpages_desc,		spec_getpages },
-	{ &vop_putpages_desc,		spec_putpages },
-	{ &vop_mmap_desc,		spec_mmap },
 	{ &vop_islocked_desc,		zfs_netbsd_islocked },
-	{ &vop_advlock_desc,		spec_advlock },
-	{ &vop_strategy_desc,		spec_strategy },
 	{ &vop_bwrite_desc,		spec_bwrite },
 	{ &vop_print_desc,		zfs_netbsd_print },
 	{ &vop_fcntl_desc,		zfs_netbsd_fcntl },
@@ -6442,10 +6420,7 @@ const struct vnodeopv_desc zfs_specop_op
 int (**zfs_fifoop_p)(void *);
 const struct vnodeopv_entry_desc zfs_fifoop_entries[] = {
 	{ &vop_default_desc,		vn_default_error },
-	{ &vop_lookup_desc,		vn_fifo_bypass },
-	{ &vop_create_desc,		vn_fifo_bypass },
-	{ &vop_mknod_desc,		vn_fifo_bypass },
-	{ &vop_open_desc,		vn_fifo_bypass },
+	GENFS_FIFOOP_ENTRIES,
 	{ &vop_close_desc,		vn_fifo_bypass },
 	{ &vop_access_desc,		zfs_netbsd_access },
 	{ &vop_accessx_desc,		genfs_accessx },
@@ -6453,29 +6428,14 @@ const struct vnodeopv_entry_desc zfs_fif
 	{ &vop_setattr_desc,		zfs_netbsd_setattr },
 	{ &vop_read_desc,		/**/zfs_netbsd_read },
 	{ &vop_write_desc,		/**/zfs_netbsd_write },
-	{ &vop_ioctl_desc,		vn_fifo_bypass },
-	{ &vop_poll_desc,		vn_fifo_bypass },
-	{ &vop_kqfilter_desc,		vn_fifo_bypass },
-	{ &vop_revoke_desc,		vn_fifo_bypass },
 	{ &vop_fsync_desc,		zfs_netbsd_fsync },
-	{ &vop_remove_desc,		vn_fifo_bypass },
-	{ &vop_link_desc,		vn_fifo_bypass },
 	{ &vop_lock_desc,		zfs_netbsd_lock },
 	{ &vop_unlock_desc,		zfs_netbsd_unlock },
-	{ &vop_rename_desc,		vn_fifo_bypass },
-	{ &vop_mkdir_desc,		vn_fifo_bypass },
-	{ &vop_rmdir_desc,		vn_fifo_bypass },
-	{ &vop_symlink_desc,		vn_fifo_bypass },
-	{ &vop_readdir_desc,		vn_fifo_bypass },
-	{ &vop_readlink_desc,		vn_fifo_bypass },
 	{ &vop_inactive_desc,		zfs_netbsd_inactive },
 	{ &vop_reclaim_desc,		zfs_netbsd_reclaim },
-	{ &vop_pathconf_desc,		vn_fifo_bypass },
-	{ &vop_seek_desc,		vn_fifo_bypass },
-	{ &vop_putpages_desc,		vn_fifo_bypass },
-	{ &vop_mmap_desc,		vn_fifo_bypass },
 	{ &vop_islocked_desc,		zfs_netbsd_islocked },
-	{ &vop_advlock_desc,		vn_fifo_bypass },
+	{ &vop_bwrite_desc,		vn_bwrite },
+	{ &vop_strategy_desc,		vn_fifo_bypass },
 	{ &vop_print_desc,		zfs_netbsd_print },
 	{ &vop_fcntl_desc,		zfs_netbsd_fcntl },
 	{ NULL, NULL }

Index: src/sys/fs/cd9660/cd9660_vnops.c
diff -u src/sys/fs/cd9660/cd9660_vnops.c:1.59 src/sys/fs/cd9660/cd9660_vnops.c:1.60
--- src/sys/fs/cd9660/cd9660_vnops.c:1.59	Tue Jun 29 22:34:06 2021
+++ src/sys/fs/cd9660/cd9660_vnops.c	Sun Jul 18 23:56:13 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: cd9660_vnops.c,v 1.59 2021/06/29 22:34:06 dholland Exp $	*/
+/*	$NetBSD: cd9660_vnops.c,v 1.60 2021/07/18 23:56:13 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1994
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cd9660_vnops.c,v 1.59 2021/06/29 22:34:06 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cd9660_vnops.c,v 1.60 2021/07/18 23:56:13 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -903,11 +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 */
-	{ &vop_open_desc, spec_open },			/* open */
+	GENFS_SPECOP_ENTRIES,
 	{ &vop_close_desc, spec_close },		/* close */
 	{ &vop_access_desc, cd9660_access },		/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -915,38 +911,15 @@ const struct vnodeopv_entry_desc cd9660_
 	{ &vop_setattr_desc, cd9660_setattr },		/* setattr */
 	{ &vop_read_desc, spec_read },			/* read */
 	{ &vop_write_desc, spec_write },		/* write */
-	{ &vop_fallocate_desc, spec_fallocate },	/* fallocate */
-	{ &vop_fdiscard_desc, spec_fdiscard },		/* fdiscard */
 	{ &vop_fcntl_desc, genfs_fcntl },		/* fcntl */
-	{ &vop_ioctl_desc, spec_ioctl },		/* ioctl */
-	{ &vop_poll_desc, spec_poll },			/* poll */
-	{ &vop_kqfilter_desc, spec_kqfilter },		/* kqfilter */
-	{ &vop_revoke_desc, spec_revoke },		/* revoke */
-	{ &vop_mmap_desc, spec_mmap },			/* mmap */
 	{ &vop_fsync_desc, spec_fsync },		/* fsync */
-	{ &vop_seek_desc, spec_seek },			/* seek */
-	{ &vop_remove_desc, spec_remove },		/* remove */
-	{ &vop_link_desc, spec_link },			/* link */
-	{ &vop_rename_desc, spec_rename },		/* rename */
-	{ &vop_mkdir_desc, spec_mkdir },		/* mkdir */
-	{ &vop_rmdir_desc, spec_rmdir },		/* rmdir */
-	{ &vop_symlink_desc, spec_symlink },		/* symlink */
-	{ &vop_readdir_desc, spec_readdir },		/* readdir */
-	{ &vop_readlink_desc, spec_readlink },		/* readlink */
-	{ &vop_abortop_desc, spec_abortop },		/* abortop */
 	{ &vop_inactive_desc, cd9660_inactive },	/* inactive */
 	{ &vop_reclaim_desc, cd9660_reclaim },		/* reclaim */
 	{ &vop_lock_desc, genfs_lock },			/* lock */
 	{ &vop_unlock_desc, genfs_unlock },		/* unlock */
-	{ &vop_bmap_desc, spec_bmap },			/* bmap */
-	{ &vop_strategy_desc, spec_strategy },		/* strategy */
 	{ &vop_print_desc, cd9660_print },		/* print */
 	{ &vop_islocked_desc, genfs_islocked },		/* islocked */
-	{ &vop_pathconf_desc, spec_pathconf },		/* pathconf */
-	{ &vop_advlock_desc, spec_advlock },		/* advlock */
 	{ &vop_bwrite_desc, vn_bwrite },		/* bwrite */
-	{ &vop_getpages_desc, spec_getpages },		/* getpages */
-	{ &vop_putpages_desc, spec_putpages },		/* putpages */
 	{ NULL, NULL }
 };
 const struct vnodeopv_desc cd9660_specop_opv_desc =
@@ -955,11 +928,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 */
-	{ &vop_open_desc, vn_fifo_bypass },		/* open */
+	GENFS_FIFOOP_ENTRIES,
 	{ &vop_close_desc, vn_fifo_bypass },		/* close */
 	{ &vop_access_desc, cd9660_access },		/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -967,37 +936,16 @@ const struct vnodeopv_entry_desc cd9660_
 	{ &vop_setattr_desc, cd9660_setattr },		/* setattr */
 	{ &vop_read_desc, vn_fifo_bypass },		/* read */
 	{ &vop_write_desc, vn_fifo_bypass },		/* write */
-	{ &vop_fallocate_desc, vn_fifo_bypass },	/* fallocate */
-	{ &vop_fdiscard_desc, vn_fifo_bypass },		/* fdiscard */
 	{ &vop_fcntl_desc, genfs_fcntl },		/* fcntl */
-	{ &vop_ioctl_desc, vn_fifo_bypass },		/* ioctl */
-	{ &vop_poll_desc, vn_fifo_bypass },		/* poll */
-	{ &vop_kqfilter_desc, vn_fifo_bypass },		/* kqfilter */
-	{ &vop_revoke_desc, vn_fifo_bypass },		/* revoke */
-	{ &vop_mmap_desc, vn_fifo_bypass },		/* mmap */
 	{ &vop_fsync_desc, vn_fifo_bypass },		/* fsync */
-	{ &vop_seek_desc, vn_fifo_bypass },		/* seek */
-	{ &vop_remove_desc, vn_fifo_bypass },		/* remove */
-	{ &vop_link_desc, vn_fifo_bypass } ,		/* link */
-	{ &vop_rename_desc, vn_fifo_bypass },		/* rename */
-	{ &vop_mkdir_desc, vn_fifo_bypass },		/* mkdir */
-	{ &vop_rmdir_desc, vn_fifo_bypass },		/* rmdir */
-	{ &vop_symlink_desc, vn_fifo_bypass },		/* symlink */
-	{ &vop_readdir_desc, vn_fifo_bypass },		/* readdir */
-	{ &vop_readlink_desc, vn_fifo_bypass },		/* readlink */
-	{ &vop_abortop_desc, vn_fifo_bypass },		/* abortop */
 	{ &vop_inactive_desc, cd9660_inactive },	/* inactive */
 	{ &vop_reclaim_desc, cd9660_reclaim },		/* reclaim */
 	{ &vop_lock_desc, genfs_lock },			/* lock */
 	{ &vop_unlock_desc, genfs_unlock },		/* unlock */
-	{ &vop_bmap_desc, vn_fifo_bypass },		/* bmap */
 	{ &vop_strategy_desc, vn_fifo_bypass },		/* strategy */
 	{ &vop_print_desc, cd9660_print },		/* print */
 	{ &vop_islocked_desc, genfs_islocked },		/* islocked */
-	{ &vop_pathconf_desc, vn_fifo_bypass },		/* pathconf */
-	{ &vop_advlock_desc, vn_fifo_bypass },		/* advlock */
 	{ &vop_bwrite_desc, vn_bwrite },		/* bwrite */
-	{ &vop_putpages_desc, vn_fifo_bypass }, 	/* putpages */
 	{ NULL, NULL }
 };
 const struct vnodeopv_desc cd9660_fifoop_opv_desc =

Index: src/sys/fs/efs/efs_vnops.c
diff -u src/sys/fs/efs/efs_vnops.c:1.42 src/sys/fs/efs/efs_vnops.c:1.43
--- src/sys/fs/efs/efs_vnops.c:1.42	Tue Jun 29 22:34:06 2021
+++ src/sys/fs/efs/efs_vnops.c	Sun Jul 18 23:56:13 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: efs_vnops.c,v 1.42 2021/06/29 22:34:06 dholland Exp $	*/
+/*	$NetBSD: efs_vnops.c,v 1.43 2021/07/18 23:56:13 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.42 2021/06/29 22:34:06 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: efs_vnops.c,v 1.43 2021/07/18 23:56:13 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -843,11 +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 */
-	{ &vop_open_desc,	spec_open	},	/* open */
+	GENFS_SPECOP_ENTRIES,
 	{ &vop_close_desc,	spec_close	},	/* close */
 	{ &vop_access_desc,	efs_access	},	/* access */
 	{ &vop_accessx_desc,	genfs_accessx	},	/* accessx */
@@ -855,44 +851,15 @@ const struct vnodeopv_entry_desc efs_spe
 	{ &vop_setattr_desc,	genfs_eopnotsupp},	/* setattr */
 	{ &vop_read_desc,	spec_read	},	/* read */
 	{ &vop_write_desc,	spec_write	},	/* write */
-	{ &vop_fallocate_desc,	spec_fallocate	},	/* fallocate */
-	{ &vop_fdiscard_desc,	spec_fdiscard	},	/* fdiscard */
-	{ &vop_ioctl_desc,	spec_ioctl	},	/* ioctl */
 	{ &vop_fcntl_desc,	genfs_fcntl	},	/* fcntl */
-	{ &vop_poll_desc,	spec_poll	},	/* poll */
-	{ &vop_kqfilter_desc,	spec_kqfilter	},	/* kqfilter */
-	{ &vop_revoke_desc,	spec_revoke	},	/* revoke */
-	{ &vop_mmap_desc,	spec_mmap	},	/* mmap */
 	{ &vop_fsync_desc,	spec_fsync	},	/* fsync */
-	{ &vop_seek_desc,	spec_seek	},	/* seek */
-	{ &vop_remove_desc,	spec_remove	},	/* remove */
-	{ &vop_link_desc,	spec_link	},	/* link */
-	{ &vop_rename_desc,	spec_rename	},	/* rename */
-	{ &vop_mkdir_desc,	spec_mkdir	},	/* mkdir */
-	{ &vop_rmdir_desc,	spec_rmdir	},	/* rmdir */
-	{ &vop_symlink_desc,	spec_symlink	},	/* symlink */
-	{ &vop_readdir_desc,	spec_readdir	},	/* readdir */
-	{ &vop_readlink_desc,	spec_readlink	},	/* readlink */
-	{ &vop_abortop_desc,	spec_abortop	},	/* abortop */
 	{ &vop_inactive_desc,	efs_inactive	},	/* inactive */
 	{ &vop_reclaim_desc,	efs_reclaim	},	/* reclaim */
 	{ &vop_lock_desc,	genfs_lock,	},	/* lock */
 	{ &vop_unlock_desc,	genfs_unlock,	},	/* unlock */
 	{ &vop_islocked_desc,	genfs_islocked,	},	/* islocked */
-	{ &vop_bmap_desc,	spec_bmap	},	/* bmap */
 	{ &vop_print_desc,	efs_print	},	/* print */
-	{ &vop_pathconf_desc,	spec_pathconf	},	/* pathconf */
-	{ &vop_advlock_desc,	spec_advlock	},	/* advlock */
-							/* blkatoff */
-							/* valloc */
-							/* balloc */
-							/* vfree */
-							/* truncate */
-							/* whiteout */
-	{ &vop_getpages_desc,	spec_getpages	},	/* getpages */
-	{ &vop_putpages_desc,	spec_putpages	},	/* putpages */
 	{ &vop_bwrite_desc,	vn_bwrite	},	/* bwrite */
-	{ &vop_strategy_desc,	spec_strategy	},	/* strategy */
 	{ NULL, NULL }
 };
 const struct vnodeopv_desc efs_specop_opv_desc = {
@@ -903,11 +870,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 */
-	{ &vop_open_desc,	vn_fifo_bypass	},	/* open */
+	GENFS_FIFOOP_ENTRIES,
 	{ &vop_close_desc,	vn_fifo_bypass	},	/* close */
 	{ &vop_access_desc,	efs_access	},	/* access */
 	{ &vop_accessx_desc,	genfs_accessx	},	/* accessx */
@@ -915,42 +878,16 @@ const struct vnodeopv_entry_desc efs_fif
 	{ &vop_setattr_desc,	genfs_eopnotsupp},	/* setattr */
 	{ &vop_read_desc,	vn_fifo_bypass	},	/* read */
 	{ &vop_write_desc,	vn_fifo_bypass	},	/* write */
-	{ &vop_fallocate_desc,	vn_fifo_bypass	},	/* fallocate */
-	{ &vop_fdiscard_desc,	vn_fifo_bypass	},	/* fdiscard */
-	{ &vop_ioctl_desc,	vn_fifo_bypass	},	/* ioctl */
 	{ &vop_fcntl_desc,	genfs_fcntl	},	/* fcntl */
-	{ &vop_poll_desc,	vn_fifo_bypass	},	/* poll */
-	{ &vop_kqfilter_desc,	vn_fifo_bypass	},	/* kqfilter */
-	{ &vop_revoke_desc,	vn_fifo_bypass	},	/* revoke */
-	{ &vop_mmap_desc,	vn_fifo_bypass	},	/* mmap */
 	{ &vop_fsync_desc,	vn_fifo_bypass	},	/* fsync */
-	{ &vop_seek_desc,	vn_fifo_bypass	},	/* seek */
-	{ &vop_remove_desc,	vn_fifo_bypass	},	/* remove */
-	{ &vop_link_desc,	vn_fifo_bypass	},	/* link */
-	{ &vop_rename_desc,	vn_fifo_bypass	},	/* rename */
-	{ &vop_mkdir_desc,	vn_fifo_bypass	},	/* mkdir */
-	{ &vop_rmdir_desc,	vn_fifo_bypass	},	/* rmdir */
-	{ &vop_symlink_desc,	vn_fifo_bypass	},	/* symlink */
-	{ &vop_readdir_desc,	vn_fifo_bypass	},	/* readdir */
-	{ &vop_readlink_desc,	vn_fifo_bypass	},	/* readlink */
-	{ &vop_abortop_desc,	vn_fifo_bypass	},	/* abortop */
 	{ &vop_inactive_desc,	efs_inactive	},	/* inactive */
 	{ &vop_reclaim_desc,	efs_reclaim	},	/* reclaim */
 	{ &vop_lock_desc,	genfs_lock,	},	/* lock */
 	{ &vop_unlock_desc,	genfs_unlock,	},	/* unlock */
 	{ &vop_islocked_desc,	genfs_islocked,	},	/* islocked */
-	{ &vop_bmap_desc,	vn_fifo_bypass	},	/* bmap */
+	{ &vop_strategy_desc,   vn_fifo_bypass  },	/* strategy */
 	{ &vop_print_desc,	efs_print	},	/* print */
-	{ &vop_pathconf_desc,	vn_fifo_bypass	},	/* pathconf */
-	{ &vop_advlock_desc,	vn_fifo_bypass	},	/* advlock */
-							/* blkatoff */
-							/* valloc */
-							/* balloc */
-							/* vfree */
-							/* truncate */
-							/* whiteout */
 	{ &vop_bwrite_desc,	vn_bwrite	},	/* bwrite */
-	{ &vop_strategy_desc,	vn_fifo_bypass	},	/* strategy */
 	{ NULL, NULL }
 };
 const struct vnodeopv_desc efs_fifoop_opv_desc = {

Index: src/sys/fs/hfs/hfs_vnops.c
diff -u src/sys/fs/hfs/hfs_vnops.c:1.38 src/sys/fs/hfs/hfs_vnops.c:1.39
--- src/sys/fs/hfs/hfs_vnops.c:1.38	Tue Jun 29 22:37:50 2021
+++ src/sys/fs/hfs/hfs_vnops.c	Sun Jul 18 23:56:13 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: hfs_vnops.c,v 1.38 2021/06/29 22:37:50 dholland Exp $	*/
+/*	$NetBSD: hfs_vnops.c,v 1.39 2021/07/18 23:56:13 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.38 2021/06/29 22:37:50 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hfs_vnops.c,v 1.39 2021/07/18 23:56:13 dholland Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ipsec.h"
@@ -215,11 +215,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 */
-	{ &vop_open_desc, spec_open },			/* open */
+	GENFS_SPECOP_ENTRIES,
 	{ &vop_close_desc, spec_close },		/* close */
 	{ &vop_access_desc, hfs_vop_access },		/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -227,45 +223,22 @@ const struct vnodeopv_entry_desc hfs_spe
 	{ &vop_setattr_desc, hfs_vop_setattr },		/* setattr */
 	{ &vop_read_desc, spec_read },			/* read */
 	{ &vop_write_desc, spec_write },		/* write */
-	{ &vop_fallocate_desc, spec_fallocate },	/* fallocate */
-	{ &vop_fdiscard_desc, spec_fdiscard },		/* fdiscard */
-	{ &vop_ioctl_desc, spec_ioctl },		/* ioctl */
 	{ &vop_fcntl_desc, genfs_fcntl },		/* fcntl */
-	{ &vop_poll_desc, spec_poll },			/* poll */
-	{ &vop_kqfilter_desc, spec_kqfilter },		/* kqfilter */
-	{ &vop_revoke_desc, spec_revoke },		/* revoke */
-	{ &vop_mmap_desc, spec_mmap },			/* mmap */
 	{ &vop_fsync_desc, spec_fsync },		/* fsync */
-	{ &vop_seek_desc, spec_seek },			/* seek */
-	{ &vop_remove_desc, spec_remove },		/* remove */
-	{ &vop_link_desc, spec_link },			/* link */
-	{ &vop_rename_desc, spec_rename },		/* rename */
-	{ &vop_mkdir_desc, spec_mkdir },		/* mkdir */
-	{ &vop_rmdir_desc, spec_rmdir },		/* rmdir */
-	{ &vop_symlink_desc, spec_symlink },		/* symlink */
-	{ &vop_readdir_desc, spec_readdir },		/* readdir */
-	{ &vop_readlink_desc, spec_readlink },		/* readlink */
-	{ &vop_abortop_desc, spec_abortop },		/* abortop */
 	{ &vop_inactive_desc, genfs_eopnotsupp },	/* inactive */
 	{ &vop_reclaim_desc, hfs_vop_reclaim },		/* reclaim */
 	{ &vop_lock_desc, genfs_lock },			/* lock */
 	{ &vop_unlock_desc, genfs_unlock },		/* unlock */
-	{ &vop_bmap_desc, spec_bmap },			/* bmap */
-	{ &vop_strategy_desc, spec_strategy },		/* strategy */
 	{ &vop_print_desc, hfs_vop_print },		/* print */
 	{ &vop_islocked_desc, genfs_islocked },		/* islocked */
-	{ &vop_pathconf_desc, spec_pathconf },		/* pathconf */
-	{ &vop_advlock_desc, spec_advlock },		/* advlock */
 	{ &vop_bwrite_desc, vn_bwrite },		/* bwrite */
-	{ &vop_getpages_desc, spec_getpages },		/* getpages */
-	{ &vop_putpages_desc, spec_putpages },		/* putpages */
 #if 0
-	{ &vop_openextattr_desc, ffs_openextattr },	/* openextattr */
-	{ &vop_closeextattr_desc, ffs_closeextattr },	/* closeextattr */
-	{ &vop_getextattr_desc, ffs_getextattr },	/* getextattr */
-	{ &vop_setextattr_desc, ffs_setextattr },	/* setextattr */
-	{ &vop_listextattr_desc, ffs_listextattr },	/* listextattr */
-	{ &vop_deleteextattr_desc, ffs_deleteextattr },	/* deleteextattr */
+	{ &vop_openextattr_desc, hfs_openextattr },	/* openextattr */
+	{ &vop_closeextattr_desc, hfs_closeextattr },	/* closeextattr */
+	{ &vop_getextattr_desc, hfs_getextattr },	/* getextattr */
+	{ &vop_setextattr_desc, hfs_setextattr },	/* setextattr */
+	{ &vop_listextattr_desc, hfs_listextattr },	/* listextattr */
+	{ &vop_deleteextattr_desc, hfs_deleteextattr },	/* deleteextattr */
 #endif
 	{ NULL, NULL }
 };
@@ -275,11 +248,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 */
-	{ &vop_open_desc, vn_fifo_bypass },		/* open */
+	GENFS_FIFOOP_ENTRIES,
 	{ &vop_close_desc, vn_fifo_bypass },		/* close */
 	{ &vop_access_desc, hfs_vop_access },		/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -287,44 +256,23 @@ const struct vnodeopv_entry_desc hfs_fif
 	{ &vop_setattr_desc, hfs_vop_setattr },		/* setattr */
 	{ &vop_read_desc, vn_fifo_bypass },		/* read */
 	{ &vop_write_desc, vn_fifo_bypass },		/* write */
-	{ &vop_fallocate_desc, vn_fifo_bypass },	/* fallocate */
-	{ &vop_fdiscard_desc, vn_fifo_bypass },		/* fdiscard */
-	{ &vop_ioctl_desc, vn_fifo_bypass },		/* ioctl */
 	{ &vop_fcntl_desc, genfs_fcntl },		/* fcntl */
-	{ &vop_poll_desc, vn_fifo_bypass },		/* poll */
-	{ &vop_kqfilter_desc, vn_fifo_bypass },		/* kqfilter */
-	{ &vop_revoke_desc, vn_fifo_bypass },		/* revoke */
-	{ &vop_mmap_desc, vn_fifo_bypass },		/* mmap */
 	{ &vop_fsync_desc, vn_fifo_bypass },		/* fsync */
-	{ &vop_seek_desc, vn_fifo_bypass },		/* seek */
-	{ &vop_remove_desc, vn_fifo_bypass },		/* remove */
-	{ &vop_link_desc, vn_fifo_bypass },		/* link */
-	{ &vop_rename_desc, vn_fifo_bypass },		/* rename */
-	{ &vop_mkdir_desc, vn_fifo_bypass },		/* mkdir */
-	{ &vop_rmdir_desc, vn_fifo_bypass },		/* rmdir */
-	{ &vop_symlink_desc, vn_fifo_bypass },		/* symlink */
-	{ &vop_readdir_desc, vn_fifo_bypass },		/* readdir */
-	{ &vop_readlink_desc, vn_fifo_bypass },		/* readlink */
-	{ &vop_abortop_desc, vn_fifo_bypass },		/* abortop */
 	{ &vop_inactive_desc, genfs_eopnotsupp },	/* inactive */
 	{ &vop_reclaim_desc, hfs_vop_reclaim },		/* reclaim */
 	{ &vop_lock_desc, genfs_lock },			/* lock */
 	{ &vop_unlock_desc, genfs_unlock },		/* unlock */
-	{ &vop_bmap_desc, vn_fifo_bypass },		/* bmap */
 	{ &vop_strategy_desc, vn_fifo_bypass },		/* strategy */
 	{ &vop_print_desc, hfs_vop_print },		/* print */
 	{ &vop_islocked_desc, genfs_islocked },		/* islocked */
-	{ &vop_pathconf_desc, vn_fifo_bypass },		/* pathconf */
-	{ &vop_advlock_desc, vn_fifo_bypass },		/* advlock */
 	{ &vop_bwrite_desc, vn_bwrite },		/* bwrite */
-	{ &vop_putpages_desc, vn_fifo_bypass }, 	/* putpages */
 #if 0
-	{ &vop_openextattr_desc, ffs_openextattr },	/* openextattr */
-	{ &vop_closeextattr_desc, ffs_closeextattr },	/* closeextattr */
-	{ &vop_getextattr_desc, ffs_getextattr },	/* getextattr */
-	{ &vop_setextattr_desc, ffs_setextattr },	/* setextattr */
-	{ &vop_listextattr_desc, ffs_listextattr },	/* listextattr */
-	{ &vop_deleteextattr_desc, ffs_deleteextattr },	/* deleteextattr */
+	{ &vop_openextattr_desc, hfs_openextattr },	/* openextattr */
+	{ &vop_closeextattr_desc, hfs_closeextattr },	/* closeextattr */
+	{ &vop_getextattr_desc, hfs_getextattr },	/* getextattr */
+	{ &vop_setextattr_desc, hfs_setextattr },	/* setextattr */
+	{ &vop_listextattr_desc, hfs_listextattr },	/* listextattr */
+	{ &vop_deleteextattr_desc, hfs_deleteextattr },	/* deleteextattr */
 #endif
 	{ NULL, NULL }
 };

Index: src/sys/fs/puffs/puffs_vnops.c
diff -u src/sys/fs/puffs/puffs_vnops.c:1.219 src/sys/fs/puffs/puffs_vnops.c:1.220
--- src/sys/fs/puffs/puffs_vnops.c:1.219	Tue Jun 29 22:39:20 2021
+++ src/sys/fs/puffs/puffs_vnops.c	Sun Jul 18 23:56:13 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_vnops.c,v 1.219 2021/06/29 22:39:20 dholland Exp $	*/
+/*	$NetBSD: puffs_vnops.c,v 1.220 2021/07/18 23:56:13 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.219 2021/06/29 22:39:20 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.220 2021/07/18 23:56:13 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -164,11 +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 */
-	{ &vop_open_desc, spec_open },			/* spec_open */
+	GENFS_SPECOP_ENTRIES,
 	{ &vop_close_desc, spec_close },		/* spec_close */
 	{ &vop_access_desc, puffs_vnop_checkop },	/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -176,38 +172,15 @@ const struct vnodeopv_entry_desc puffs_s
 	{ &vop_setattr_desc, puffs_vnop_checkop },	/* setattr */
 	{ &vop_read_desc, puffs_vnop_spec_read },	/* update, read */
 	{ &vop_write_desc, puffs_vnop_spec_write },	/* update, write */
-	{ &vop_fallocate_desc, spec_fallocate },	/* fallocate */
-	{ &vop_fdiscard_desc, spec_fdiscard },		/* fdiscard */
-	{ &vop_ioctl_desc, spec_ioctl },		/* spec_ioctl */
 	{ &vop_fcntl_desc, genfs_fcntl },		/* dummy */
-	{ &vop_poll_desc, spec_poll },			/* spec_poll */
-	{ &vop_kqfilter_desc, spec_kqfilter },		/* spec_kqfilter */
-	{ &vop_revoke_desc, spec_revoke },		/* genfs_revoke */
-	{ &vop_mmap_desc, spec_mmap },			/* spec_mmap */
 	{ &vop_fsync_desc, spec_fsync },		/* vflushbuf */
-	{ &vop_seek_desc, spec_seek },			/* genfs_nullop */
-	{ &vop_remove_desc, spec_remove },		/* genfs_badop */
-	{ &vop_link_desc, spec_link },			/* genfs_badop */
-	{ &vop_rename_desc, spec_rename },		/* genfs_badop */
-	{ &vop_mkdir_desc, spec_mkdir },		/* genfs_badop */
-	{ &vop_rmdir_desc, spec_rmdir },		/* genfs_badop */
-	{ &vop_symlink_desc, spec_symlink },		/* genfs_badop */
-	{ &vop_readdir_desc, spec_readdir },		/* genfs_badop */
-	{ &vop_readlink_desc, spec_readlink },		/* genfs_badop */
-	{ &vop_abortop_desc, spec_abortop },		/* genfs_badop */
 	{ &vop_inactive_desc, puffs_vnop_inactive },	/* REAL inactive */
 	{ &vop_reclaim_desc, puffs_vnop_reclaim },	/* REAL reclaim */
 	{ &vop_lock_desc, puffs_vnop_lock },		/* REAL lock */
 	{ &vop_unlock_desc, puffs_vnop_unlock },	/* REAL unlock */
-	{ &vop_bmap_desc, spec_bmap },			/* dummy */
-	{ &vop_strategy_desc, spec_strategy },		/* dev strategy */
 	{ &vop_print_desc, puffs_vnop_print },		/* REAL print */
 	{ &vop_islocked_desc, puffs_vnop_islocked },	/* REAL islocked */
-	{ &vop_pathconf_desc, spec_pathconf },		/* pathconf */
-	{ &vop_advlock_desc, spec_advlock },		/* lf_advlock */
 	{ &vop_bwrite_desc, vn_bwrite },		/* bwrite */
-	{ &vop_getpages_desc, spec_getpages },		/* genfs_getpages */
-	{ &vop_putpages_desc, spec_putpages },		/* genfs_putpages */
 	{ &vop_getextattr_desc, puffs_vnop_checkop },	/* getextattr */
 	{ &vop_setextattr_desc, puffs_vnop_checkop },	/* setextattr */
 	{ &vop_listextattr_desc, puffs_vnop_checkop },	/* listextattr */
@@ -225,11 +198,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 */
-	{ &vop_open_desc, vn_fifo_bypass },		/* open */
+	GENFS_FIFOOP_ENTRIES,
 	{ &vop_close_desc, vn_fifo_bypass },		/* close */
 	{ &vop_access_desc, puffs_vnop_checkop },	/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -237,37 +206,16 @@ const struct vnodeopv_entry_desc puffs_f
 	{ &vop_setattr_desc, puffs_vnop_checkop },	/* setattr */
 	{ &vop_read_desc, puffs_vnop_fifo_read },	/* read, update */
 	{ &vop_write_desc, puffs_vnop_fifo_write },	/* write, update */
-	{ &vop_fallocate_desc, vn_fifo_bypass },	/* fallocate */
-	{ &vop_fdiscard_desc, vn_fifo_bypass },		/* fdiscard */
-	{ &vop_ioctl_desc, vn_fifo_bypass },		/* ioctl */
 	{ &vop_fcntl_desc, genfs_fcntl },		/* dummy */
-	{ &vop_poll_desc, vn_fifo_bypass },		/* poll */
-	{ &vop_kqfilter_desc, vn_fifo_bypass },		/* kqfilter */
-	{ &vop_revoke_desc, vn_fifo_bypass },		/* genfs_revoke */
-	{ &vop_mmap_desc, vn_fifo_bypass },		/* genfs_badop */
 	{ &vop_fsync_desc, vn_fifo_bypass },		/* genfs_nullop*/
-	{ &vop_seek_desc, vn_fifo_bypass },		/* genfs_badop */
-	{ &vop_remove_desc, vn_fifo_bypass },		/* genfs_badop */
-	{ &vop_link_desc, vn_fifo_bypass },		/* genfs_badop */
-	{ &vop_rename_desc, vn_fifo_bypass },		/* genfs_badop */
-	{ &vop_mkdir_desc, vn_fifo_bypass },		/* genfs_badop */
-	{ &vop_rmdir_desc, vn_fifo_bypass },		/* genfs_badop */
-	{ &vop_symlink_desc, vn_fifo_bypass },		/* genfs_badop */
-	{ &vop_readdir_desc, vn_fifo_bypass },		/* genfs_badop */
-	{ &vop_readlink_desc, vn_fifo_bypass },		/* genfs_badop */
-	{ &vop_abortop_desc, vn_fifo_bypass },		/* genfs_badop */
 	{ &vop_inactive_desc, puffs_vnop_inactive },	/* REAL inactive */
 	{ &vop_reclaim_desc, puffs_vnop_reclaim },	/* REAL reclaim */
 	{ &vop_lock_desc, puffs_vnop_lock },		/* REAL lock */
 	{ &vop_unlock_desc, puffs_vnop_unlock },	/* REAL unlock */
-	{ &vop_bmap_desc, vn_fifo_bypass },		/* dummy */
 	{ &vop_strategy_desc, vn_fifo_bypass },		/* genfs_badop */
 	{ &vop_print_desc, puffs_vnop_print },		/* REAL print */
 	{ &vop_islocked_desc, puffs_vnop_islocked },	/* REAL islocked */
-	{ &vop_pathconf_desc, vn_fifo_bypass },		/* pathconf */
-	{ &vop_advlock_desc, vn_fifo_bypass },		/* genfs_einval */
 	{ &vop_bwrite_desc, vn_bwrite },		/* bwrite */
-	{ &vop_putpages_desc, vn_fifo_bypass }, 	/* genfs_null_putpages*/
 #if 0
 	{ &vop_openextattr_desc, _openextattr },	/* openextattr */
 	{ &vop_closeextattr_desc, _closeextattr },	/* closeextattr */

Index: src/sys/fs/tmpfs/tmpfs_fifoops.c
diff -u src/sys/fs/tmpfs/tmpfs_fifoops.c:1.13 src/sys/fs/tmpfs/tmpfs_fifoops.c:1.14
--- src/sys/fs/tmpfs/tmpfs_fifoops.c:1.13	Tue Jun 29 22:34:07 2021
+++ src/sys/fs/tmpfs/tmpfs_fifoops.c	Sun Jul 18 23:56:13 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: tmpfs_fifoops.c,v 1.13 2021/06/29 22:34:07 dholland Exp $	*/
+/*	$NetBSD: tmpfs_fifoops.c,v 1.14 2021/07/18 23:56:13 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.13 2021/06/29 22:34:07 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tmpfs_fifoops.c,v 1.14 2021/07/18 23:56:13 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/vnode.h>
@@ -49,11 +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 },
-	{ &vop_open_desc,		tmpfs_fifo_open },
+	GENFS_FIFOOP_ENTRIES,
 	{ &vop_close_desc,		tmpfs_fifo_close },
 	{ &vop_access_desc,		tmpfs_fifo_access },
 	{ &vop_accessx_desc,		genfs_accessx },
@@ -61,38 +57,16 @@ const struct vnodeopv_entry_desc tmpfs_f
 	{ &vop_setattr_desc,		tmpfs_fifo_setattr },
 	{ &vop_read_desc,		tmpfs_fifo_read },
 	{ &vop_write_desc,		tmpfs_fifo_write },
-	{ &vop_fallocate_desc,		vn_fifo_bypass },
-	{ &vop_fdiscard_desc,		vn_fifo_bypass },
-	{ &vop_ioctl_desc,		tmpfs_fifo_ioctl },
 	{ &vop_fcntl_desc,		tmpfs_fifo_fcntl },
-	{ &vop_poll_desc,		tmpfs_fifo_poll },
-	{ &vop_kqfilter_desc,		tmpfs_fifo_kqfilter },
-	{ &vop_revoke_desc,		tmpfs_fifo_revoke },
-	{ &vop_mmap_desc,		tmpfs_fifo_mmap },
 	{ &vop_fsync_desc,		tmpfs_fifo_fsync },
-	{ &vop_seek_desc,		tmpfs_fifo_seek },
-	{ &vop_remove_desc,		tmpfs_fifo_remove },
-	{ &vop_link_desc,		tmpfs_fifo_link },
-	{ &vop_rename_desc,		tmpfs_fifo_rename },
-	{ &vop_mkdir_desc,		tmpfs_fifo_mkdir },
-	{ &vop_rmdir_desc,		tmpfs_fifo_rmdir },
-	{ &vop_symlink_desc,		tmpfs_fifo_symlink },
-	{ &vop_readdir_desc,		tmpfs_fifo_readdir },
-	{ &vop_readlink_desc,		tmpfs_fifo_readlink },
-	{ &vop_abortop_desc,		tmpfs_fifo_abortop },
 	{ &vop_inactive_desc,		tmpfs_fifo_inactive },
 	{ &vop_reclaim_desc,		tmpfs_fifo_reclaim },
 	{ &vop_lock_desc,		tmpfs_fifo_lock },
 	{ &vop_unlock_desc,		tmpfs_fifo_unlock },
-	{ &vop_bmap_desc,		tmpfs_fifo_bmap },
 	{ &vop_strategy_desc,		tmpfs_fifo_strategy },
 	{ &vop_print_desc,		tmpfs_fifo_print },
-	{ &vop_pathconf_desc,		tmpfs_fifo_pathconf },
 	{ &vop_islocked_desc,		tmpfs_fifo_islocked },
-	{ &vop_advlock_desc,		tmpfs_fifo_advlock },
 	{ &vop_bwrite_desc,		tmpfs_fifo_bwrite },
-	{ &vop_getpages_desc,		tmpfs_fifo_getpages },
-	{ &vop_putpages_desc,		tmpfs_fifo_putpages },
 	{ NULL, NULL }
 };
 

Index: src/sys/fs/tmpfs/tmpfs_specops.c
diff -u src/sys/fs/tmpfs/tmpfs_specops.c:1.14 src/sys/fs/tmpfs/tmpfs_specops.c:1.15
--- src/sys/fs/tmpfs/tmpfs_specops.c:1.14	Tue Jun 29 22:34:07 2021
+++ src/sys/fs/tmpfs/tmpfs_specops.c	Sun Jul 18 23:56:13 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: tmpfs_specops.c,v 1.14 2021/06/29 22:34:07 dholland Exp $	*/
+/*	$NetBSD: tmpfs_specops.c,v 1.15 2021/07/18 23:56:13 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.14 2021/06/29 22:34:07 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tmpfs_specops.c,v 1.15 2021/07/18 23:56:13 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/vnode.h>
@@ -52,11 +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 },
-	{ &vop_open_desc,		tmpfs_spec_open },
+	GENFS_SPECOP_ENTRIES,
 	{ &vop_close_desc,		tmpfs_spec_close },
 	{ &vop_access_desc,		tmpfs_spec_access },
 	{ &vop_accessx_desc,		genfs_accessx },
@@ -64,38 +60,15 @@ const struct vnodeopv_entry_desc tmpfs_s
 	{ &vop_setattr_desc,		tmpfs_spec_setattr },
 	{ &vop_read_desc,		tmpfs_spec_read },
 	{ &vop_write_desc,		tmpfs_spec_write },
-	{ &vop_fallocate_desc,		spec_fallocate },
-	{ &vop_fdiscard_desc,		spec_fdiscard },
-	{ &vop_ioctl_desc,		tmpfs_spec_ioctl },
 	{ &vop_fcntl_desc,		tmpfs_spec_fcntl },
-	{ &vop_poll_desc,		tmpfs_spec_poll },
-	{ &vop_kqfilter_desc,		tmpfs_spec_kqfilter },
-	{ &vop_revoke_desc,		tmpfs_spec_revoke },
-	{ &vop_mmap_desc,		tmpfs_spec_mmap },
 	{ &vop_fsync_desc,		tmpfs_spec_fsync },
-	{ &vop_seek_desc,		tmpfs_spec_seek },
-	{ &vop_remove_desc,		tmpfs_spec_remove },
-	{ &vop_link_desc,		tmpfs_spec_link },
-	{ &vop_rename_desc,		tmpfs_spec_rename },
-	{ &vop_mkdir_desc,		tmpfs_spec_mkdir },
-	{ &vop_rmdir_desc,		tmpfs_spec_rmdir },
-	{ &vop_symlink_desc,		tmpfs_spec_symlink },
-	{ &vop_readdir_desc,		tmpfs_spec_readdir },
-	{ &vop_readlink_desc,		tmpfs_spec_readlink },
-	{ &vop_abortop_desc,		tmpfs_spec_abortop },
 	{ &vop_inactive_desc,		tmpfs_spec_inactive },
 	{ &vop_reclaim_desc,		tmpfs_spec_reclaim },
 	{ &vop_lock_desc,		tmpfs_spec_lock },
 	{ &vop_unlock_desc,		tmpfs_spec_unlock },
-	{ &vop_bmap_desc,		tmpfs_spec_bmap },
-	{ &vop_strategy_desc,		tmpfs_spec_strategy },
 	{ &vop_print_desc,		tmpfs_spec_print },
-	{ &vop_pathconf_desc,		tmpfs_spec_pathconf },
 	{ &vop_islocked_desc,		tmpfs_spec_islocked },
-	{ &vop_advlock_desc,		tmpfs_spec_advlock },
 	{ &vop_bwrite_desc,		tmpfs_spec_bwrite },
-	{ &vop_getpages_desc,		tmpfs_spec_getpages },
-	{ &vop_putpages_desc,		tmpfs_spec_putpages },
 	{ NULL, NULL }
 };
 

Index: src/sys/fs/v7fs/v7fs_extern.c
diff -u src/sys/fs/v7fs/v7fs_extern.c:1.8 src/sys/fs/v7fs/v7fs_extern.c:1.9
--- src/sys/fs/v7fs/v7fs_extern.c:1.8	Tue Jun 29 22:34:08 2021
+++ src/sys/fs/v7fs/v7fs_extern.c	Sun Jul 18 23:56:13 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: v7fs_extern.c,v 1.8 2021/06/29 22:34:08 dholland Exp $	*/
+/*	$NetBSD: v7fs_extern.c,v 1.9 2021/07/18 23:56:13 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.8 2021/06/29 22:34:08 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: v7fs_extern.c,v 1.9 2021/07/18 23:56:13 dholland Exp $");
 
 #if defined _KERNEL_OPT
 #include "opt_v7fs.h"
@@ -106,11 +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*/
-	{ &vop_open_desc, spec_open },			/* open */
+	GENFS_SPECOP_ENTRIES,
 	{ &vop_close_desc, spec_close },		/* close */
 	{ &vop_access_desc, v7fs_access },		/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -118,49 +114,22 @@ const struct vnodeopv_entry_desc v7fs_sp
 	{ &vop_setattr_desc, v7fs_setattr },		/* setattr */
 	{ &vop_read_desc, spec_read },			/* read */
 	{ &vop_write_desc, spec_write },		/* write */
-	{ &vop_fallocate_desc, spec_fallocate },	/* fallocate */
-	{ &vop_fdiscard_desc, spec_fdiscard },		/* fdiscard */
-	{ &vop_ioctl_desc, spec_ioctl },		/* ioctl */
 	{ &vop_fcntl_desc, genfs_fcntl },		/* fcntl */
-	{ &vop_poll_desc, spec_poll },			/* poll */
-	{ &vop_kqfilter_desc, spec_kqfilter },		/* kqfilter */
-	{ &vop_revoke_desc, spec_revoke },		/* revoke */
-	{ &vop_mmap_desc, spec_mmap },			/* mmap */
 	{ &vop_fsync_desc, spec_fsync },		/* fsync */
-	{ &vop_seek_desc, spec_seek },			/* seek */
-	{ &vop_remove_desc, spec_remove },		/* remove */
-	{ &vop_link_desc, spec_link },			/* link */
-	{ &vop_rename_desc, spec_rename },		/* rename */
-	{ &vop_mkdir_desc, spec_mkdir },		/* mkdir */
-	{ &vop_rmdir_desc, spec_rmdir },		/* rmdir */
-	{ &vop_symlink_desc, spec_symlink },		/* symlink */
-	{ &vop_readdir_desc, spec_readdir },		/* readdir */
-	{ &vop_readlink_desc, spec_readlink },		/* readlink */
-	{ &vop_abortop_desc, spec_abortop },		/* abortop */
 	{ &vop_inactive_desc, v7fs_inactive },		/* inactive */
 	{ &vop_reclaim_desc, v7fs_reclaim },		/* reclaim */
 	{ &vop_lock_desc, genfs_lock },			/* lock */
 	{ &vop_unlock_desc, genfs_unlock },		/* unlock */
-	{ &vop_bmap_desc, spec_bmap },			/* bmap */
-	{ &vop_strategy_desc, spec_strategy },		/* strategy */
 	{ &vop_print_desc, spec_print },		/* print */
 	{ &vop_islocked_desc, genfs_islocked },		/* islocked */
-	{ &vop_pathconf_desc, spec_pathconf },		/* pathconf */
-	{ &vop_advlock_desc, spec_advlock },		/* advlock */
 	{ &vop_bwrite_desc, vn_bwrite },		/* bwrite */
-	{ &vop_getpages_desc, spec_getpages },		/* getpages */
-	{ &vop_putpages_desc, spec_putpages },		/* putpages */
 	{ NULL, NULL }
 };
 
 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 */
-	{ &vop_open_desc, vn_fifo_bypass },		/* open */
+	GENFS_FIFOOP_ENTRIES,
 	{ &vop_close_desc, vn_fifo_bypass },		/* close */
 	{ &vop_access_desc, v7fs_access },		/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -168,37 +137,16 @@ const struct vnodeopv_entry_desc v7fs_fi
 	{ &vop_setattr_desc, v7fs_setattr },		/* setattr */
 	{ &vop_read_desc, vn_fifo_bypass },		/* read */
 	{ &vop_write_desc, vn_fifo_bypass },		/* write */
-	{ &vop_fallocate_desc, vn_fifo_bypass },	/* fallocate */
-	{ &vop_fdiscard_desc, vn_fifo_bypass },		/* fdiscard */
-	{ &vop_ioctl_desc, vn_fifo_bypass },		/* ioctl */
 	{ &vop_fcntl_desc, genfs_fcntl },		/* fcntl */
-	{ &vop_poll_desc, vn_fifo_bypass },		/* poll */
-	{ &vop_kqfilter_desc, vn_fifo_bypass },		/* kqfilter */
-	{ &vop_revoke_desc, vn_fifo_bypass },		/* revoke */
-	{ &vop_mmap_desc, vn_fifo_bypass },		/* mmap */
 	{ &vop_fsync_desc, vn_fifo_bypass },		/* fsync */
-	{ &vop_seek_desc, vn_fifo_bypass },		/* seek */
-	{ &vop_remove_desc, vn_fifo_bypass },		/* remove */
-	{ &vop_link_desc, vn_fifo_bypass },		/* link */
-	{ &vop_rename_desc, vn_fifo_bypass },		/* rename */
-	{ &vop_mkdir_desc, vn_fifo_bypass },		/* mkdir */
-	{ &vop_rmdir_desc, vn_fifo_bypass },		/* rmdir */
-	{ &vop_symlink_desc, vn_fifo_bypass },		/* symlink */
-	{ &vop_readdir_desc, vn_fifo_bypass },		/* readdir */
-	{ &vop_readlink_desc, vn_fifo_bypass },		/* readlink */
-	{ &vop_abortop_desc, vn_fifo_bypass },		/* abortop */
 	{ &vop_inactive_desc, v7fs_inactive },		/* inactive */
 	{ &vop_reclaim_desc, v7fs_reclaim },		/* reclaim */
 	{ &vop_lock_desc, vn_fifo_bypass },		/* lock */
 	{ &vop_unlock_desc, vn_fifo_bypass },		/* unlock */
-	{ &vop_bmap_desc, vn_fifo_bypass },		/* bmap */
 	{ &vop_strategy_desc, vn_fifo_bypass },		/* strategy */
 	{ &vop_print_desc, vn_fifo_bypass },		/* print */
 	{ &vop_islocked_desc, vn_fifo_bypass },		/* islocked */
-	{ &vop_pathconf_desc, vn_fifo_bypass },		/* pathconf */
-	{ &vop_advlock_desc, vn_fifo_bypass },		/* advlock */
 	{ &vop_bwrite_desc, vn_bwrite },		/* bwrite */
-	{ &vop_putpages_desc, vn_fifo_bypass },		/* putpages */
 	{ NULL, NULL }
 };
 

Index: src/sys/miscfs/fifofs/fifo.h
diff -u src/sys/miscfs/fifofs/fifo.h:1.26 src/sys/miscfs/fifofs/fifo.h:1.27
--- src/sys/miscfs/fifofs/fifo.h:1.26	Mon Mar 29 13:11:33 2010
+++ src/sys/miscfs/fifofs/fifo.h	Sun Jul 18 23:56:13 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: fifo.h,v 1.26 2010/03/29 13:11:33 pooka Exp $	*/
+/*	$NetBSD: fifo.h,v 1.27 2021/07/18 23:56:13 dholland Exp $	*/
 
 /*
  * Copyright (c) 1991, 1993
@@ -32,3 +32,88 @@
  */
 
 extern int (**fifo_vnodeop_p)(void *);
+
+/*
+ * This macro provides an initializer list for the fs-independent part
+ * of a filesystem's fifo vnode ops descriptor table. We still need
+ * such a table in every filesystem, but we can at least avoid the
+ * cutpaste.
+ *
+ * This contains these ops:
+ *    parsepath lookup
+ *    create whiteout mknod open fallocate fdiscard ioctl poll kqfilter
+ *    revoke mmap seek remove link rename mkdir rmdir symlink readdir
+ *    readlink abortop bmap pathconf advlock getpages putpages
+ *
+ * The filesystem should provide these ops that need to be its own:
+ *    access and accessx
+ *    getattr
+ *    setattr
+ *    fcntl
+ *    inactive
+ *    reclaim
+ *    lock
+ *    unlock
+ *    strategy
+ *    print (should probably also call fifo_print)
+ *    islocked
+ *    bwrite (normally vn_bwrite)
+ *    openextattr
+ *    closeextattr
+ *    getextattr
+ *    setextattr
+ *    listextattr
+ *    deleteextattr
+ *    getacl
+ *    setacl
+ *    aclcheck
+ *
+ * The filesystem should also provide these ops that some filesystems
+ * do their own things with:
+ *    close
+ *    read
+ *    write
+ *    fsync
+ * In most cases "their own things" means adjust timestamps and call
+ * fifo_foo (currently via vn_fifo_bypass). For fsync it varies.
+ *
+ * Note that because the op descriptor tables are unordered it does not
+ * matter where in the table this macro goes (except I think default 
+ * still needs to be first...)
+ *
+ * XXX currently all the ops are vn_fifo_bypass, which does an
+ * indirect call via the fifofs ops table (externed above), which
+ * someone decided was preferable to exposing the function
+ * definitions. This includes (for now at least) the ones that are
+ * sent to genfs by that table. This should probably be changed, but
+ * not just yet.
+ */
+#define GENFS_FIFOOP_ENTRIES \
+	{ &vop_parsepath_desc, genfs_badop },		/* parsepath */	\
+	{ &vop_lookup_desc, vn_fifo_bypass },		/* lookup */	\
+	{ &vop_create_desc, vn_fifo_bypass },		/* create */	\
+	{ &vop_whiteout_desc, vn_fifo_bypass },		/* whiteout */	\
+	{ &vop_mknod_desc, vn_fifo_bypass },		/* mknod */	\
+	{ &vop_open_desc, vn_fifo_bypass },		/* open */	\
+	{ &vop_fallocate_desc, vn_fifo_bypass },	/* fallocate */	\
+	{ &vop_fdiscard_desc, vn_fifo_bypass },		/* fdiscard */	\
+	{ &vop_ioctl_desc, vn_fifo_bypass },		/* ioctl */	\
+	{ &vop_poll_desc, vn_fifo_bypass },		/* poll */	\
+	{ &vop_kqfilter_desc, vn_fifo_bypass },		/* kqfilter */	\
+	{ &vop_revoke_desc, vn_fifo_bypass },		/* revoke */	\
+	{ &vop_mmap_desc, vn_fifo_bypass },		/* mmap */	\
+	{ &vop_seek_desc, vn_fifo_bypass },		/* seek */	\
+	{ &vop_remove_desc, vn_fifo_bypass },		/* remove */	\
+	{ &vop_link_desc, vn_fifo_bypass },		/* link */	\
+	{ &vop_rename_desc, vn_fifo_bypass },		/* rename */	\
+	{ &vop_mkdir_desc, vn_fifo_bypass },		/* mkdir */	\
+	{ &vop_rmdir_desc, vn_fifo_bypass },		/* rmdir */	\
+	{ &vop_symlink_desc, vn_fifo_bypass },		/* symlink */	\
+	{ &vop_readdir_desc, vn_fifo_bypass },		/* readdir */	\
+	{ &vop_readlink_desc, vn_fifo_bypass },		/* readlink */	\
+	{ &vop_abortop_desc, vn_fifo_bypass },		/* abortop */	\
+	{ &vop_bmap_desc, vn_fifo_bypass },		/* bmap */	\
+	{ &vop_pathconf_desc, vn_fifo_bypass },		/* pathconf */	\
+	{ &vop_advlock_desc, vn_fifo_bypass },		/* advlock */	\
+	{ &vop_getpages_desc, genfs_badop },	 	/* getpages */	\
+	{ &vop_putpages_desc, vn_fifo_bypass }	 	/* putpages */

Index: src/sys/miscfs/kernfs/kernfs_vnops.c
diff -u src/sys/miscfs/kernfs/kernfs_vnops.c:1.170 src/sys/miscfs/kernfs/kernfs_vnops.c:1.171
--- src/sys/miscfs/kernfs/kernfs_vnops.c:1.170	Tue Jul  6 03:23:03 2021
+++ src/sys/miscfs/kernfs/kernfs_vnops.c	Sun Jul 18 23:56:13 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: kernfs_vnops.c,v 1.170 2021/07/06 03:23:03 dholland Exp $	*/
+/*	$NetBSD: kernfs_vnops.c,v 1.171 2021/07/18 23:56:13 dholland Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.170 2021/07/06 03:23:03 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.171 2021/07/18 23:56:13 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -233,11 +233,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 */
-	{ &vop_open_desc, spec_open },			/* open */
+	GENFS_SPECOP_ENTRIES,
 	{ &vop_close_desc, spec_close },		/* close */
 	{ &vop_access_desc, kernfs_access },		/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -245,37 +241,15 @@ const struct vnodeopv_entry_desc kernfs_
 	{ &vop_setattr_desc, kernfs_setattr },		/* setattr */
 	{ &vop_read_desc, spec_read },			/* read */
 	{ &vop_write_desc, spec_write },		/* write */
-	{ &vop_fallocate_desc, spec_fallocate },	/* fallocate */
-	{ &vop_fdiscard_desc, spec_fdiscard },		/* fdiscard */
 	{ &vop_fcntl_desc, spec_fcntl },		/* fcntl */
-	{ &vop_ioctl_desc, spec_ioctl },		/* ioctl */
-	{ &vop_poll_desc, spec_poll },			/* poll */
-	{ &vop_kqfilter_desc, genfs_kqfilter },		/* kqfilter */
-	{ &vop_revoke_desc, spec_revoke },		/* revoke */
 	{ &vop_fsync_desc, spec_fsync },		/* fsync */
-	{ &vop_seek_desc, spec_seek },			/* seek */
-	{ &vop_remove_desc, spec_remove },		/* remove */
-	{ &vop_link_desc, spec_link },			/* link */
-	{ &vop_rename_desc, spec_rename },		/* rename */
-	{ &vop_mkdir_desc, spec_mkdir },		/* mkdir */
-	{ &vop_rmdir_desc, spec_rmdir },		/* rmdir */
-	{ &vop_symlink_desc, spec_symlink },		/* symlink */
-	{ &vop_readdir_desc, spec_readdir },		/* readdir */
-	{ &vop_readlink_desc, spec_readlink },		/* readlink */
-	{ &vop_abortop_desc, spec_abortop },		/* abortop */
 	{ &vop_inactive_desc, kernfs_inactive },	/* inactive */
 	{ &vop_reclaim_desc, kernfs_reclaim },		/* reclaim */
 	{ &vop_lock_desc, kernfs_lock },		/* lock */
 	{ &vop_unlock_desc, kernfs_unlock },		/* unlock */
-	{ &vop_bmap_desc, spec_bmap },			/* bmap */
-	{ &vop_strategy_desc, spec_strategy },		/* strategy */
 	{ &vop_print_desc, kernfs_print },		/* print */
 	{ &vop_islocked_desc, kernfs_islocked },	/* islocked */
-	{ &vop_pathconf_desc, spec_pathconf },		/* pathconf */
-	{ &vop_advlock_desc, spec_advlock },		/* advlock */
 	{ &vop_bwrite_desc, spec_bwrite },		/* bwrite */
-	{ &vop_getpages_desc, spec_getpages },		/* getpages */
-	{ &vop_putpages_desc, spec_putpages },		/* putpages */
 	{ NULL, NULL }
 };
 const struct vnodeopv_desc kernfs_specop_opv_desc =

Index: src/sys/miscfs/specfs/specdev.h
diff -u src/sys/miscfs/specfs/specdev.h:1.44 src/sys/miscfs/specfs/specdev.h:1.45
--- src/sys/miscfs/specfs/specdev.h:1.44	Tue Jun 23 10:42:35 2015
+++ src/sys/miscfs/specfs/specdev.h	Sun Jul 18 23:56:14 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: specdev.h,v 1.44 2015/06/23 10:42:35 hannken Exp $	*/
+/*	$NetBSD: specdev.h,v 1.45 2021/07/18 23:56:14 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -152,6 +152,85 @@ int	spec_advlock(void *);
 #define	spec_getpages	genfs_getpages
 #define	spec_putpages	genfs_putpages
 
+/*
+ * This macro provides an initializer list for the fs-independent part
+ * of a filesystem's special file vnode ops descriptor table. We still
+ * need such a table in every filesystem, but we can at least avoid
+ * the cutpaste.
+ *
+ * This contains these ops:
+ *    parsepath lookup
+ *    create whiteout mknod open fallocate fdiscard ioctl poll kqfilter
+ *    revoke mmap seek remove link rename mkdir rmdir symlink readdir
+ *    readlink abortop bmap strategy pathconf advlock getpages putpages
+ *
+ * The filesystem should provide these ops that need to be its own:
+ *    access and accessx
+ *    getattr
+ *    setattr
+ *    fcntl
+ *    inactive
+ *    reclaim
+ *    lock
+ *    unlock
+ *    print (should probably also call spec_print)
+ *    islocked
+ *    bwrite (normally vn_bwrite)
+ *    openextattr
+ *    closeextattr
+ *    getextattr
+ *    setextattr
+ *    listextattr
+ *    deleteextattr
+ *    getacl
+ *    setacl
+ *    aclcheck
+ *
+ * The filesystem should also provide these ops that some filesystems
+ * do their own things with:
+ *    close
+ *    read
+ *    write
+ *    fsync
+ * In most cases "their own things" means adjust timestamps and call
+ * spec_foo. For fsync it varies, but should always also call spec_fsync.
+ *
+ * Note that because the op descriptor tables are unordered it does not
+ * matter where in the table this macro goes (except I think default 
+ * still needs to be first...)
+ */
+#define GENFS_SPECOP_ENTRIES \
+	{ &vop_parsepath_desc, genfs_badop },		/* parsepath */	\
+	{ &vop_lookup_desc, spec_lookup },		/* lookup */	\
+	{ &vop_create_desc, genfs_badop },		/* create */	\
+	{ &vop_whiteout_desc, genfs_badop },		/* whiteout */	\
+	{ &vop_mknod_desc, genfs_badop },		/* mknod */	\
+	{ &vop_open_desc, spec_open },			/* open */	\
+	{ &vop_fallocate_desc, genfs_eopnotsupp },	/* fallocate */	\
+	{ &vop_fdiscard_desc, spec_fdiscard },		/* fdiscard */	\
+	{ &vop_ioctl_desc, spec_ioctl },		/* ioctl */	\
+	{ &vop_poll_desc, spec_poll },			/* poll */	\
+	{ &vop_kqfilter_desc, spec_kqfilter },		/* kqfilter */	\
+	{ &vop_revoke_desc, genfs_revoke },		/* revoke */	\
+	{ &vop_mmap_desc, spec_mmap },			/* mmap */	\
+	{ &vop_seek_desc, spec_seek },			/* seek */	\
+	{ &vop_remove_desc, genfs_badop },		/* remove */	\
+	{ &vop_link_desc, genfs_badop },		/* link */	\
+	{ &vop_rename_desc, genfs_badop },		/* rename */	\
+	{ &vop_mkdir_desc, genfs_badop },		/* mkdir */	\
+	{ &vop_rmdir_desc, genfs_badop },		/* rmdir */	\
+	{ &vop_symlink_desc, genfs_badop },		/* symlink */	\
+	{ &vop_readdir_desc, genfs_badop },		/* readdir */	\
+	{ &vop_readlink_desc, genfs_badop },		/* readlink */	\
+	{ &vop_abortop_desc, genfs_badop },		/* abortop */	\
+	{ &vop_bmap_desc, spec_bmap },			/* bmap */	\
+	{ &vop_strategy_desc, spec_strategy },		/* strategy */	\
+	{ &vop_pathconf_desc, spec_pathconf },		/* pathconf */	\
+	{ &vop_advlock_desc, spec_advlock },		/* advlock */	\
+	{ &vop_getpages_desc, genfs_getpages },		/* getpages */	\
+	{ &vop_putpages_desc, genfs_putpages }		/* putpages */
+
+
 bool	iskmemvp(struct vnode *);
 void	spec_init(void);
 

Index: src/sys/nfs/nfs_vnops.c
diff -u src/sys/nfs/nfs_vnops.c:1.318 src/sys/nfs/nfs_vnops.c:1.319
--- src/sys/nfs/nfs_vnops.c:1.318	Tue Jun 29 22:34:09 2021
+++ src/sys/nfs/nfs_vnops.c	Sun Jul 18 23:56:14 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: nfs_vnops.c,v 1.318 2021/06/29 22:34:09 dholland Exp $	*/
+/*	$NetBSD: nfs_vnops.c,v 1.319 2021/07/18 23:56:14 dholland Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.318 2021/06/29 22:34:09 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.319 2021/07/18 23:56:14 dholland Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_nfs.h"
@@ -155,11 +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 */
-	{ &vop_open_desc, spec_open },			/* open */
+	GENFS_SPECOP_ENTRIES,
 	{ &vop_close_desc, nfsspec_close },		/* close */
 	{ &vop_access_desc, nfsspec_access },		/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -167,38 +163,15 @@ const struct vnodeopv_entry_desc spec_nf
 	{ &vop_setattr_desc, nfs_setattr },		/* setattr */
 	{ &vop_read_desc, nfsspec_read },		/* read */
 	{ &vop_write_desc, nfsspec_write },		/* write */
-	{ &vop_fallocate_desc, spec_fallocate },	/* fallocate */
-	{ &vop_fdiscard_desc, spec_fdiscard },		/* fdiscard */
 	{ &vop_fcntl_desc, genfs_fcntl },		/* fcntl */
-	{ &vop_ioctl_desc, spec_ioctl },		/* ioctl */
-	{ &vop_poll_desc, spec_poll },			/* poll */
-	{ &vop_kqfilter_desc, spec_kqfilter },		/* kqfilter */
-	{ &vop_revoke_desc, spec_revoke },		/* revoke */
-	{ &vop_mmap_desc, spec_mmap },			/* mmap */
 	{ &vop_fsync_desc, spec_fsync },		/* fsync */
-	{ &vop_seek_desc, spec_seek },			/* seek */
-	{ &vop_remove_desc, spec_remove },		/* remove */
-	{ &vop_link_desc, spec_link },			/* link */
-	{ &vop_rename_desc, spec_rename },		/* rename */
-	{ &vop_mkdir_desc, spec_mkdir },		/* mkdir */
-	{ &vop_rmdir_desc, spec_rmdir },		/* rmdir */
-	{ &vop_symlink_desc, spec_symlink },		/* symlink */
-	{ &vop_readdir_desc, spec_readdir },		/* readdir */
-	{ &vop_readlink_desc, spec_readlink },		/* readlink */
-	{ &vop_abortop_desc, spec_abortop },		/* abortop */
 	{ &vop_inactive_desc, nfs_inactive },		/* inactive */
 	{ &vop_reclaim_desc, nfs_reclaim },		/* reclaim */
 	{ &vop_lock_desc, nfs_lock },			/* lock */
 	{ &vop_unlock_desc, nfs_unlock },		/* unlock */
-	{ &vop_bmap_desc, spec_bmap },			/* bmap */
-	{ &vop_strategy_desc, spec_strategy },		/* strategy */
 	{ &vop_print_desc, nfs_print },			/* print */
 	{ &vop_islocked_desc, nfs_islocked },		/* islocked */
-	{ &vop_pathconf_desc, spec_pathconf },		/* pathconf */
-	{ &vop_advlock_desc, spec_advlock },		/* advlock */
 	{ &vop_bwrite_desc, spec_bwrite },		/* bwrite */
-	{ &vop_getpages_desc, spec_getpages },		/* getpages */
-	{ &vop_putpages_desc, spec_putpages },		/* putpages */
 	{ NULL, NULL }
 };
 const struct vnodeopv_desc spec_nfsv2nodeop_opv_desc =
@@ -207,11 +180,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 */
-	{ &vop_open_desc, vn_fifo_bypass },		/* open */
+	GENFS_FIFOOP_ENTRIES,
 	{ &vop_close_desc, nfsfifo_close },		/* close */
 	{ &vop_access_desc, nfsspec_access },		/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -219,37 +188,16 @@ const struct vnodeopv_entry_desc fifo_nf
 	{ &vop_setattr_desc, nfs_setattr },		/* setattr */
 	{ &vop_read_desc, nfsfifo_read },		/* read */
 	{ &vop_write_desc, nfsfifo_write },		/* write */
-	{ &vop_fallocate_desc, vn_fifo_bypass },	/* fallocate */
-	{ &vop_fdiscard_desc, vn_fifo_bypass },		/* fdiscard */
 	{ &vop_fcntl_desc, genfs_fcntl },		/* fcntl */
-	{ &vop_ioctl_desc, vn_fifo_bypass },		/* ioctl */
-	{ &vop_poll_desc, vn_fifo_bypass },		/* poll */
-	{ &vop_kqfilter_desc, vn_fifo_bypass },		/* kqfilter */
-	{ &vop_revoke_desc, vn_fifo_bypass },		/* revoke */
-	{ &vop_mmap_desc, vn_fifo_bypass },		/* mmap */
 	{ &vop_fsync_desc, nfs_fsync },			/* fsync */
-	{ &vop_seek_desc, vn_fifo_bypass },		/* seek */
-	{ &vop_remove_desc, vn_fifo_bypass },		/* remove */
-	{ &vop_link_desc, vn_fifo_bypass },		/* link */
-	{ &vop_rename_desc, vn_fifo_bypass },		/* rename */
-	{ &vop_mkdir_desc, vn_fifo_bypass },		/* mkdir */
-	{ &vop_rmdir_desc, vn_fifo_bypass },		/* rmdir */
-	{ &vop_symlink_desc, vn_fifo_bypass },		/* symlink */
-	{ &vop_readdir_desc, vn_fifo_bypass },		/* readdir */
-	{ &vop_readlink_desc, vn_fifo_bypass },		/* readlink */
-	{ &vop_abortop_desc, vn_fifo_bypass },		/* abortop */
 	{ &vop_inactive_desc, nfs_inactive },		/* inactive */
 	{ &vop_reclaim_desc, nfs_reclaim },		/* reclaim */
 	{ &vop_lock_desc, nfs_lock },			/* lock */
 	{ &vop_unlock_desc, nfs_unlock },		/* unlock */
-	{ &vop_bmap_desc, vn_fifo_bypass },		/* bmap */
-	{ &vop_strategy_desc, genfs_badop },		/* strategy */
+	{ &vop_strategy_desc, vn_fifo_bypass },		/* strategy */
 	{ &vop_print_desc, nfs_print },			/* print */
 	{ &vop_islocked_desc, nfs_islocked },		/* islocked */
-	{ &vop_pathconf_desc, vn_fifo_bypass },		/* pathconf */
-	{ &vop_advlock_desc, vn_fifo_bypass },		/* advlock */
 	{ &vop_bwrite_desc, genfs_badop },		/* bwrite */
-	{ &vop_putpages_desc, vn_fifo_bypass }, 	/* putpages */
 	{ NULL, NULL }
 };
 const struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc =

Index: src/sys/rump/librump/rumpvfs/rumpfs.c
diff -u src/sys/rump/librump/rumpvfs/rumpfs.c:1.164 src/sys/rump/librump/rumpvfs/rumpfs.c:1.165
--- src/sys/rump/librump/rumpvfs/rumpfs.c:1.164	Tue Jun 29 22:38:10 2021
+++ src/sys/rump/librump/rumpvfs/rumpfs.c	Sun Jul 18 23:56:14 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpfs.c,v 1.164 2021/06/29 22:38:10 dholland Exp $	*/
+/*	$NetBSD: rumpfs.c,v 1.165 2021/07/18 23:56:14 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.164 2021/06/29 22:38:10 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.165 2021/07/18 23:56:14 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -1728,6 +1728,7 @@ rump_vop_spec(void *v)
 
 	switch (ap->a_desc->vdesc_offset) {
 	case VOP_ACCESS_DESCOFFSET:
+	case VOP_ACCESSX_DESCOFFSET:
 	case VOP_GETATTR_DESCOFFSET:
 	case VOP_SETATTR_DESCOFFSET:
 	case VOP_LOCK_DESCOFFSET:

Index: src/sys/ufs/chfs/chfs_vnops.c
diff -u src/sys/ufs/chfs/chfs_vnops.c:1.44 src/sys/ufs/chfs/chfs_vnops.c:1.45
--- src/sys/ufs/chfs/chfs_vnops.c:1.44	Mon Jul  5 21:43:56 2021
+++ src/sys/ufs/chfs/chfs_vnops.c	Sun Jul 18 23:56:14 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: chfs_vnops.c,v 1.44 2021/07/05 21:43:56 dholland Exp $	*/
+/*	$NetBSD: chfs_vnops.c,v 1.45 2021/07/18 23:56:14 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2010 Department of Software Engineering,
@@ -1658,11 +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 },
-		{ &vop_open_desc, spec_open },
+		GENFS_SPECOP_ENTRIES,
 		{ &vop_close_desc, ufsspec_close },
 		{ &vop_access_desc, chfs_access },
 		{ &vop_accessx_desc, genfs_accessx },
@@ -1670,38 +1666,15 @@ const struct vnodeopv_entry_desc chfs_sp
 		{ &vop_setattr_desc, chfs_setattr },
 		{ &vop_read_desc, chfs_read },
 		{ &vop_write_desc, chfs_write },
-		{ &vop_fallocate_desc, spec_fallocate },
-		{ &vop_fdiscard_desc, spec_fdiscard },
-		{ &vop_ioctl_desc, spec_ioctl },
 		{ &vop_fcntl_desc, genfs_fcntl },
-		{ &vop_poll_desc, spec_poll },
-		{ &vop_kqfilter_desc, spec_kqfilter },
-		{ &vop_revoke_desc, spec_revoke },
-		{ &vop_mmap_desc, spec_mmap },
 		{ &vop_fsync_desc, spec_fsync },
-		{ &vop_seek_desc, spec_seek },
-		{ &vop_remove_desc, spec_remove },
-		{ &vop_link_desc, spec_link },
-		{ &vop_rename_desc, spec_rename },
-		{ &vop_mkdir_desc, spec_mkdir },
-		{ &vop_rmdir_desc, spec_rmdir },
-		{ &vop_symlink_desc, spec_symlink },
-		{ &vop_readdir_desc, spec_readdir },
-		{ &vop_readlink_desc, spec_readlink },
-		{ &vop_abortop_desc, spec_abortop },
 		{ &vop_inactive_desc, chfs_inactive },
 		{ &vop_reclaim_desc, chfs_reclaim },
 		{ &vop_lock_desc, genfs_lock },
 		{ &vop_unlock_desc, genfs_unlock },
-		{ &vop_bmap_desc, spec_bmap },
-		{ &vop_strategy_desc, spec_strategy },
 		{ &vop_print_desc, ufs_print },
-		{ &vop_pathconf_desc, spec_pathconf },
 		{ &vop_islocked_desc, genfs_islocked },
-		{ &vop_advlock_desc, spec_advlock },
 		{ &vop_bwrite_desc, vn_bwrite },
-		{ &vop_getpages_desc, spec_getpages },
-		{ &vop_putpages_desc, spec_putpages },
 		{ NULL, NULL } };
 
 const struct vnodeopv_desc chfs_specop_opv_desc =
@@ -1716,11 +1689,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 },
-		{ &vop_open_desc, vn_fifo_bypass },
+		GENFS_FIFOOP_ENTRIES,
 		{ &vop_close_desc, ufsfifo_close },
 		{ &vop_access_desc, chfs_access },
 		{ &vop_accessx_desc, genfs_accessx },
@@ -1728,38 +1697,16 @@ const struct vnodeopv_entry_desc chfs_fi
 		{ &vop_setattr_desc, chfs_setattr },
 		{ &vop_read_desc, ufsfifo_read },
 		{ &vop_write_desc, ufsfifo_write },
-		{ &vop_fallocate_desc, vn_fifo_bypass },
-		{ &vop_fdiscard_desc, vn_fifo_bypass },
-		{ &vop_ioctl_desc, vn_fifo_bypass },
 		{ &vop_fcntl_desc, genfs_fcntl },
-		{ &vop_poll_desc, vn_fifo_bypass },
-		{ &vop_kqfilter_desc, vn_fifo_bypass },
-		{ &vop_revoke_desc, vn_fifo_bypass },
-		{ &vop_mmap_desc, vn_fifo_bypass },
 		{ &vop_fsync_desc, vn_fifo_bypass },
-		{ &vop_seek_desc, vn_fifo_bypass },
-		{ &vop_remove_desc, vn_fifo_bypass },
-		{ &vop_link_desc, vn_fifo_bypass },
-		{ &vop_rename_desc, vn_fifo_bypass },
-		{ &vop_mkdir_desc, vn_fifo_bypass },
-		{ &vop_rmdir_desc, vn_fifo_bypass },
-		{ &vop_symlink_desc, vn_fifo_bypass },
-		{ &vop_readdir_desc, vn_fifo_bypass },
-		{ &vop_readlink_desc, vn_fifo_bypass },
-		{ &vop_abortop_desc, vn_fifo_bypass },
 		{ &vop_inactive_desc, chfs_inactive },
 		{ &vop_reclaim_desc, chfs_reclaim },
 		{ &vop_lock_desc, genfs_lock },
 		{ &vop_unlock_desc, genfs_unlock },
-		{ &vop_bmap_desc, vn_fifo_bypass },
 		{ &vop_strategy_desc, vn_fifo_bypass },
 		{ &vop_print_desc, ufs_print },
-		{ &vop_pathconf_desc, vn_fifo_bypass },
 		{ &vop_islocked_desc, genfs_islocked },
-		{ &vop_advlock_desc, vn_fifo_bypass },
 		{ &vop_bwrite_desc, genfs_nullop },
-		{ &vop_getpages_desc, genfs_badop },
-		{ &vop_putpages_desc, vn_fifo_bypass },
 		{ NULL, NULL } };
 
 const struct vnodeopv_desc chfs_fifoop_opv_desc =

Index: src/sys/ufs/ext2fs/ext2fs_vnops.c
diff -u src/sys/ufs/ext2fs/ext2fs_vnops.c:1.133 src/sys/ufs/ext2fs/ext2fs_vnops.c:1.134
--- src/sys/ufs/ext2fs/ext2fs_vnops.c:1.133	Tue Jun 29 22:34:09 2021
+++ src/sys/ufs/ext2fs/ext2fs_vnops.c	Sun Jul 18 23:56:14 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: ext2fs_vnops.c,v 1.133 2021/06/29 22:34:09 dholland Exp $	*/
+/*	$NetBSD: ext2fs_vnops.c,v 1.134 2021/07/18 23:56:14 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.133 2021/06/29 22:34:09 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.134 2021/07/18 23:56:14 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1150,11 +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 */
-	{ &vop_open_desc, spec_open },			/* open */
+	GENFS_SPECOP_ENTRIES,
 	{ &vop_close_desc, ufsspec_close },		/* close */
 	{ &vop_access_desc, ext2fs_access },		/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -1162,38 +1158,15 @@ const struct vnodeopv_entry_desc ext2fs_
 	{ &vop_setattr_desc, ext2fs_setattr },		/* setattr */
 	{ &vop_read_desc, ufsspec_read },		/* read */
 	{ &vop_write_desc, ufsspec_write },		/* write */
-	{ &vop_fallocate_desc, spec_fallocate },	/* fallocate */
-	{ &vop_fdiscard_desc, spec_fdiscard },		/* fdiscard */
-	{ &vop_ioctl_desc, spec_ioctl },		/* ioctl */
 	{ &vop_fcntl_desc, ufs_fcntl },			/* fcntl */
-	{ &vop_poll_desc, spec_poll },			/* poll */
-	{ &vop_kqfilter_desc, spec_kqfilter },		/* kqfilter */
-	{ &vop_revoke_desc, spec_revoke },		/* revoke */
-	{ &vop_mmap_desc, spec_mmap },			/* mmap */
 	{ &vop_fsync_desc, ext2fs_fsync },		/* fsync */
-	{ &vop_seek_desc, spec_seek },			/* seek */
-	{ &vop_remove_desc, spec_remove },		/* remove */
-	{ &vop_link_desc, spec_link },			/* link */
-	{ &vop_rename_desc, spec_rename },		/* rename */
-	{ &vop_mkdir_desc, spec_mkdir },		/* mkdir */
-	{ &vop_rmdir_desc, spec_rmdir },		/* rmdir */
-	{ &vop_symlink_desc, spec_symlink },		/* symlink */
-	{ &vop_readdir_desc, spec_readdir },		/* readdir */
-	{ &vop_readlink_desc, spec_readlink },		/* readlink */
-	{ &vop_abortop_desc, spec_abortop },		/* abortop */
 	{ &vop_inactive_desc, ext2fs_inactive },	/* inactive */
 	{ &vop_reclaim_desc, ext2fs_reclaim },		/* reclaim */
 	{ &vop_lock_desc, ufs_lock },			/* lock */
 	{ &vop_unlock_desc, ufs_unlock },		/* unlock */
-	{ &vop_bmap_desc, spec_bmap },			/* bmap */
-	{ &vop_strategy_desc, spec_strategy },		/* strategy */
 	{ &vop_print_desc, ufs_print },			/* print */
 	{ &vop_islocked_desc, ufs_islocked },		/* islocked */
-	{ &vop_pathconf_desc, spec_pathconf },		/* pathconf */
-	{ &vop_advlock_desc, spec_advlock },		/* advlock */
 	{ &vop_bwrite_desc, vn_bwrite },		/* bwrite */
-	{ &vop_getpages_desc, spec_getpages },		/* getpages */
-	{ &vop_putpages_desc, spec_putpages },		/* putpages */
 	{ &vop_getextattr_desc, ext2fs_getextattr },	/* getextattr */
 	{ &vop_setextattr_desc, ext2fs_setextattr },	/* setextattr */
 	{ &vop_listextattr_desc, ext2fs_listextattr },	/* listextattr */
@@ -1206,11 +1179,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 */
-	{ &vop_open_desc, vn_fifo_bypass },		/* open */
+	GENFS_FIFOOP_ENTRIES,
 	{ &vop_close_desc, ufsfifo_close },		/* close */
 	{ &vop_access_desc, ext2fs_access },		/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -1218,37 +1187,16 @@ const struct vnodeopv_entry_desc ext2fs_
 	{ &vop_setattr_desc, ext2fs_setattr },		/* setattr */
 	{ &vop_read_desc, ufsfifo_read },		/* read */
 	{ &vop_write_desc, ufsfifo_write },		/* write */
-	{ &vop_fallocate_desc, vn_fifo_bypass },	/* fallocate */
-	{ &vop_fdiscard_desc, vn_fifo_bypass },		/* fdiscard */
-	{ &vop_ioctl_desc, vn_fifo_bypass },		/* ioctl */
 	{ &vop_fcntl_desc, ufs_fcntl },			/* fcntl */
-	{ &vop_poll_desc, vn_fifo_bypass },		/* poll */
-	{ &vop_kqfilter_desc, vn_fifo_bypass },		/* kqfilter */
-	{ &vop_revoke_desc, vn_fifo_bypass },		/* revoke */
-	{ &vop_mmap_desc, vn_fifo_bypass },		/* mmap */
 	{ &vop_fsync_desc, ext2fs_fsync },		/* fsync */
-	{ &vop_seek_desc, vn_fifo_bypass },		/* seek */
-	{ &vop_remove_desc, vn_fifo_bypass },		/* remove */
-	{ &vop_link_desc, vn_fifo_bypass },		/* link */
-	{ &vop_rename_desc, vn_fifo_bypass },		/* rename */
-	{ &vop_mkdir_desc, vn_fifo_bypass },		/* mkdir */
-	{ &vop_rmdir_desc, vn_fifo_bypass },		/* rmdir */
-	{ &vop_symlink_desc, vn_fifo_bypass },		/* symlink */
-	{ &vop_readdir_desc, vn_fifo_bypass },		/* readdir */
-	{ &vop_readlink_desc, vn_fifo_bypass },		/* readlink */
-	{ &vop_abortop_desc, vn_fifo_bypass },		/* abortop */
 	{ &vop_inactive_desc, ext2fs_inactive },	/* inactive */
 	{ &vop_reclaim_desc, ext2fs_reclaim },		/* reclaim */
 	{ &vop_lock_desc, ufs_lock },			/* lock */
 	{ &vop_unlock_desc, ufs_unlock },		/* unlock */
-	{ &vop_bmap_desc, vn_fifo_bypass },		/* bmap */
 	{ &vop_strategy_desc, vn_fifo_bypass },		/* strategy */
 	{ &vop_print_desc, ufs_print },			/* print */
 	{ &vop_islocked_desc, ufs_islocked },		/* islocked */
-	{ &vop_pathconf_desc, vn_fifo_bypass },		/* pathconf */
-	{ &vop_advlock_desc, vn_fifo_bypass },		/* advlock */
 	{ &vop_bwrite_desc, vn_bwrite },		/* bwrite */
-	{ &vop_putpages_desc, vn_fifo_bypass },		/* putpages */
 	{ &vop_getextattr_desc, ext2fs_getextattr },	/* getextattr */
 	{ &vop_setextattr_desc, ext2fs_setextattr },	/* setextattr */
 	{ &vop_listextattr_desc, ext2fs_listextattr },	/* listextattr */

Index: src/sys/ufs/ffs/ffs_vnops.c
diff -u src/sys/ufs/ffs/ffs_vnops.c:1.135 src/sys/ufs/ffs/ffs_vnops.c:1.136
--- src/sys/ufs/ffs/ffs_vnops.c:1.135	Wed Jul 14 07:24:14 2021
+++ src/sys/ufs/ffs/ffs_vnops.c	Sun Jul 18 23:56:14 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs_vnops.c,v 1.135 2021/07/14 07:24:14 christos Exp $	*/
+/*	$NetBSD: ffs_vnops.c,v 1.136 2021/07/18 23:56:14 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.135 2021/07/14 07:24:14 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_vnops.c,v 1.136 2021/07/18 23:56:14 dholland Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ffs.h"
@@ -164,11 +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 */
-	{ &vop_open_desc, spec_open },			/* open */
+	GENFS_SPECOP_ENTRIES,
 	{ &vop_close_desc, ufsspec_close },		/* close */
 	{ &vop_access_desc, genfs_access },		/* access */
 	{ &vop_accessx_desc, ufs_accessx },		/* accessx */
@@ -176,38 +172,15 @@ const struct vnodeopv_entry_desc ffs_spe
 	{ &vop_setattr_desc, ufs_setattr },		/* setattr */
 	{ &vop_read_desc, ufsspec_read },		/* read */
 	{ &vop_write_desc, ufsspec_write },		/* write */
-	{ &vop_fallocate_desc, spec_fallocate },	/* fallocate */
-	{ &vop_fdiscard_desc, spec_fdiscard },		/* fdiscard */
-	{ &vop_ioctl_desc, spec_ioctl },		/* ioctl */
 	{ &vop_fcntl_desc, ufs_fcntl },			/* fcntl */
-	{ &vop_poll_desc, spec_poll },			/* poll */
-	{ &vop_kqfilter_desc, spec_kqfilter },		/* kqfilter */
-	{ &vop_revoke_desc, spec_revoke },		/* revoke */
-	{ &vop_mmap_desc, spec_mmap },			/* mmap */
 	{ &vop_fsync_desc, ffs_spec_fsync },		/* fsync */
-	{ &vop_seek_desc, spec_seek },			/* seek */
-	{ &vop_remove_desc, spec_remove },		/* remove */
-	{ &vop_link_desc, spec_link },			/* link */
-	{ &vop_rename_desc, spec_rename },		/* rename */
-	{ &vop_mkdir_desc, spec_mkdir },		/* mkdir */
-	{ &vop_rmdir_desc, spec_rmdir },		/* rmdir */
-	{ &vop_symlink_desc, spec_symlink },		/* symlink */
-	{ &vop_readdir_desc, spec_readdir },		/* readdir */
-	{ &vop_readlink_desc, spec_readlink },		/* readlink */
-	{ &vop_abortop_desc, spec_abortop },		/* abortop */
 	{ &vop_inactive_desc, ufs_inactive },		/* inactive */
 	{ &vop_reclaim_desc, ffs_reclaim },		/* reclaim */
 	{ &vop_lock_desc, ufs_lock },			/* lock */
 	{ &vop_unlock_desc, ufs_unlock },		/* unlock */
-	{ &vop_bmap_desc, spec_bmap },			/* bmap */
-	{ &vop_strategy_desc, spec_strategy },		/* strategy */
 	{ &vop_print_desc, ufs_print },			/* print */
 	{ &vop_islocked_desc, ufs_islocked },		/* islocked */
-	{ &vop_pathconf_desc, spec_pathconf },		/* pathconf */
-	{ &vop_advlock_desc, spec_advlock },		/* advlock */
 	{ &vop_bwrite_desc, vn_bwrite },		/* bwrite */
-	{ &vop_getpages_desc, spec_getpages },		/* getpages */
-	{ &vop_putpages_desc, spec_putpages },		/* putpages */
 	{ &vop_openextattr_desc, ffs_openextattr },	/* openextattr */
 	{ &vop_closeextattr_desc, ffs_closeextattr },	/* closeextattr */
 	{ &vop_getextattr_desc, ffs_getextattr },	/* getextattr */
@@ -225,11 +198,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 */
-	{ &vop_open_desc, vn_fifo_bypass },		/* open */
+	GENFS_FIFOOP_ENTRIES,
 	{ &vop_close_desc, ufsfifo_close },		/* close */
 	{ &vop_access_desc, genfs_access },		/* access */
 	{ &vop_accessx_desc, ufs_accessx },		/* accessx */
@@ -237,37 +206,16 @@ const struct vnodeopv_entry_desc ffs_fif
 	{ &vop_setattr_desc, ufs_setattr },		/* setattr */
 	{ &vop_read_desc, ufsfifo_read },		/* read */
 	{ &vop_write_desc, ufsfifo_write },		/* write */
-	{ &vop_fallocate_desc, vn_fifo_bypass },	/* fallocate */
-	{ &vop_fdiscard_desc, vn_fifo_bypass },		/* fdiscard */
-	{ &vop_ioctl_desc, vn_fifo_bypass },		/* ioctl */
 	{ &vop_fcntl_desc, ufs_fcntl },			/* fcntl */
-	{ &vop_poll_desc, vn_fifo_bypass },		/* poll */
-	{ &vop_kqfilter_desc, vn_fifo_bypass },		/* kqfilter */
-	{ &vop_revoke_desc, vn_fifo_bypass },		/* revoke */
-	{ &vop_mmap_desc, vn_fifo_bypass },		/* mmap */
 	{ &vop_fsync_desc, ffs_fsync },			/* fsync */
-	{ &vop_seek_desc, vn_fifo_bypass },		/* seek */
-	{ &vop_remove_desc, vn_fifo_bypass },		/* remove */
-	{ &vop_link_desc, vn_fifo_bypass },		/* link */
-	{ &vop_rename_desc, vn_fifo_bypass },		/* rename */
-	{ &vop_mkdir_desc, vn_fifo_bypass },		/* mkdir */
-	{ &vop_rmdir_desc, vn_fifo_bypass },		/* rmdir */
-	{ &vop_symlink_desc, vn_fifo_bypass },		/* symlink */
-	{ &vop_readdir_desc, vn_fifo_bypass },		/* readdir */
-	{ &vop_readlink_desc, vn_fifo_bypass },		/* readlink */
-	{ &vop_abortop_desc, vn_fifo_bypass },		/* abortop */
 	{ &vop_inactive_desc, ufs_inactive },		/* inactive */
 	{ &vop_reclaim_desc, ffs_reclaim },		/* reclaim */
 	{ &vop_lock_desc, ufs_lock },			/* lock */
 	{ &vop_unlock_desc, ufs_unlock },		/* unlock */
-	{ &vop_bmap_desc, vn_fifo_bypass },		/* bmap */
 	{ &vop_strategy_desc, ffsext_strategy },	/* strategy */
 	{ &vop_print_desc, ufs_print },			/* print */
 	{ &vop_islocked_desc, ufs_islocked },		/* islocked */
-	{ &vop_pathconf_desc, vn_fifo_bypass },		/* pathconf */
-	{ &vop_advlock_desc, vn_fifo_bypass },		/* advlock */
 	{ &vop_bwrite_desc, vn_bwrite },		/* bwrite */
-	{ &vop_putpages_desc, vn_fifo_bypass }, 	/* putpages */
 	{ &vop_openextattr_desc, ffs_openextattr },	/* openextattr */
 	{ &vop_closeextattr_desc, ffs_closeextattr },	/* closeextattr */
 	{ &vop_getextattr_desc, ffs_getextattr },	/* getextattr */

Index: src/sys/ufs/lfs/lfs_vnops.c
diff -u src/sys/ufs/lfs/lfs_vnops.c:1.337 src/sys/ufs/lfs/lfs_vnops.c:1.338
--- src/sys/ufs/lfs/lfs_vnops.c:1.337	Tue Jun 29 22:34:09 2021
+++ src/sys/ufs/lfs/lfs_vnops.c	Sun Jul 18 23:56:14 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_vnops.c,v 1.337 2021/06/29 22:34:09 dholland Exp $	*/
+/*	$NetBSD: lfs_vnops.c,v 1.338 2021/07/18 23:56:14 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.337 2021/06/29 22:34:09 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.338 2021/07/18 23:56:14 dholland Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -241,11 +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 */
-	{ &vop_open_desc, spec_open },			/* open */
+	GENFS_SPECOP_ENTRIES,
 	{ &vop_close_desc, lfsspec_close },		/* close */
 	{ &vop_access_desc, ulfs_access },		/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -253,38 +249,15 @@ const struct vnodeopv_entry_desc lfs_spe
 	{ &vop_setattr_desc, lfs_setattr },		/* setattr */
 	{ &vop_read_desc, ulfsspec_read },		/* read */
 	{ &vop_write_desc, ulfsspec_write },		/* write */
-	{ &vop_fallocate_desc, spec_fallocate },	/* fallocate */
-	{ &vop_fdiscard_desc, spec_fdiscard },		/* fdiscard */
-	{ &vop_ioctl_desc, spec_ioctl },		/* ioctl */
 	{ &vop_fcntl_desc, ulfs_fcntl },		/* fcntl */
-	{ &vop_poll_desc, spec_poll },			/* poll */
-	{ &vop_kqfilter_desc, spec_kqfilter },		/* kqfilter */
-	{ &vop_revoke_desc, spec_revoke },		/* revoke */
-	{ &vop_mmap_desc, spec_mmap },			/* mmap */
 	{ &vop_fsync_desc, spec_fsync },		/* fsync */
-	{ &vop_seek_desc, spec_seek },			/* seek */
-	{ &vop_remove_desc, spec_remove },		/* remove */
-	{ &vop_link_desc, spec_link },			/* link */
-	{ &vop_rename_desc, spec_rename },		/* rename */
-	{ &vop_mkdir_desc, spec_mkdir },		/* mkdir */
-	{ &vop_rmdir_desc, spec_rmdir },		/* rmdir */
-	{ &vop_symlink_desc, spec_symlink },		/* symlink */
-	{ &vop_readdir_desc, spec_readdir },		/* readdir */
-	{ &vop_readlink_desc, spec_readlink },		/* readlink */
-	{ &vop_abortop_desc, spec_abortop },		/* abortop */
 	{ &vop_inactive_desc, lfs_inactive },		/* inactive */
 	{ &vop_reclaim_desc, lfs_reclaim },		/* reclaim */
 	{ &vop_lock_desc, ulfs_lock },			/* lock */
 	{ &vop_unlock_desc, ulfs_unlock },		/* unlock */
-	{ &vop_bmap_desc, spec_bmap },			/* bmap */
-	{ &vop_strategy_desc, spec_strategy },		/* strategy */
 	{ &vop_print_desc, ulfs_print },		/* print */
 	{ &vop_islocked_desc, ulfs_islocked },		/* islocked */
-	{ &vop_pathconf_desc, spec_pathconf },		/* pathconf */
-	{ &vop_advlock_desc, spec_advlock },		/* advlock */
 	{ &vop_bwrite_desc, vn_bwrite },		/* bwrite */
-	{ &vop_getpages_desc, spec_getpages },		/* getpages */
-	{ &vop_putpages_desc, spec_putpages },		/* putpages */
 	{ &vop_openextattr_desc, lfs_openextattr },	/* openextattr */
 	{ &vop_closeextattr_desc, lfs_closeextattr },	/* closeextattr */
 	{ &vop_getextattr_desc, lfs_getextattr },	/* getextattr */
@@ -299,11 +272,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 */
-	{ &vop_open_desc, vn_fifo_bypass },		/* open */
+	GENFS_FIFOOP_ENTRIES,
 	{ &vop_close_desc, lfsfifo_close },		/* close */
 	{ &vop_access_desc, ulfs_access },		/* access */
 	{ &vop_accessx_desc, genfs_accessx },		/* accessx */
@@ -311,37 +280,16 @@ const struct vnodeopv_entry_desc lfs_fif
 	{ &vop_setattr_desc, lfs_setattr },		/* setattr */
 	{ &vop_read_desc, ulfsfifo_read },		/* read */
 	{ &vop_write_desc, ulfsfifo_write },		/* write */
-	{ &vop_fallocate_desc, vn_fifo_bypass },	/* fallocate */
-	{ &vop_fdiscard_desc, vn_fifo_bypass },		/* fdiscard */
-	{ &vop_ioctl_desc, vn_fifo_bypass },		/* ioctl */
 	{ &vop_fcntl_desc, ulfs_fcntl },		/* fcntl */
-	{ &vop_poll_desc, vn_fifo_bypass },		/* poll */
-	{ &vop_kqfilter_desc, vn_fifo_bypass },		/* kqfilter */
-	{ &vop_revoke_desc, vn_fifo_bypass },		/* revoke */
-	{ &vop_mmap_desc, vn_fifo_bypass },		/* mmap */
 	{ &vop_fsync_desc, vn_fifo_bypass },		/* fsync */
-	{ &vop_seek_desc, vn_fifo_bypass },		/* seek */
-	{ &vop_remove_desc, vn_fifo_bypass },		/* remove */
-	{ &vop_link_desc, vn_fifo_bypass },		/* link */
-	{ &vop_rename_desc, vn_fifo_bypass },		/* rename */
-	{ &vop_mkdir_desc, vn_fifo_bypass },		/* mkdir */
-	{ &vop_rmdir_desc, vn_fifo_bypass },		/* rmdir */
-	{ &vop_symlink_desc, vn_fifo_bypass },		/* symlink */
-	{ &vop_readdir_desc, vn_fifo_bypass },		/* readdir */
-	{ &vop_readlink_desc, vn_fifo_bypass },		/* readlink */
-	{ &vop_abortop_desc, vn_fifo_bypass },		/* abortop */
 	{ &vop_inactive_desc, lfs_inactive },		/* inactive */
 	{ &vop_reclaim_desc, lfs_reclaim },		/* reclaim */
 	{ &vop_lock_desc, ulfs_lock },			/* lock */
 	{ &vop_unlock_desc, ulfs_unlock },		/* unlock */
-	{ &vop_bmap_desc, vn_fifo_bypass },		/* bmap */
 	{ &vop_strategy_desc, vn_fifo_bypass },		/* strategy */
 	{ &vop_print_desc, ulfs_print },		/* print */
 	{ &vop_islocked_desc, ulfs_islocked },		/* islocked */
-	{ &vop_pathconf_desc, vn_fifo_bypass },		/* pathconf */
-	{ &vop_advlock_desc, vn_fifo_bypass },		/* advlock */
 	{ &vop_bwrite_desc, lfs_bwrite },		/* bwrite */
-	{ &vop_putpages_desc, vn_fifo_bypass },		/* putpages */
 	{ &vop_openextattr_desc, lfs_openextattr },	/* openextattr */
 	{ &vop_closeextattr_desc, lfs_closeextattr },	/* closeextattr */
 	{ &vop_getextattr_desc, lfs_getextattr },	/* getextattr */

Reply via email to