Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/ufs/lfs Use macros for the canned parts of device and fi...



details:   https://anonhg.NetBSD.org/src/rev/4e66f26707dd
branches:  trunk
changeset: 1022438:4e66f26707dd
user:      dholland <dholland%NetBSD.org@localhost>
date:      Sun Jul 18 23:56:12 2021 +0000

description:
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.

diffstat:

 external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c |  48 +---------
 sys/fs/cd9660/cd9660_vnops.c                           |  60 +-----------
 sys/fs/efs/efs_vnops.c                                 |  73 +--------------
 sys/fs/hfs/hfs_vnops.c                                 |  84 +++--------------
 sys/fs/puffs/puffs_vnops.c                             |  60 +-----------
 sys/fs/tmpfs/tmpfs_fifoops.c                           |  32 +------
 sys/fs/tmpfs/tmpfs_specops.c                           |  33 +------
 sys/fs/v7fs/v7fs_extern.c                              |  60 +-----------
 sys/miscfs/fifofs/fifo.h                               |  87 +++++++++++++++++-
 sys/miscfs/kernfs/kernfs_vnops.c                       |  32 +------
 sys/miscfs/specfs/specdev.h                            |  81 ++++++++++++++++-
 sys/nfs/nfs_vnops.c                                    |  62 +-----------
 sys/rump/librump/rumpvfs/rumpfs.c                      |   5 +-
 sys/ufs/chfs/chfs_vnops.c                              |  59 +-----------
 sys/ufs/ext2fs/ext2fs_vnops.c                          |  60 +-----------
 sys/ufs/ffs/ffs_vnops.c                                |  60 +-----------
 sys/ufs/lfs/lfs_vnops.c                                |  60 +-----------
 17 files changed, 235 insertions(+), 721 deletions(-)

diffs (truncated from 1759 to 300 lines):

diff -r 63273b9ca90a -r 4e66f26707dd external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
--- a/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c    Sun Jul 18 19:58:34 2021 +0000
+++ b/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c    Sun Jul 18 23:56:12 2021 +0000
@@ -6394,10 +6394,7 @@
 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 @@
        { &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 @@
 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 @@
        { &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 }
diff -r 63273b9ca90a -r 4e66f26707dd sys/fs/cd9660/cd9660_vnops.c
--- a/sys/fs/cd9660/cd9660_vnops.c      Sun Jul 18 19:58:34 2021 +0000
+++ b/sys/fs/cd9660/cd9660_vnops.c      Sun Jul 18 23:56:12 2021 +0000
@@ -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 @@
 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 @@
        { &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 @@
 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 @@
        { &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 =
diff -r 63273b9ca90a -r 4e66f26707dd sys/fs/efs/efs_vnops.c
--- a/sys/fs/efs/efs_vnops.c    Sun Jul 18 19:58:34 2021 +0000
+++ b/sys/fs/efs/efs_vnops.c    Sun Jul 18 23:56:12 2021 +0000
@@ -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 <rumble%ephemeral.org@localhost>
@@ -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 @@
 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 @@
        { &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 @@
 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 */



Home | Main Index | Thread Index | Old Index