diff options
author | 2010-09-06 23:44:10 +0000 | |
---|---|---|
committer | 2010-09-06 23:44:10 +0000 | |
commit | 57593ff0414b90ebf400de19b45bbeaee8108cfb (patch) | |
tree | 13b193c37171e2c724599f8763f09db45d6275b8 /sys/miscfs/procfs | |
parent | All PWR_{SUSPEND,RESUME} can now be replaced by DVACT_{SUSPEND,RESUME} (diff) | |
download | wireguard-openbsd-57593ff0414b90ebf400de19b45bbeaee8108cfb.tar.xz wireguard-openbsd-57593ff0414b90ebf400de19b45bbeaee8108cfb.zip |
End the VOP experiment. Instead of the ridicolusly complicated operation
vector setup that has questionable features (that have, as far as I can
tell never been used in practice, atleast not in OpenBSD), remove all
the gunk and favor a simple struct full of function pointers that get
set directly by each of the filesystems.
Removes gobs of ugly code and makes things simpler by a magnitude.
The only downside of this is that we loose the vnoperate feature so
the spec/fifo operations of the filesystems need to be kept in sync
with specfs and fifofs, this is no big deal as the API it self is pretty
static.
Many thanks to armani@ who pulled an earlier version of this diff to
current after c2k10 and Gabriel Kihlman on tech@ for testing.
Liked by many. "come on, find your balls" deraadt@.
Diffstat (limited to 'sys/miscfs/procfs')
-rw-r--r-- | sys/miscfs/procfs/procfs.h | 4 | ||||
-rw-r--r-- | sys/miscfs/procfs/procfs_subr.c | 4 | ||||
-rw-r--r-- | sys/miscfs/procfs/procfs_vnops.c | 74 |
3 files changed, 39 insertions, 43 deletions
diff --git a/sys/miscfs/procfs/procfs.h b/sys/miscfs/procfs/procfs.h index 361fe46d574..cfb4a18ecc0 100644 --- a/sys/miscfs/procfs/procfs.h +++ b/sys/miscfs/procfs/procfs.h @@ -1,4 +1,4 @@ -/* $OpenBSD: procfs.h,v 1.24 2007/06/22 09:38:53 jasper Exp $ */ +/* $OpenBSD: procfs.h,v 1.25 2010/09/06 23:44:10 thib Exp $ */ /* $NetBSD: procfs.h,v 1.17 1996/02/12 15:01:41 christos Exp $ */ /* @@ -135,7 +135,7 @@ int procfs_rw(void *); #define PROCFS_LOCKED 0x01 #define PROCFS_WANT 0x02 -extern int (**procfs_vnodeop_p)(void *); +extern struct vops procfs_vops; extern const struct vfsops procfs_vfsops; struct vfsconf; diff --git a/sys/miscfs/procfs/procfs_subr.c b/sys/miscfs/procfs/procfs_subr.c index 9bbe103393b..e57ed21d404 100644 --- a/sys/miscfs/procfs/procfs_subr.c +++ b/sys/miscfs/procfs/procfs_subr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: procfs_subr.c,v 1.31 2009/08/10 14:55:11 oga Exp $ */ +/* $OpenBSD: procfs_subr.c,v 1.32 2010/09/06 23:44:10 thib Exp $ */ /* $NetBSD: procfs_subr.c,v 1.15 1996/02/12 15:01:42 christos Exp $ */ /* @@ -111,7 +111,7 @@ loop: } } - if ((error = getnewvnode(VT_PROCFS, mp, procfs_vnodeop_p, vpp)) != 0) + if ((error = getnewvnode(VT_PROCFS, mp, &procfs_vops, vpp)) != 0) goto out; vp = *vpp; diff --git a/sys/miscfs/procfs/procfs_vnops.c b/sys/miscfs/procfs/procfs_vnops.c index e9056953ec7..848f0e85214 100644 --- a/sys/miscfs/procfs/procfs_vnops.c +++ b/sys/miscfs/procfs/procfs_vnops.c @@ -1,4 +1,4 @@ -/* $OpenBSD: procfs_vnops.c,v 1.47 2009/08/13 15:00:14 jasper Exp $ */ +/* $OpenBSD: procfs_vnops.c,v 1.48 2010/09/06 23:44:10 thib Exp $ */ /* $NetBSD: procfs_vnops.c,v 1.40 1996/03/16 23:52:55 christos Exp $ */ /* @@ -138,45 +138,41 @@ static pid_t atopid(const char *, u_int); /* * procfs vnode operations. */ -int (**procfs_vnodeop_p)(void *); -struct vnodeopv_entry_desc procfs_vnodeop_entries[] = { - { &vop_default_desc, eopnotsupp }, - { &vop_lookup_desc, procfs_lookup }, - { &vop_create_desc, procfs_badop }, - { &vop_mknod_desc, procfs_badop }, - { &vop_open_desc, procfs_open }, - { &vop_close_desc, procfs_close }, - { &vop_access_desc, procfs_access }, - { &vop_getattr_desc, procfs_getattr }, - { &vop_setattr_desc, procfs_setattr }, - { &vop_read_desc, procfs_rw }, - { &vop_write_desc, procfs_rw }, - { &vop_ioctl_desc, procfs_ioctl }, - { &vop_poll_desc, procfs_poll }, - { &vop_fsync_desc, procfs_badop}, - { &vop_remove_desc, procfs_badop }, - { &vop_link_desc, procfs_link }, - { &vop_rename_desc, procfs_badop }, - { &vop_mkdir_desc, procfs_badop }, - { &vop_rmdir_desc, procfs_badop }, - { &vop_symlink_desc, procfs_symlink }, - { &vop_readdir_desc, procfs_readdir }, - { &vop_readlink_desc, procfs_readlink }, - { &vop_abortop_desc, vop_generic_abortop }, - { &vop_inactive_desc, procfs_inactive }, - { &vop_reclaim_desc, procfs_reclaim }, - { &vop_lock_desc, nullop }, - { &vop_unlock_desc, nullop }, - { &vop_bmap_desc, vop_generic_bmap }, - { &vop_strategy_desc, procfs_badop }, - { &vop_print_desc, procfs_print }, - { &vop_islocked_desc, nullop }, - { &vop_pathconf_desc, procfs_pathconf }, - { &vop_advlock_desc, procfs_badop }, - { NULL, NULL } +struct vops procfs_vops = { + .vop_default = eopnotsupp, + .vop_lookup = procfs_lookup, + .vop_create = procfs_badop, + .vop_mknod = procfs_badop, + .vop_open = procfs_open, + .vop_close = procfs_close, + .vop_access = procfs_access, + .vop_getattr = procfs_getattr, + .vop_setattr = procfs_setattr, + .vop_read = procfs_rw, + .vop_write = procfs_rw, + .vop_ioctl = procfs_ioctl, + .vop_poll = procfs_poll, + .vop_fsync = procfs_badop, + .vop_remove = procfs_badop, + .vop_link = procfs_link, + .vop_rename = procfs_badop, + .vop_mkdir = procfs_badop, + .vop_rmdir = procfs_badop, + .vop_symlink = procfs_symlink, + .vop_readdir = procfs_readdir, + .vop_readlink = procfs_readlink, + .vop_abortop = vop_generic_abortop, + .vop_inactive = procfs_inactive, + .vop_reclaim = procfs_reclaim, + .vop_lock = nullop, + .vop_unlock = nullop, + .vop_bmap = vop_generic_bmap, + .vop_strategy = procfs_badop, + .vop_print = procfs_print, + .vop_islocked = nullop, + .vop_pathconf = procfs_pathconf, + .vop_advlock = procfs_badop, }; -struct vnodeopv_desc procfs_vnodeop_opv_desc = - { &procfs_vnodeop_p, procfs_vnodeop_entries }; /* * set things up for doing i/o on * the pfsnode (vp). (vp) is locked |