// SPDX-License-Identifier: CDDL-1.0 /* * This file and its contents are supplied under the terms of the * Common Development and Distribution License ("CDDL"), version 1.0. * You may only use this file in accordance with the terms of version * 1.0 of the CDDL. * * A full copy of the text of the CDDL should have accompanied this * source. A copy of the CDDL is also available via the Internet at * https://opensource.org/license/CDDL-1.0. */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011, 2019 by Delphix. All rights reserved. * Copyright 2015 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. * Copyright 2013 Saso Kiselkov. All rights reserved. * Copyright (c) 2017 Datto Inc. * Copyright (c) 2017, Intel Corporation. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "zfs_prop.h" int param_set_deadman_failmode(const char *val, zfs_kernel_param_t *kp) { int error; error = -param_set_deadman_failmode_common(val); if (error == 0) error = param_set_charp(val, kp); return (error); } int param_set_deadman_ziotime(const char *val, zfs_kernel_param_t *kp) { int error; error = spl_param_set_u64(val, kp); if (error < 0) return (SET_ERROR(error)); spa_set_deadman_ziotime(MSEC2NSEC(zfs_deadman_ziotime_ms)); return (0); } int param_set_deadman_synctime(const char *val, zfs_kernel_param_t *kp) { int error; error = spl_param_set_u64(val, kp); if (error < 0) return (SET_ERROR(error)); spa_set_deadman_synctime(MSEC2NSEC(zfs_deadman_synctime_ms)); return (0); } int param_set_slop_shift(const char *buf, zfs_kernel_param_t *kp) { unsigned long val; int error; error = kstrtoul(buf, 0, &val); if (error) return (SET_ERROR(error)); if (val < 1 || val > 31) return (SET_ERROR(-EINVAL)); error = param_set_int(buf, kp); if (error < 0) return (SET_ERROR(error)); return (0); } int param_set_active_allocator(const char *val, zfs_kernel_param_t *kp) { int error; error = -param_set_active_allocator_common(val); if (error == 0) error = param_set_charp(val, kp); return (error); } const char * spa_history_zone(void) { return ("linux"); } static int spa_restore_zoned_uid_cb(const char *dsname, void *arg) { (void) arg; uint64_t zoned_uid = 0; if (dsl_prop_get(dsname, "zoned_uid", 8, 1, &zoned_uid, NULL) != 0) return (0); if (zoned_uid != 0) { int err = zone_dataset_attach_uid(kcred, dsname, (uid_t)zoned_uid); if (err != 0 && err != EEXIST) { cmn_err(CE_WARN, "failed to restore zoned_uid for " "'%s' (uid %llu): %d", dsname, (unsigned long long)zoned_uid, err); } } return (0); } void spa_import_os(spa_t *spa) { (void) dmu_objset_find(spa_name(spa), spa_restore_zoned_uid_cb, NULL, DS_FIND_CHILDREN); } static int spa_cleanup_zoned_uid_cb(const char *dsname, void *arg) { (void) arg; uint64_t zoned_uid = 0; if (dsl_prop_get(dsname, "zoned_uid", 8, 1, &zoned_uid, NULL) != 0) return (0); if (zoned_uid != 0) { int err = zone_dataset_detach_uid(kcred, dsname, (uid_t)zoned_uid); if (err != 0 && err != ENOENT) { cmn_err(CE_WARN, "failed to detach zoned_uid for " "'%s' (uid %llu): %d", dsname, (unsigned long long)zoned_uid, err); } } return (0); } void spa_export_os(spa_t *spa) { (void) dmu_objset_find(spa_name(spa), spa_cleanup_zoned_uid_cb, NULL, DS_FIND_CHILDREN); } void spa_activate_os(spa_t *spa) { (void) spa; } void spa_deactivate_os(spa_t *spa) { (void) spa; }