Make the vfs.zfs.vdev.raidz_impl sysctl cross-platform

Reviewed-by: Allan Jude <allan@klarasystems.com>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by:	Alan Somers <asomers@gmail.com>
Sponsored by:	ConnectWise
Closes #16980
This commit is contained in:
Alan Somers
2025-01-29 07:18:09 -07:00
committed by Ameer Hamza
parent 42bad93414
commit 6e9911212e
8 changed files with 84 additions and 15 deletions
+21
View File
@@ -679,6 +679,27 @@ param_set_deadman_failmode(SYSCTL_HANDLER_ARGS)
return (-param_set_deadman_failmode_common(buf));
}
int
param_set_raidz_impl(SYSCTL_HANDLER_ARGS)
{
const size_t bufsize = 128;
char *buf;
int rc;
buf = malloc(bufsize, M_SOLARIS, M_WAITOK | M_ZERO);
if (req->newptr == NULL)
vdev_raidz_impl_get(buf, bufsize);
rc = sysctl_handle_string(oidp, buf, bufsize, req);
if (rc || req->newptr == NULL) {
free(buf, M_SOLARIS);
return (rc);
}
rc = vdev_raidz_impl_set(buf);
free(buf, M_SOLARIS);
return (rc);
}
int
param_set_slop_shift(SYSCTL_HANDLER_ARGS)
{
+42
View File
@@ -0,0 +1,42 @@
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or https://opensource.org/licenses/CDDL-1.0.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/* Copyright (C) 2025 ConnectWise */
#include <sys/zfs_context.h>
#include <sys/spa.h>
#include <sys/zio.h>
#include <sys/vdev_impl.h>
#include <sys/vdev_raidz.h>
int
param_get_raidz_impl(char *buf, zfs_kernel_param_t *kp)
{
return (vdev_raidz_impl_get(buf, PAGE_SIZE));
}
int
param_set_raidz_impl(const char *val, zfs_kernel_param_t *kp)
{
int error;
error = vdev_raidz_impl_set(val);
return (error);
}