FreeBSD: Fix format of vfs.zfs.arc_no_grow_shift

vfs.zfs.arc_no_grow_shift has an invalid type (15) and this causes
py-sysctl to format it as a bytearray when it should be an integer.

"U" is not a valid format, it should be "I" and the type should match
the variable type, int.  We can return EINVAL if the value is set below
zero.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
Closes #11318
This commit is contained in:
Ryan Moeller 2020-12-08 17:21:36 +00:00 committed by Brian Behlendorf
parent 513c196200
commit 8c5606ca0b
1 changed files with 5 additions and 6 deletions

View File

@ -229,15 +229,14 @@ SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, l2c_only_size, CTLFLAG_RD,
static int static int
sysctl_vfs_zfs_arc_no_grow_shift(SYSCTL_HANDLER_ARGS) sysctl_vfs_zfs_arc_no_grow_shift(SYSCTL_HANDLER_ARGS)
{ {
uint32_t val; int err, val;
int err;
val = arc_no_grow_shift; val = arc_no_grow_shift;
err = sysctl_handle_32(oidp, &val, 0, req); err = sysctl_handle_int(oidp, &val, 0, req);
if (err != 0 || req->newptr == NULL) if (err != 0 || req->newptr == NULL)
return (err); return (err);
if (val >= arc_shrink_shift) if (val < 0 || val >= arc_shrink_shift)
return (EINVAL); return (EINVAL);
arc_no_grow_shift = val; arc_no_grow_shift = val;
@ -245,8 +244,8 @@ sysctl_vfs_zfs_arc_no_grow_shift(SYSCTL_HANDLER_ARGS)
} }
SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_no_grow_shift, SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_no_grow_shift,
CTLTYPE_U32 | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, 0, sizeof (uint32_t), CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, NULL, sizeof (int),
sysctl_vfs_zfs_arc_no_grow_shift, "U", sysctl_vfs_zfs_arc_no_grow_shift, "I",
"log2(fraction of ARC which must be free to allow growing)"); "log2(fraction of ARC which must be free to allow growing)");
int int