diff options
author | 2020-11-07 05:24:20 +0000 | |
---|---|---|
committer | 2020-11-07 05:24:20 +0000 | |
commit | 52cb70995fd3ef97ea3686880e7dff68af519216 (patch) | |
tree | 6251b202b9fead2eab53802816446854fda92b95 | |
parent | change from rwlock(9) to mutex(9) for linux rwlocks (diff) | |
download | wireguard-openbsd-52cb70995fd3ef97ea3686880e7dff68af519216.tar.xz wireguard-openbsd-52cb70995fd3ef97ea3686880e7dff68af519216.zip |
Convert ffs_sysctl to sysctl_bounded_args
Requires sysctl_bounded_arr branch to support sysctl_rdint.
The read-only variables are marked by an empty range of [1, 0].
OK millert@
-rw-r--r-- | sys/kern/kern_sysctl.c | 12 | ||||
-rw-r--r-- | sys/sys/sysctl.h | 4 | ||||
-rw-r--r-- | sys/ufs/ffs/ffs_vfsops.c | 90 |
3 files changed, 42 insertions, 64 deletions
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index ccf0e5ffa05..78d5b309787 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sysctl.c,v 1.380 2020/10/19 08:19:46 mpi Exp $ */ +/* $OpenBSD: kern_sysctl.c,v 1.381 2020/11/07 05:24:20 gnezdo Exp $ */ /* $NetBSD: kern_sysctl.c,v 1.17 1996/05/20 17:49:05 mrg Exp $ */ /*- @@ -938,8 +938,14 @@ sysctl_bounded_arr(const struct sysctl_bounded_args *valpp, u_int valplen, return (ENOTDIR); for (i = 0; i < valplen; ++i) { if (valpp[i].mib == name[0]) { - return (sysctl_int_bounded(oldp, oldlenp, newp, newlen, - valpp[i].var, valpp[i].minimum, valpp[i].maximum)); + if (valpp[i].minimum <= valpp[i].maximum) { + return (sysctl_int_bounded(oldp, oldlenp, newp, + newlen, valpp[i].var, valpp[i].minimum, + valpp[i].maximum)); + } else { + return (sysctl_rdint(oldp, oldlenp, newp, + *valpp[i].var)); + } } } return (EOPNOTSUPP); diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h index 5e5115d4f4e..b7693973185 100644 --- a/sys/sys/sysctl.h +++ b/sys/sys/sysctl.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sysctl.h,v 1.211 2020/09/01 01:53:50 gnezdo Exp $ */ +/* $OpenBSD: sysctl.h,v 1.212 2020/11/07 05:24:20 gnezdo Exp $ */ /* $NetBSD: sysctl.h,v 1.16 1996/04/09 20:55:36 cgd Exp $ */ /* @@ -984,7 +984,7 @@ struct sysctl_bounded_args { int mib; /* identifier shared with userspace as a CTL_ #define */ int *var; /* never NULL */ int minimum; /* checking is disabled if minimum == maximum */ - int maximum; + int maximum; /* read-only variable if minimum > maximum */ }; /* diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c index 5bfec8dc339..bd488ef4773 100644 --- a/sys/ufs/ffs/ffs_vfsops.c +++ b/sys/ufs/ffs/ffs_vfsops.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ffs_vfsops.c,v 1.187 2020/08/10 06:25:02 jsg Exp $ */ +/* $OpenBSD: ffs_vfsops.c,v 1.188 2020/11/07 05:24:20 gnezdo Exp $ */ /* $NetBSD: ffs_vfsops.c,v 1.19 1996/02/09 22:22:26 christos Exp $ */ /* @@ -1568,69 +1568,41 @@ ffs_init(struct vfsconf *vfsp) return (ufs_init(vfsp)); } -/* - * fast filesystem related variables. - */ -int -ffs_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp, - size_t newlen, struct proc *p) -{ #ifdef FFS_SOFTUPDATES - extern int max_softdeps, tickdelay, stat_worklist_push; - extern int stat_blk_limit_push, stat_ino_limit_push, stat_blk_limit_hit; - extern int stat_ino_limit_hit, stat_sync_limit_hit, stat_indir_blk_ptrs; - extern int stat_inode_bitmap, stat_direct_blk_ptrs, stat_dir_entry; +extern int max_softdeps, tickdelay, stat_worklist_push; +extern int stat_blk_limit_push, stat_ino_limit_push, stat_blk_limit_hit; +extern int stat_ino_limit_hit, stat_sync_limit_hit, stat_indir_blk_ptrs; +extern int stat_inode_bitmap, stat_direct_blk_ptrs, stat_dir_entry; #endif - - /* all sysctl names at this level are terminal */ - if (namelen != 1) - return (ENOTDIR); /* overloaded */ - - switch (name[0]) { - case FFS_CLUSTERREAD: - case FFS_CLUSTERWRITE: - case FFS_REALLOCBLKS: - case FFS_ASYNCFREE: - return (EOPNOTSUPP); +const struct sysctl_bounded_args ffs_vars[] = { #ifdef FFS_SOFTUPDATES - case FFS_MAX_SOFTDEPS: - return (sysctl_int(oldp, oldlenp, newp, newlen, &max_softdeps)); - case FFS_SD_TICKDELAY: - return (sysctl_int(oldp, oldlenp, newp, newlen, &tickdelay)); - case FFS_SD_WORKLIST_PUSH: - return (sysctl_rdint(oldp, oldlenp, newp, stat_worklist_push)); - case FFS_SD_BLK_LIMIT_PUSH: - return (sysctl_rdint(oldp, oldlenp, newp, stat_blk_limit_push)); - case FFS_SD_INO_LIMIT_PUSH: - return (sysctl_rdint(oldp, oldlenp, newp, stat_ino_limit_push)); - case FFS_SD_BLK_LIMIT_HIT: - return (sysctl_rdint(oldp, oldlenp, newp, stat_blk_limit_hit)); - case FFS_SD_INO_LIMIT_HIT: - return (sysctl_rdint(oldp, oldlenp, newp, stat_ino_limit_hit)); - case FFS_SD_SYNC_LIMIT_HIT: - return (sysctl_rdint(oldp, oldlenp, newp, stat_sync_limit_hit)); - case FFS_SD_INDIR_BLK_PTRS: - return (sysctl_rdint(oldp, oldlenp, newp, stat_indir_blk_ptrs)); - case FFS_SD_INODE_BITMAP: - return (sysctl_rdint(oldp, oldlenp, newp, stat_inode_bitmap)); - case FFS_SD_DIRECT_BLK_PTRS: - return (sysctl_rdint(oldp, oldlenp, newp, stat_direct_blk_ptrs)); - case FFS_SD_DIR_ENTRY: - return (sysctl_rdint(oldp, oldlenp, newp, stat_dir_entry)); + { FFS_MAX_SOFTDEPS, &max_softdeps, 0, INT_MAX }, + { FFS_SD_TICKDELAY, &tickdelay, 2, INT_MAX }, + { FFS_SD_WORKLIST_PUSH, &stat_worklist_push, 1, 0 }, /* read-only */ + { FFS_SD_BLK_LIMIT_PUSH, &stat_blk_limit_push, 1, 0 }, + { FFS_SD_INO_LIMIT_PUSH, &stat_ino_limit_push, 1, 0 }, + { FFS_SD_BLK_LIMIT_HIT, &stat_blk_limit_hit, 1, 0 }, + { FFS_SD_INO_LIMIT_HIT, &stat_ino_limit_hit, 1, 0 }, + { FFS_SD_SYNC_LIMIT_HIT, &stat_sync_limit_hit, 1, 0 }, + { FFS_SD_INDIR_BLK_PTRS, &stat_indir_blk_ptrs, 1, 0 }, + { FFS_SD_INODE_BITMAP, &stat_inode_bitmap, 1, 0 }, + { FFS_SD_DIRECT_BLK_PTRS, &stat_direct_blk_ptrs, 1, 0 }, + { FFS_SD_DIR_ENTRY, &stat_dir_entry, 1, 0 }, #endif #ifdef UFS_DIRHASH - case FFS_DIRHASH_DIRSIZE: - return (sysctl_int(oldp, oldlenp, newp, newlen, - &ufs_mindirhashsize)); - case FFS_DIRHASH_MAXMEM: - return (sysctl_int(oldp, oldlenp, newp, newlen, - &ufs_dirhashmaxmem)); - case FFS_DIRHASH_MEM: - return (sysctl_rdint(oldp, oldlenp, newp, ufs_dirhashmem)); + { FFS_DIRHASH_DIRSIZE, &ufs_mindirhashsize, 0, INT_MAX }, + { FFS_DIRHASH_MAXMEM, &ufs_dirhashmaxmem, 0, INT_MAX }, + { FFS_DIRHASH_MEM, &ufs_dirhashmem, 1, 0 }, #endif +}; - default: - return (EOPNOTSUPP); - } - /* NOTREACHED */ +/* + * fast filesystem related variables. + */ +int +ffs_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp, + size_t newlen, struct proc *p) +{ + return sysctl_bounded_arr(ffs_vars, nitems(ffs_vars), name, + namelen, oldp, oldlenp, newp, newlen); } |