zfs: merge openzfs/zfs@17b2ae0b2 (master) into main
Notable upstream pull request merges:
#12766 Fix error propagation from lzc_send_redacted
#12805 Updated the lz4 decompressor
#12851 FreeBSD: Provide correct file generation number
#12857 Verify dRAID empty sectors
#12874 FreeBSD: Update argument types for VOP_READDIR
#12896 Reduce number of arc_prune threads
#12934 FreeBSD: Fix zvol_*_open() locking
#12947 lz4: Cherrypick fix for CVE-2021-3520
#12961 FreeBSD: Fix leaked strings in libspl mnttab
#12964 Fix handling of errors from dmu_write_uio_dbuf() on FreeBSD
#12981 Introduce a flag to skip comparing the local mac when raw sending
#12985 Avoid memory allocations in the ARC eviction thread
Obtained from: OpenZFS
OpenZFS commit: 17b2ae0b24
This commit is contained in:
commit
e92ffd9b62
@ -15,7 +15,6 @@ ASM_SOURCES_AS = \
|
||||
asm-x86_64/modes/gcm_pclmulqdq.S \
|
||||
asm-x86_64/modes/aesni-gcm-x86_64.S \
|
||||
asm-x86_64/modes/ghash-x86_64.S \
|
||||
asm-x86_64/sha1/sha1-x86_64.S \
|
||||
asm-x86_64/sha2/sha256_impl.S \
|
||||
asm-x86_64/sha2/sha512_impl.S
|
||||
|
||||
@ -47,19 +46,15 @@ KERNEL_C = \
|
||||
algs/modes/ctr.c \
|
||||
algs/modes/ccm.c \
|
||||
algs/modes/ecb.c \
|
||||
algs/sha1/sha1.c \
|
||||
algs/sha2/sha2.c \
|
||||
algs/skein/skein.c \
|
||||
algs/skein/skein_block.c \
|
||||
algs/skein/skein_iv.c \
|
||||
illumos-crypto.c \
|
||||
io/aes.c \
|
||||
io/edonr_mod.c \
|
||||
io/sha1_mod.c \
|
||||
io/sha2_mod.c \
|
||||
io/skein_mod.c \
|
||||
os/modhash.c \
|
||||
os/modconf.c \
|
||||
core/kcf_sched.c \
|
||||
core/kcf_prov_lib.c \
|
||||
core/kcf_callprov.c \
|
||||
@ -94,7 +89,6 @@ CFLAGS.aes_aesni.S+= -DLOCORE
|
||||
CFLAGS.gcm_pclmulqdq.S+= -DLOCORE
|
||||
CFLAGS.aesni-gcm-x86_64.S+= -DLOCORE
|
||||
CFLAGS.ghash-x86_64.S+= -DLOCORE
|
||||
CFLAGS.sha1-x86_64.S+= -DLOCORE
|
||||
CFLAGS.sha256_impl.S+= -DLOCORE
|
||||
CFLAGS.sha512_impl.S+= -DLOCORE
|
||||
|
||||
|
@ -14,7 +14,6 @@ ASM_SOURCES_AS = \
|
||||
asm-x86_64/aes/aes_aesni.S \
|
||||
asm-x86_64/modes/gcm_pclmulqdq.S \
|
||||
asm-x86_64/modes/aesni-gcm-x86_64.S \
|
||||
asm-x86_64/sha1/sha1-x86_64.S \
|
||||
asm-x86_64/sha2/sha256_impl.S \
|
||||
asm-x86_64/sha2/sha512_impl.S
|
||||
|
||||
@ -46,17 +45,13 @@ KERNEL_C = \
|
||||
algs/modes/ctr.c \
|
||||
algs/modes/ccm.c \
|
||||
algs/modes/ecb.c \
|
||||
algs/sha1/sha1.c \
|
||||
algs/sha2/sha2.c \
|
||||
algs/skein/skein_block.c \
|
||||
illumos-crypto.c \
|
||||
io/aes.c \
|
||||
io/edonr_mod.c \
|
||||
io/sha1_mod.c \
|
||||
io/sha2_mod.c \
|
||||
io/skein_mod.c \
|
||||
os/modhash.c \
|
||||
os/modconf.c \
|
||||
core/kcf_sched.c \
|
||||
core/kcf_prov_lib.c \
|
||||
core/kcf_callprov.c \
|
||||
@ -64,11 +59,6 @@ KERNEL_C = \
|
||||
core/kcf_prov_tabs.c \
|
||||
$(ASM_SOURCES_C)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
SRCS= $(ASM_SOURCES_AS) $(KERNEL_C)
|
||||
|
||||
WARNS?= 2
|
||||
@ -91,7 +81,6 @@ CFLAGS.aes_aesni.S+= -DLOCORE
|
||||
CFLAGS.gcm_pclmulqdq.S+= -DLOCORE
|
||||
CFLAGS.aesni-gcm-x86_64.S+= -DLOCORE
|
||||
CFLAGS.ghash-x86_64.S+= -DLOCORE
|
||||
CFLAGS.sha1-x86_64.S+= -DLOCORE
|
||||
CFLAGS.sha256_impl.S+= -DLOCORE
|
||||
CFLAGS.sha512_impl.S+= -DLOCORE
|
||||
CFLAGS.gcm.c+= -UCAN_USE_GCM_ASM
|
||||
|
@ -29,5 +29,8 @@ CFLAGS+= -include ${SRCTOP}/sys/contrib/openzfs/include/os/freebsd/spl/sys/ccomp
|
||||
CFLAGS+= -DHAVE_ISSETUGID
|
||||
CFLAGS+= -include ${SRCTOP}/sys/modules/zfs/zfs_config.h
|
||||
CFLAGS+= -I${SRCTOP}/sys/contrib/openzfs/include/os/freebsd/zfs
|
||||
CFLAGS.lzbe_device.c= -Wno-cast-qual
|
||||
CFLAGS.lzbe_util.c= -Wno-cast-qual
|
||||
CFLAGS.lzbe_pair.c= -Wno-cast-qual
|
||||
|
||||
.include <bsd.lib.mk>
|
||||
|
@ -95,6 +95,7 @@ KERNEL_C = \
|
||||
gzip.c \
|
||||
lzjb.c \
|
||||
lz4.c \
|
||||
lz4_zfs.c \
|
||||
metaslab.c \
|
||||
mmp.c \
|
||||
multilist.c \
|
||||
|
@ -63,7 +63,10 @@ CFLAGS+= -I${SRCTOP}/sys
|
||||
CFLAGS+= -I${SRCTOP}/cddl/compat/opensolaris/include
|
||||
CFLAGS+= -include ${SRCTOP}/sys/contrib/openzfs/include/os/freebsd/spl/sys/ccompile.h
|
||||
CFLAGS+= -DHAVE_ISSETUGID
|
||||
|
||||
CFLAGS.be.c= -Wno-cast-qual
|
||||
CFLAGS.be_access.c= -Wno-cast-qual
|
||||
CFLAGS.be_error.c= -Wno-cast-qual
|
||||
CFLAGS.be_info.c= -Wno-cast-qual
|
||||
|
||||
HAS_TESTS= YES
|
||||
SUBDIR.${MK_TESTS}+= tests
|
||||
|
@ -15,7 +15,7 @@ jobs:
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install --yes -qq build-essential autoconf libtool gawk alien fakeroot linux-headers-$(uname -r)
|
||||
sudo apt-get install --yes -qq zlib1g-dev uuid-dev libattr1-dev libblkid-dev libselinux-dev libudev-dev libssl-dev python-dev python-setuptools python-cffi python3 python3-dev python3-setuptools python3-cffi
|
||||
sudo apt-get install --yes -qq zlib1g-dev uuid-dev libattr1-dev libblkid-dev libselinux-dev libudev-dev libssl-dev python3 python3-dev python3-setuptools python3-cffi
|
||||
# packages for tests
|
||||
sudo apt-get install --yes -qq parted lsscsi ksh attr acl nfs-kernel-server fio
|
||||
sudo apt-get install --yes -qq mandoc cppcheck pax-utils devscripts
|
||||
|
@ -25,9 +25,8 @@ jobs:
|
||||
zlib1g-dev uuid-dev libblkid-dev libselinux-dev \
|
||||
xfslibs-dev libattr1-dev libacl1-dev libudev-dev libdevmapper-dev \
|
||||
libssl-dev libffi-dev libaio-dev libelf-dev libmount-dev \
|
||||
libpam0g-dev pamtester python-dev python-setuptools python-cffi \
|
||||
python-packaging python3 python3-dev python3-setuptools python3-cffi \
|
||||
libcurl4-openssl-dev python3-packaging
|
||||
libpam0g-dev pamtester libcurl4-openssl-dev \
|
||||
python3 python3-dev python3-setuptools python3-cffi python3-packaging
|
||||
- name: Autogen.sh
|
||||
run: |
|
||||
sh autogen.sh
|
||||
|
@ -21,9 +21,8 @@ jobs:
|
||||
zlib1g-dev uuid-dev libblkid-dev libselinux-dev \
|
||||
xfslibs-dev libattr1-dev libacl1-dev libudev-dev libdevmapper-dev \
|
||||
libssl-dev libffi-dev libaio-dev libelf-dev libmount-dev \
|
||||
libpam0g-dev pamtester python-dev python-setuptools python-cffi \
|
||||
python-packaging python3 python3-dev python3-setuptools python3-cffi \
|
||||
python3-packaging libcurl4-openssl-dev
|
||||
libpam0g-dev pamtester libcurl4-openssl-dev \
|
||||
python3 python3-dev python3-setuptools python3-cffi python3-packaging
|
||||
- name: Autogen.sh
|
||||
run: |
|
||||
sh autogen.sh
|
||||
|
@ -22,7 +22,6 @@ jobs:
|
||||
xfslibs-dev libattr1-dev libacl1-dev libudev-dev libdevmapper-dev \
|
||||
libssl-dev libffi-dev libaio-dev libelf-dev libmount-dev \
|
||||
libpam0g-dev \
|
||||
python-dev python-setuptools python-cffi python-packaging \
|
||||
python3 python3-dev python3-setuptools python3-cffi python3-packaging
|
||||
- name: Autogen.sh
|
||||
run: |
|
||||
|
@ -114,6 +114,11 @@ commitcheck:
|
||||
${top_srcdir}/scripts/commitcheck.sh; \
|
||||
fi
|
||||
|
||||
if HAVE_PARALLEL
|
||||
cstyle_line = -print0 | parallel -X0 ${top_srcdir}/scripts/cstyle.pl -cpP {}
|
||||
else
|
||||
cstyle_line = -exec ${top_srcdir}/scripts/cstyle.pl -cpP {} +
|
||||
endif
|
||||
PHONY += cstyle
|
||||
cstyle:
|
||||
@find ${top_srcdir} -name build -prune \
|
||||
@ -121,7 +126,8 @@ cstyle:
|
||||
! -name 'zfs_config.*' ! -name '*.mod.c' \
|
||||
! -name 'opt_global.h' ! -name '*_if*.h' \
|
||||
! -path './module/zstd/lib/*' \
|
||||
-exec ${top_srcdir}/scripts/cstyle.pl -cpP {} \+
|
||||
! -path './module/zfs/lz4.c' \
|
||||
$(cstyle_line)
|
||||
|
||||
filter_executable = -exec test -x '{}' \; -print
|
||||
|
||||
|
@ -12,7 +12,7 @@ This repository contains the code for running OpenZFS on Linux and FreeBSD.
|
||||
* [Documentation](https://openzfs.github.io/openzfs-docs/) - for using and developing this repo
|
||||
* [ZoL Site](https://zfsonlinux.org) - Linux release info & links
|
||||
* [Mailing lists](https://openzfs.github.io/openzfs-docs/Project%20and%20Community/Mailing%20Lists.html)
|
||||
* [OpenZFS site](http://open-zfs.org/) - for conference videos and info on other platforms (illumos, OSX, Windows, etc)
|
||||
* [OpenZFS site](https://openzfs.org/) - for conference videos and info on other platforms (illumos, OSX, Windows, etc)
|
||||
|
||||
# Installation
|
||||
|
||||
|
@ -7,8 +7,9 @@ SUBDIRS += zpool_influxdb
|
||||
CPPCHECKDIRS = zfs zpool zdb zhack zinject zstream ztest
|
||||
CPPCHECKDIRS += raidz_test zfs_ids_to_path zpool_influxdb
|
||||
|
||||
# TODO: #12084: SHELLCHECKDIRS = fsck_zfs vdev_id zpool
|
||||
SHELLCHECKDIRS = fsck_zfs zpool
|
||||
# TODO: #12084: SHELLCHECKDIRS += vdev_id
|
||||
SHELLCHECKDIRS = fsck_zfs zed zpool zvol_wait
|
||||
SHELLCHECK_OPTS = --enable=all
|
||||
|
||||
if USING_PYTHON
|
||||
SUBDIRS += arcstat arc_summary dbufstat
|
||||
|
@ -1,13 +1,8 @@
|
||||
bin_SCRIPTS = arc_summary
|
||||
|
||||
CLEANFILES = arc_summary
|
||||
EXTRA_DIST = arc_summary2 arc_summary3
|
||||
|
||||
if USING_PYTHON_2
|
||||
SCRIPT = arc_summary2
|
||||
else
|
||||
EXTRA_DIST = arc_summary3
|
||||
SCRIPT = arc_summary3
|
||||
endif
|
||||
|
||||
arc_summary: $(SCRIPT)
|
||||
cp $< $@
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -191,21 +191,13 @@ elif sys.platform.startswith('linux'):
|
||||
# there, so we fall back on modinfo
|
||||
command = ["/sbin/modinfo", request, "-0"]
|
||||
|
||||
# The recommended way to do this is with subprocess.run(). However,
|
||||
# some installed versions of Python are < 3.5, so we offer them
|
||||
# the option of doing it the old way (for now)
|
||||
info = ''
|
||||
|
||||
try:
|
||||
|
||||
if 'run' in dir(subprocess):
|
||||
info = subprocess.run(command, stdout=subprocess.PIPE,
|
||||
universal_newlines=True)
|
||||
raw_output = info.stdout.split('\0')
|
||||
else:
|
||||
info = subprocess.check_output(command,
|
||||
universal_newlines=True)
|
||||
raw_output = info.split('\0')
|
||||
info = subprocess.run(command, stdout=subprocess.PIPE,
|
||||
check=True, universal_newlines=True)
|
||||
raw_output = info.stdout.split('\0')
|
||||
|
||||
except subprocess.CalledProcessError:
|
||||
print("Error: Descriptions not available",
|
||||
|
@ -47,7 +47,7 @@
|
||||
# @hdr is the array of fields that needs to be printed, so we
|
||||
# just iterate over this array and print the values using our pretty printer.
|
||||
#
|
||||
# This script must remain compatible with Python 2.6+ and Python 3.4+.
|
||||
# This script must remain compatible with Python 3.6+.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
@ -27,7 +27,7 @@
|
||||
# Copyright (C) 2013 Lawrence Livermore National Security, LLC.
|
||||
# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
|
||||
#
|
||||
# This script must remain compatible with Python 2.6+ and Python 3.4+.
|
||||
# This script must remain compatible with and Python 3.6+.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
@ -4,3 +4,5 @@ include $(top_srcdir)/config/Shellcheck.am
|
||||
dist_sbin_SCRIPTS = fsck.zfs
|
||||
|
||||
SUBSTFILES += $(dist_sbin_SCRIPTS)
|
||||
|
||||
SHELLCHECK_OPTS = --enable=all
|
||||
|
@ -266,12 +266,8 @@ cmp_data(raidz_test_opts_t *opts, raidz_map_t *rm)
|
||||
static int
|
||||
init_rand(void *data, size_t size, void *private)
|
||||
{
|
||||
int i;
|
||||
int *dst = (int *)data;
|
||||
|
||||
for (i = 0; i < size / sizeof (int); i++)
|
||||
dst[i] = rand_data[i];
|
||||
|
||||
(void) private;
|
||||
memcpy(data, rand_data, size);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <getopt.h>
|
||||
#include <sys/zfs_context.h>
|
||||
#include <sys/spa.h>
|
||||
#include <sys/spa_impl.h>
|
||||
@ -383,10 +384,10 @@ livelist_verify(dsl_deadlist_t *dl, void *arg)
|
||||
* Check for errors in the livelist entry and discard the intermediary
|
||||
* data structures
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
sublivelist_verify_lightweight(void *args, dsl_deadlist_entry_t *dle)
|
||||
{
|
||||
(void) args;
|
||||
sublivelist_verify_t sv;
|
||||
zfs_btree_create(&sv.sv_leftover, livelist_block_compare,
|
||||
sizeof (sublivelist_verify_block_t));
|
||||
@ -820,65 +821,87 @@ usage(void)
|
||||
" z ZAPs\n"
|
||||
" - Negate effect of next flag\n\n");
|
||||
(void) fprintf(stderr, " Options to control amount of output:\n");
|
||||
(void) fprintf(stderr, " -b block statistics\n");
|
||||
(void) fprintf(stderr, " -c checksum all metadata (twice for "
|
||||
"all data) blocks\n");
|
||||
(void) fprintf(stderr, " -C config (or cachefile if alone)\n");
|
||||
(void) fprintf(stderr, " -d dataset(s)\n");
|
||||
(void) fprintf(stderr, " -D dedup statistics\n");
|
||||
(void) fprintf(stderr, " -E decode and display block from an "
|
||||
"embedded block pointer\n");
|
||||
(void) fprintf(stderr, " -h pool history\n");
|
||||
(void) fprintf(stderr, " -i intent logs\n");
|
||||
(void) fprintf(stderr, " -l read label contents\n");
|
||||
(void) fprintf(stderr, " -k examine the checkpointed state "
|
||||
"of the pool\n");
|
||||
(void) fprintf(stderr, " -L disable leak tracking (do not "
|
||||
"load spacemaps)\n");
|
||||
(void) fprintf(stderr, " -m metaslabs\n");
|
||||
(void) fprintf(stderr, " -M metaslab groups\n");
|
||||
(void) fprintf(stderr, " -O perform object lookups by path\n");
|
||||
(void) fprintf(stderr, " -r copy an object by path to file\n");
|
||||
(void) fprintf(stderr, " -R read and display block from a "
|
||||
"device\n");
|
||||
(void) fprintf(stderr, " -s report stats on zdb's I/O\n");
|
||||
(void) fprintf(stderr, " -S simulate dedup to measure effect\n");
|
||||
(void) fprintf(stderr, " -v verbose (applies to all "
|
||||
"others)\n");
|
||||
(void) fprintf(stderr, " -y perform livelist and metaslab "
|
||||
"validation on any livelists being deleted\n\n");
|
||||
(void) fprintf(stderr, " -b --block-stats "
|
||||
"block statistics\n");
|
||||
(void) fprintf(stderr, " -c --checksum "
|
||||
"checksum all metadata (twice for all data) blocks\n");
|
||||
(void) fprintf(stderr, " -C --config "
|
||||
"config (or cachefile if alone)\n");
|
||||
(void) fprintf(stderr, " -d --datasets "
|
||||
"dataset(s)\n");
|
||||
(void) fprintf(stderr, " -D --dedup-stats "
|
||||
"dedup statistics\n");
|
||||
(void) fprintf(stderr, " -E --embedded-block-pointer=INTEGER\n"
|
||||
" decode and display block "
|
||||
"from an embedded block pointer\n");
|
||||
(void) fprintf(stderr, " -h --history "
|
||||
"pool history\n");
|
||||
(void) fprintf(stderr, " -i --intent-logs "
|
||||
"intent logs\n");
|
||||
(void) fprintf(stderr, " -l --label "
|
||||
"read label contents\n");
|
||||
(void) fprintf(stderr, " -k --checkpointed-state "
|
||||
"examine the checkpointed state of the pool\n");
|
||||
(void) fprintf(stderr, " -L --disable-leak-tracking "
|
||||
"disable leak tracking (do not load spacemaps)\n");
|
||||
(void) fprintf(stderr, " -m --metaslabs "
|
||||
"metaslabs\n");
|
||||
(void) fprintf(stderr, " -M --metaslab-groups "
|
||||
"metaslab groups\n");
|
||||
(void) fprintf(stderr, " -O --object-lookups "
|
||||
"perform object lookups by path\n");
|
||||
(void) fprintf(stderr, " -r --copy-object "
|
||||
"copy an object by path to file\n");
|
||||
(void) fprintf(stderr, " -R --read-block "
|
||||
"read and display block from a device\n");
|
||||
(void) fprintf(stderr, " -s --io-stats "
|
||||
"report stats on zdb's I/O\n");
|
||||
(void) fprintf(stderr, " -S --simulate-dedup "
|
||||
"simulate dedup to measure effect\n");
|
||||
(void) fprintf(stderr, " -v --verbose "
|
||||
"verbose (applies to all others)\n");
|
||||
(void) fprintf(stderr, " -y --livelist "
|
||||
"perform livelist and metaslab validation on any livelists being "
|
||||
"deleted\n\n");
|
||||
(void) fprintf(stderr, " Below options are intended for use "
|
||||
"with other options:\n");
|
||||
(void) fprintf(stderr, " -A ignore assertions (-A), enable "
|
||||
"panic recovery (-AA) or both (-AAA)\n");
|
||||
(void) fprintf(stderr, " -e pool is exported/destroyed/"
|
||||
"has altroot/not in a cachefile\n");
|
||||
(void) fprintf(stderr, " -F attempt automatic rewind within "
|
||||
"safe range of transaction groups\n");
|
||||
(void) fprintf(stderr, " -G dump zfs_dbgmsg buffer before "
|
||||
"exiting\n");
|
||||
(void) fprintf(stderr, " -I <number of inflight I/Os> -- "
|
||||
"specify the maximum number of\n "
|
||||
"checksumming I/Os [default is 200]\n");
|
||||
(void) fprintf(stderr, " -o <variable>=<value> set global "
|
||||
"variable to an unsigned 32-bit integer\n");
|
||||
(void) fprintf(stderr, " -p <path> -- use one or more with "
|
||||
"-e to specify path to vdev dir\n");
|
||||
(void) fprintf(stderr, " -P print numbers in parseable form\n");
|
||||
(void) fprintf(stderr, " -q don't print label contents\n");
|
||||
(void) fprintf(stderr, " -t <txg> -- highest txg to use when "
|
||||
"searching for uberblocks\n");
|
||||
(void) fprintf(stderr, " -u uberblock\n");
|
||||
(void) fprintf(stderr, " -U <cachefile_path> -- use alternate "
|
||||
"cachefile\n");
|
||||
(void) fprintf(stderr, " -V do verbatim import\n");
|
||||
(void) fprintf(stderr, " -x <dumpdir> -- "
|
||||
(void) fprintf(stderr, " -A --ignore-assertions "
|
||||
"ignore assertions (-A), enable panic recovery (-AA) or both "
|
||||
"(-AAA)\n");
|
||||
(void) fprintf(stderr, " -e --exported "
|
||||
"pool is exported/destroyed/has altroot/not in a cachefile\n");
|
||||
(void) fprintf(stderr, " -F --automatic-rewind "
|
||||
"attempt automatic rewind within safe range of transaction "
|
||||
"groups\n");
|
||||
(void) fprintf(stderr, " -G --dump-debug-msg "
|
||||
"dump zfs_dbgmsg buffer before exiting\n");
|
||||
(void) fprintf(stderr, " -I --inflight=INTEGER "
|
||||
"specify the maximum number of checksumming I/Os "
|
||||
"[default is 200]\n");
|
||||
(void) fprintf(stderr, " -o --option=\"OPTION=INTEGER\" "
|
||||
"set global variable to an unsigned 32-bit integer\n");
|
||||
(void) fprintf(stderr, " -p --path==PATH "
|
||||
"use one or more with -e to specify path to vdev dir\n");
|
||||
(void) fprintf(stderr, " -P --parseable "
|
||||
"print numbers in parseable form\n");
|
||||
(void) fprintf(stderr, " -q --skip-label "
|
||||
"don't print label contents\n");
|
||||
(void) fprintf(stderr, " -t --txg=INTEGER "
|
||||
"highest txg to use when searching for uberblocks\n");
|
||||
(void) fprintf(stderr, " -u --uberblock "
|
||||
"uberblock\n");
|
||||
(void) fprintf(stderr, " -U --cachefile=PATH "
|
||||
"use alternate cachefile\n");
|
||||
(void) fprintf(stderr, " -V --verbatim "
|
||||
"do verbatim import\n");
|
||||
(void) fprintf(stderr, " -x --dump-blocks=PATH "
|
||||
"dump all read blocks into specified directory\n");
|
||||
(void) fprintf(stderr, " -X attempt extreme rewind (does not "
|
||||
"work with dataset)\n");
|
||||
(void) fprintf(stderr, " -Y attempt all reconstruction "
|
||||
"combinations for split blocks\n");
|
||||
(void) fprintf(stderr, " -Z show ZSTD headers \n");
|
||||
(void) fprintf(stderr, " -X --extreme-rewind "
|
||||
"attempt extreme rewind (does not work with dataset)\n");
|
||||
(void) fprintf(stderr, " -Y --all-reconstruction "
|
||||
"attempt all reconstruction combinations for split blocks\n");
|
||||
(void) fprintf(stderr, " -Z --zstd-headers "
|
||||
"show ZSTD headers \n");
|
||||
(void) fprintf(stderr, "Specify an option more than once (e.g. -bb) "
|
||||
"to make only that option verbose\n");
|
||||
(void) fprintf(stderr, "Default is to dump everything non-verbosely\n");
|
||||
@ -916,10 +939,10 @@ fatal(const char *fmt, ...)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
dump_packed_nvlist(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) size;
|
||||
nvlist_t *nv;
|
||||
size_t nvsize = *(uint64_t *)data;
|
||||
char *packed = umem_alloc(nvsize, UMEM_NOFAIL);
|
||||
@ -935,10 +958,10 @@ dump_packed_nvlist(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
nvlist_free(nv);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
dump_history_offsets(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) os, (void) object, (void) size;
|
||||
spa_history_phys_t *shp = data;
|
||||
|
||||
if (shp == NULL)
|
||||
@ -1058,26 +1081,25 @@ dump_zap_stats(objset_t *os, uint64_t object)
|
||||
dump_histogram(zs.zs_buckets_with_n_entries, ZAP_HISTOGRAM_SIZE, 0);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_none(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) os, (void) object, (void) data, (void) size;
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_unknown(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) os, (void) object, (void) data, (void) size;
|
||||
(void) printf("\tUNKNOWN OBJECT TYPE\n");
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_uint8(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) os, (void) object, (void) data, (void) size;
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_uint64(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
@ -1134,10 +1156,10 @@ dump_uint64(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
kmem_free(arr, oursize);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_zap(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) data, (void) size;
|
||||
zap_cursor_t zc;
|
||||
zap_attribute_t attr;
|
||||
void *prop;
|
||||
@ -1254,10 +1276,10 @@ dump_bpobj(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
}
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
dump_bpobj_subobjs(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) data, (void) size;
|
||||
dmu_object_info_t doi;
|
||||
int64_t i;
|
||||
|
||||
@ -1283,18 +1305,18 @@ dump_bpobj_subobjs(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
kmem_free(subobjs, doi.doi_max_offset);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_ddt_zap(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) data, (void) size;
|
||||
dump_zap_stats(os, object);
|
||||
/* contents are printed elsewhere, properly decoded */
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_sa_attrs(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) data, (void) size;
|
||||
zap_cursor_t zc;
|
||||
zap_attribute_t attr;
|
||||
|
||||
@ -1318,10 +1340,10 @@ dump_sa_attrs(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
zap_cursor_fini(&zc);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_sa_layouts(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) data, (void) size;
|
||||
zap_cursor_t zc;
|
||||
zap_attribute_t attr;
|
||||
uint16_t *layout_attrs;
|
||||
@ -1356,10 +1378,10 @@ dump_sa_layouts(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
zap_cursor_fini(&zc);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_zpldir(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) data, (void) size;
|
||||
zap_cursor_t zc;
|
||||
zap_attribute_t attr;
|
||||
const char *typenames[] = {
|
||||
@ -2215,10 +2237,10 @@ dump_history(spa_t *spa)
|
||||
free(buf);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_dnode(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) os, (void) object, (void) data, (void) size;
|
||||
}
|
||||
|
||||
static uint64_t
|
||||
@ -2440,19 +2462,17 @@ visit_indirect(spa_t *spa, const dnode_phys_t *dnp,
|
||||
return (err);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_indirect(dnode_t *dn)
|
||||
{
|
||||
dnode_phys_t *dnp = dn->dn_phys;
|
||||
int j;
|
||||
zbookmark_phys_t czb;
|
||||
|
||||
(void) printf("Indirect blocks:\n");
|
||||
|
||||
SET_BOOKMARK(&czb, dmu_objset_id(dn->dn_objset),
|
||||
dn->dn_object, dnp->dn_nlevels - 1, 0);
|
||||
for (j = 0; j < dnp->dn_nblkptr; j++) {
|
||||
for (int j = 0; j < dnp->dn_nblkptr; j++) {
|
||||
czb.zb_blkid = j;
|
||||
(void) visit_indirect(dmu_objset_spa(dn->dn_objset), dnp,
|
||||
&dnp->dn_blkptr[j], &czb);
|
||||
@ -2461,10 +2481,10 @@ dump_indirect(dnode_t *dn)
|
||||
(void) printf("\n");
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_dsl_dir(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) os, (void) object;
|
||||
dsl_dir_phys_t *dd = data;
|
||||
time_t crtime;
|
||||
char nice[32];
|
||||
@ -2518,10 +2538,10 @@ dump_dsl_dir(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
(u_longlong_t)dd->dd_clones);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_dsl_dataset(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) os, (void) object;
|
||||
dsl_dataset_phys_t *ds = data;
|
||||
time_t crtime;
|
||||
char used[32], compressed[32], uncompressed[32], unique[32];
|
||||
@ -2581,10 +2601,10 @@ dump_dsl_dataset(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
(void) printf("\t\tbp = %s\n", blkbuf);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
dump_bptree_cb(void *arg, const blkptr_t *bp, dmu_tx_t *tx)
|
||||
{
|
||||
(void) arg, (void) tx;
|
||||
char blkbuf[BP_SPRINTF_LEN];
|
||||
|
||||
if (bp->blk_birth != 0) {
|
||||
@ -2622,10 +2642,10 @@ dump_bptree(objset_t *os, uint64_t obj, const char *name)
|
||||
(void) bptree_iterate(os, obj, B_FALSE, dump_bptree_cb, NULL, NULL);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
dump_bpobj_cb(void *arg, const blkptr_t *bp, boolean_t bp_freed, dmu_tx_t *tx)
|
||||
{
|
||||
(void) arg, (void) tx;
|
||||
char blkbuf[BP_SPRINTF_LEN];
|
||||
|
||||
ASSERT(bp->blk_birth != 0);
|
||||
@ -3187,10 +3207,10 @@ dump_znode_symlink(sa_handle_t *hdl)
|
||||
(void) printf("\ttarget %s\n", linktarget);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_znode(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) data, (void) size;
|
||||
char path[MAXPATHLEN * 2]; /* allow for xattr and failure prefix */
|
||||
sa_handle_t *hdl;
|
||||
uint64_t xattr, rdev, gen;
|
||||
@ -3282,16 +3302,16 @@ dump_znode(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
sa_handle_destroy(hdl);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_acl(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) os, (void) object, (void) data, (void) size;
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
dump_dmu_objset(objset_t *os, uint64_t object, void *data, size_t size)
|
||||
{
|
||||
(void) os, (void) object, (void) data, (void) size;
|
||||
}
|
||||
|
||||
static object_viewer_t *object_viewer[DMU_OT_NUMTYPES + 1] = {
|
||||
@ -4985,10 +5005,10 @@ static uint64_t dataset_feature_count[SPA_FEATURES];
|
||||
static uint64_t global_feature_count[SPA_FEATURES];
|
||||
static uint64_t remap_deadlist_count = 0;
|
||||
|
||||
/*ARGSUSED*/
|
||||
static int
|
||||
dump_one_objset(const char *dsname, void *arg)
|
||||
{
|
||||
(void) arg;
|
||||
int error;
|
||||
objset_t *os;
|
||||
spa_feature_t f;
|
||||
@ -5553,7 +5573,6 @@ static metaslab_ops_t zdb_metaslab_ops = {
|
||||
NULL /* alloc */
|
||||
};
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
load_unflushed_svr_segs_cb(spa_t *spa, space_map_entry_t *sme,
|
||||
uint64_t txg, void *arg)
|
||||
@ -5582,11 +5601,12 @@ load_unflushed_svr_segs_cb(spa_t *spa, space_map_entry_t *sme,
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
claim_segment_impl_cb(uint64_t inner_offset, vdev_t *vd, uint64_t offset,
|
||||
uint64_t size, void *arg)
|
||||
{
|
||||
(void) inner_offset, (void) arg;
|
||||
|
||||
/*
|
||||
* This callback was called through a remap from
|
||||
* a device being removed. Therefore, the vdev that
|
||||
@ -5660,11 +5680,11 @@ zdb_claim_removing(spa_t *spa, zdb_cb_t *zcb)
|
||||
spa_config_exit(spa, SCL_CONFIG, FTAG);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
increment_indirect_mapping_cb(void *arg, const blkptr_t *bp, boolean_t bp_freed,
|
||||
dmu_tx_t *tx)
|
||||
{
|
||||
(void) tx;
|
||||
zdb_cb_t *zcb = arg;
|
||||
spa_t *spa = zcb->zcb_spa;
|
||||
vdev_t *vd;
|
||||
@ -6276,10 +6296,10 @@ zdb_leak_fini(spa_t *spa, zdb_cb_t *zcb)
|
||||
return (leaks);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
count_block_cb(void *arg, const blkptr_t *bp, dmu_tx_t *tx)
|
||||
{
|
||||
(void) tx;
|
||||
zdb_cb_t *zcb = arg;
|
||||
|
||||
if (dump_opt['b'] >= 5) {
|
||||
@ -6736,11 +6756,11 @@ typedef struct zdb_ddt_entry {
|
||||
avl_node_t zdde_node;
|
||||
} zdb_ddt_entry_t;
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
zdb_ddt_add_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp,
|
||||
const zbookmark_phys_t *zb, const dnode_phys_t *dnp, void *arg)
|
||||
{
|
||||
(void) zilog, (void) dnp;
|
||||
avl_tree_t *t = arg;
|
||||
avl_index_t where;
|
||||
zdb_ddt_entry_t *zdde, zdde_search;
|
||||
@ -7363,10 +7383,10 @@ verify_checkpoint(spa_t *spa)
|
||||
return (error);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
mos_leaks_cb(void *arg, uint64_t start, uint64_t size)
|
||||
{
|
||||
(void) arg;
|
||||
for (uint64_t i = start; i < size; i++) {
|
||||
(void) printf("MOS object %llu referenced but not allocated\n",
|
||||
(u_longlong_t)i);
|
||||
@ -7967,6 +7987,7 @@ static boolean_t
|
||||
zdb_decompress_block(abd_t *pabd, void *buf, void *lbuf, uint64_t lsize,
|
||||
uint64_t psize, int flags)
|
||||
{
|
||||
(void) buf;
|
||||
boolean_t exceeded = B_FALSE;
|
||||
/*
|
||||
* We don't know how the data was compressed, so just try
|
||||
@ -8368,6 +8389,23 @@ zdb_embedded_block(char *thing)
|
||||
free(buf);
|
||||
}
|
||||
|
||||
/* check for valid hex or decimal numeric string */
|
||||
static boolean_t
|
||||
zdb_numeric(char *str)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (strlen(str) == 0)
|
||||
return (B_FALSE);
|
||||
if (strncmp(str, "0x", 2) == 0 || strncmp(str, "0X", 2) == 0)
|
||||
i = 2;
|
||||
for (; i < strlen(str); i++) {
|
||||
if (!isxdigit(str[i]))
|
||||
return (B_FALSE);
|
||||
}
|
||||
return (B_TRUE);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
@ -8412,8 +8450,51 @@ main(int argc, char **argv)
|
||||
*/
|
||||
zfs_btree_verify_intensity = 3;
|
||||
|
||||
while ((c = getopt(argc, argv,
|
||||
"AbcCdDeEFGhiI:klLmMo:Op:PqrRsSt:uU:vVx:XYyZ")) != -1) {
|
||||
struct option long_options[] = {
|
||||
{"ignore-assertions", no_argument, NULL, 'A'},
|
||||
{"block-stats", no_argument, NULL, 'b'},
|
||||
{"checksum", no_argument, NULL, 'c'},
|
||||
{"config", no_argument, NULL, 'C'},
|
||||
{"datasets", no_argument, NULL, 'd'},
|
||||
{"dedup-stats", no_argument, NULL, 'D'},
|
||||
{"exported", no_argument, NULL, 'e'},
|
||||
{"embedded-block-pointer", no_argument, NULL, 'E'},
|
||||
{"automatic-rewind", no_argument, NULL, 'F'},
|
||||
{"dump-debug-msg", no_argument, NULL, 'G'},
|
||||
{"history", no_argument, NULL, 'h'},
|
||||
{"intent-logs", no_argument, NULL, 'i'},
|
||||
{"inflight", required_argument, NULL, 'I'},
|
||||
{"checkpointed-state", no_argument, NULL, 'k'},
|
||||
{"label", no_argument, NULL, 'l'},
|
||||
{"disable-leak-tracking", no_argument, NULL, 'L'},
|
||||
{"metaslabs", no_argument, NULL, 'm'},
|
||||
{"metaslab-groups", no_argument, NULL, 'M'},
|
||||
{"numeric", no_argument, NULL, 'N'},
|
||||
{"option", required_argument, NULL, 'o'},
|
||||
{"object-lookups", no_argument, NULL, 'O'},
|
||||
{"path", required_argument, NULL, 'p'},
|
||||
{"parseable", no_argument, NULL, 'P'},
|
||||
{"skip-label", no_argument, NULL, 'q'},
|
||||
{"copy-object", no_argument, NULL, 'r'},
|
||||
{"read-block", no_argument, NULL, 'R'},
|
||||
{"io-stats", no_argument, NULL, 's'},
|
||||
{"simulate-dedup", no_argument, NULL, 'S'},
|
||||
{"txg", required_argument, NULL, 't'},
|
||||
{"uberblock", no_argument, NULL, 'u'},
|
||||
{"cachefile", required_argument, NULL, 'U'},
|
||||
{"verbose", no_argument, NULL, 'v'},
|
||||
{"verbatim", no_argument, NULL, 'V'},
|
||||
{"dump-blocks", required_argument, NULL, 'x'},
|
||||
{"extreme-rewind", no_argument, NULL, 'X'},
|
||||
{"all-reconstruction", no_argument, NULL, 'Y'},
|
||||
{"livelist", no_argument, NULL, 'y'},
|
||||
{"zstd-headers", no_argument, NULL, 'Z'},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
while ((c = getopt_long(argc, argv,
|
||||
"AbcCdDeEFGhiI:klLmMNo:Op:PqrRsSt:uU:vVx:XYyZ",
|
||||
long_options, NULL)) != -1) {
|
||||
switch (c) {
|
||||
case 'b':
|
||||
case 'c':
|
||||
@ -8427,6 +8508,7 @@ main(int argc, char **argv)
|
||||
case 'l':
|
||||
case 'm':
|
||||
case 'M':
|
||||
case 'N':
|
||||
case 'O':
|
||||
case 'r':
|
||||
case 'R':
|
||||
@ -8518,32 +8600,6 @@ main(int argc, char **argv)
|
||||
(void) fprintf(stderr, "-p option requires use of -e\n");
|
||||
usage();
|
||||
}
|
||||
if (dump_opt['d'] || dump_opt['r']) {
|
||||
/* <pool>[/<dataset | objset id> is accepted */
|
||||
if (argv[2] && (objset_str = strchr(argv[2], '/')) != NULL &&
|
||||
objset_str++ != NULL) {
|
||||
char *endptr;
|
||||
errno = 0;
|
||||
objset_id = strtoull(objset_str, &endptr, 0);
|
||||
/* dataset 0 is the same as opening the pool */
|
||||
if (errno == 0 && endptr != objset_str &&
|
||||
objset_id != 0) {
|
||||
target_is_spa = B_FALSE;
|
||||
dataset_lookup = B_TRUE;
|
||||
} else if (objset_id != 0) {
|
||||
printf("failed to open objset %s "
|
||||
"%llu %s", objset_str,
|
||||
(u_longlong_t)objset_id,
|
||||
strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
/* normal dataset name not an objset ID */
|
||||
if (endptr == objset_str) {
|
||||
objset_id = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(_LP64)
|
||||
/*
|
||||
* ZDB does not typically re-read blocks; therefore limit the ARC
|
||||
@ -8582,7 +8638,7 @@ main(int argc, char **argv)
|
||||
verbose = MAX(verbose, 1);
|
||||
|
||||
for (c = 0; c < 256; c++) {
|
||||
if (dump_all && strchr("AeEFklLOPrRSXy", c) == NULL)
|
||||
if (dump_all && strchr("AeEFklLNOPrRSXy", c) == NULL)
|
||||
dump_opt[c] = 1;
|
||||
if (dump_opt[c])
|
||||
dump_opt[c] += verbose;
|
||||
@ -8621,6 +8677,7 @@ main(int argc, char **argv)
|
||||
return (dump_path(argv[0], argv[1], NULL));
|
||||
}
|
||||
if (dump_opt['r']) {
|
||||
target_is_spa = B_FALSE;
|
||||
if (argc != 3)
|
||||
usage();
|
||||
dump_opt['v'] = verbose;
|
||||
@ -8631,6 +8688,10 @@ main(int argc, char **argv)
|
||||
rewind = ZPOOL_DO_REWIND |
|
||||
(dump_opt['X'] ? ZPOOL_EXTREME_REWIND : 0);
|
||||
|
||||
/* -N implies -d */
|
||||
if (dump_opt['N'] && dump_opt['d'] == 0)
|
||||
dump_opt['d'] = dump_opt['N'];
|
||||
|
||||
if (nvlist_alloc(&policy, NV_UNIQUE_NAME_TYPE, 0) != 0 ||
|
||||
nvlist_add_uint64(policy, ZPOOL_LOAD_REQUEST_TXG, max_txg) != 0 ||
|
||||
nvlist_add_uint32(policy, ZPOOL_LOAD_REWIND_POLICY, rewind) != 0)
|
||||
@ -8649,6 +8710,35 @@ main(int argc, char **argv)
|
||||
targetlen = strlen(target);
|
||||
if (targetlen && target[targetlen - 1] == '/')
|
||||
target[targetlen - 1] = '\0';
|
||||
|
||||
/*
|
||||
* See if an objset ID was supplied (-d <pool>/<objset ID>).
|
||||
* To disambiguate tank/100, consider the 100 as objsetID
|
||||
* if -N was given, otherwise 100 is an objsetID iff
|
||||
* tank/100 as a named dataset fails on lookup.
|
||||
*/
|
||||
objset_str = strchr(target, '/');
|
||||
if (objset_str && strlen(objset_str) > 1 &&
|
||||
zdb_numeric(objset_str + 1)) {
|
||||
char *endptr;
|
||||
errno = 0;
|
||||
objset_str++;
|
||||
objset_id = strtoull(objset_str, &endptr, 0);
|
||||
/* dataset 0 is the same as opening the pool */
|
||||
if (errno == 0 && endptr != objset_str &&
|
||||
objset_id != 0) {
|
||||
if (dump_opt['N'])
|
||||
dataset_lookup = B_TRUE;
|
||||
}
|
||||
/* normal dataset name not an objset ID */
|
||||
if (endptr == objset_str) {
|
||||
objset_id = -1;
|
||||
}
|
||||
} else if (objset_str && !zdb_numeric(objset_str + 1) &&
|
||||
dump_opt['N']) {
|
||||
printf("Supply a numeric objset ID with -N\n");
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
target_pool = target;
|
||||
}
|
||||
@ -8766,13 +8856,27 @@ main(int argc, char **argv)
|
||||
}
|
||||
return (error);
|
||||
} else {
|
||||
target_pool = strdup(target);
|
||||
if (strpbrk(target, "/@") != NULL)
|
||||
*strpbrk(target_pool, "/@") = '\0';
|
||||
|
||||
zdb_set_skip_mmp(target);
|
||||
/*
|
||||
* If -N was supplied, the user has indicated that
|
||||
* zdb -d <pool>/<objsetID> is in effect. Otherwise
|
||||
* we first assume that the dataset string is the
|
||||
* dataset name. If dmu_objset_hold fails with the
|
||||
* dataset string, and we have an objset_id, retry the
|
||||
* lookup with the objsetID.
|
||||
*/
|
||||
boolean_t retry = B_TRUE;
|
||||
retry_lookup:
|
||||
if (dataset_lookup == B_TRUE) {
|
||||
/*
|
||||
* Use the supplied id to get the name
|
||||
* for open_objset.
|
||||
*/
|
||||
error = spa_open(target, &spa, FTAG);
|
||||
error = spa_open(target_pool, &spa, FTAG);
|
||||
if (error == 0) {
|
||||
error = name_from_objset_id(spa,
|
||||
objset_id, dsname);
|
||||
@ -8781,10 +8885,23 @@ main(int argc, char **argv)
|
||||
target = dsname;
|
||||
}
|
||||
}
|
||||
if (error == 0)
|
||||
if (error == 0) {
|
||||
if (objset_id > 0 && retry) {
|
||||
int err = dmu_objset_hold(target, FTAG,
|
||||
&os);
|
||||
if (err) {
|
||||
dataset_lookup = B_TRUE;
|
||||
retry = B_FALSE;
|
||||
goto retry_lookup;
|
||||
} else {
|
||||
dmu_objset_rele(os, FTAG);
|
||||
}
|
||||
}
|
||||
error = open_objset(target, FTAG, &os);
|
||||
}
|
||||
if (error == 0)
|
||||
spa = dmu_objset_spa(os);
|
||||
free(target_pool);
|
||||
}
|
||||
}
|
||||
nvlist_free(policy);
|
||||
|
@ -60,10 +60,10 @@ print_log_bp(const blkptr_t *bp, const char *prefix)
|
||||
(void) printf("%s%s\n", prefix, blkbuf);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
zil_prt_rec_create(zilog_t *zilog, int txtype, const void *arg)
|
||||
{
|
||||
(void) zilog;
|
||||
const lr_create_t *lr = arg;
|
||||
time_t crtime = lr->lr_crtime[0];
|
||||
char *name, *link;
|
||||
@ -96,20 +96,20 @@ zil_prt_rec_create(zilog_t *zilog, int txtype, const void *arg)
|
||||
(u_longlong_t)lr->lr_gen, (u_longlong_t)lr->lr_rdev);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
zil_prt_rec_remove(zilog_t *zilog, int txtype, const void *arg)
|
||||
{
|
||||
(void) zilog, (void) txtype;
|
||||
const lr_remove_t *lr = arg;
|
||||
|
||||
(void) printf("%sdoid %llu, name %s\n", tab_prefix,
|
||||
(u_longlong_t)lr->lr_doid, (char *)(lr + 1));
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
zil_prt_rec_link(zilog_t *zilog, int txtype, const void *arg)
|
||||
{
|
||||
(void) zilog, (void) txtype;
|
||||
const lr_link_t *lr = arg;
|
||||
|
||||
(void) printf("%sdoid %llu, link_obj %llu, name %s\n", tab_prefix,
|
||||
@ -117,10 +117,10 @@ zil_prt_rec_link(zilog_t *zilog, int txtype, const void *arg)
|
||||
(char *)(lr + 1));
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
zil_prt_rec_rename(zilog_t *zilog, int txtype, const void *arg)
|
||||
{
|
||||
(void) zilog, (void) txtype;
|
||||
const lr_rename_t *lr = arg;
|
||||
char *snm = (char *)(lr + 1);
|
||||
char *tnm = snm + strlen(snm) + 1;
|
||||
@ -130,10 +130,10 @@ zil_prt_rec_rename(zilog_t *zilog, int txtype, const void *arg)
|
||||
(void) printf("%ssrc %s tgt %s\n", tab_prefix, snm, tnm);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
zil_prt_rec_write_cb(void *data, size_t len, void *unused)
|
||||
{
|
||||
(void) unused;
|
||||
char *cdata = data;
|
||||
|
||||
for (size_t i = 0; i < len; i++) {
|
||||
@ -146,7 +146,6 @@ zil_prt_rec_write_cb(void *data, size_t len, void *unused)
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
zil_prt_rec_write(zilog_t *zilog, int txtype, const void *arg)
|
||||
{
|
||||
@ -209,10 +208,10 @@ zil_prt_rec_write(zilog_t *zilog, int txtype, const void *arg)
|
||||
abd_free(data);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
zil_prt_rec_truncate(zilog_t *zilog, int txtype, const void *arg)
|
||||
{
|
||||
(void) zilog, (void) txtype;
|
||||
const lr_truncate_t *lr = arg;
|
||||
|
||||
(void) printf("%sfoid %llu, offset 0x%llx, length 0x%llx\n", tab_prefix,
|
||||
@ -220,10 +219,10 @@ zil_prt_rec_truncate(zilog_t *zilog, int txtype, const void *arg)
|
||||
(u_longlong_t)lr->lr_length);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
zil_prt_rec_setattr(zilog_t *zilog, int txtype, const void *arg)
|
||||
{
|
||||
(void) zilog, (void) txtype;
|
||||
const lr_setattr_t *lr = arg;
|
||||
time_t atime = (time_t)lr->lr_atime[0];
|
||||
time_t mtime = (time_t)lr->lr_mtime[0];
|
||||
@ -266,10 +265,10 @@ zil_prt_rec_setattr(zilog_t *zilog, int txtype, const void *arg)
|
||||
}
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
zil_prt_rec_acl(zilog_t *zilog, int txtype, const void *arg)
|
||||
{
|
||||
(void) zilog, (void) txtype;
|
||||
const lr_acl_t *lr = arg;
|
||||
|
||||
(void) printf("%sfoid %llu, aclcnt %llu\n", tab_prefix,
|
||||
@ -307,10 +306,10 @@ static zil_rec_info_t zil_rec_info[TX_MAX_TYPE] = {
|
||||
{.zri_print = zil_prt_rec_write, .zri_name = "TX_WRITE2 "},
|
||||
};
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
print_log_record(zilog_t *zilog, const lr_t *lr, void *arg, uint64_t claim_txg)
|
||||
{
|
||||
(void) arg, (void) claim_txg;
|
||||
int txtype;
|
||||
int verbose = MAX(dump_opt['d'], dump_opt['i']);
|
||||
|
||||
@ -341,11 +340,11 @@ print_log_record(zilog_t *zilog, const lr_t *lr, void *arg, uint64_t claim_txg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
print_log_block(zilog_t *zilog, const blkptr_t *bp, void *arg,
|
||||
uint64_t claim_txg)
|
||||
{
|
||||
(void) arg;
|
||||
char blkbuf[BP_SPRINTF_LEN + 10];
|
||||
int verbose = MAX(dump_opt['d'], dump_opt['i']);
|
||||
const char *claim;
|
||||
@ -396,7 +395,6 @@ print_log_stats(int verbose)
|
||||
(void) printf("\n");
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
dump_intent_log(zilog_t *zilog)
|
||||
{
|
||||
|
@ -5,6 +5,7 @@ AM_CFLAGS += $(LIBUDEV_CFLAGS) $(LIBUUID_CFLAGS)
|
||||
|
||||
SUBDIRS = zed.d
|
||||
SHELLCHECKDIRS = $(SUBDIRS)
|
||||
SHELLCHECK_OPTS = --enable=all
|
||||
|
||||
sbin_PROGRAMS = zed
|
||||
|
||||
|
@ -97,6 +97,7 @@ _umem_logging_init(void)
|
||||
int
|
||||
fmd_hdl_register(fmd_hdl_t *hdl, int version, const fmd_hdl_info_t *mip)
|
||||
{
|
||||
(void) version;
|
||||
fmd_module_t *mp = (fmd_module_t *)hdl;
|
||||
|
||||
mp->mod_info = mip;
|
||||
@ -179,18 +180,21 @@ fmd_hdl_getspecific(fmd_hdl_t *hdl)
|
||||
void *
|
||||
fmd_hdl_alloc(fmd_hdl_t *hdl, size_t size, int flags)
|
||||
{
|
||||
(void) hdl;
|
||||
return (umem_alloc(size, flags));
|
||||
}
|
||||
|
||||
void *
|
||||
fmd_hdl_zalloc(fmd_hdl_t *hdl, size_t size, int flags)
|
||||
{
|
||||
(void) hdl;
|
||||
return (umem_zalloc(size, flags));
|
||||
}
|
||||
|
||||
void
|
||||
fmd_hdl_free(fmd_hdl_t *hdl, void *data, size_t size)
|
||||
{
|
||||
(void) hdl;
|
||||
umem_free(data, size);
|
||||
}
|
||||
|
||||
@ -217,6 +221,8 @@ fmd_hdl_debug(fmd_hdl_t *hdl, const char *format, ...)
|
||||
int32_t
|
||||
fmd_prop_get_int32(fmd_hdl_t *hdl, const char *name)
|
||||
{
|
||||
(void) hdl;
|
||||
|
||||
/*
|
||||
* These can be looked up in mp->modinfo->fmdi_props
|
||||
* For now we just hard code for phase 2. In the
|
||||
@ -234,6 +240,8 @@ fmd_prop_get_int32(fmd_hdl_t *hdl, const char *name)
|
||||
int64_t
|
||||
fmd_prop_get_int64(fmd_hdl_t *hdl, const char *name)
|
||||
{
|
||||
(void) hdl;
|
||||
|
||||
/*
|
||||
* These can be looked up in mp->modinfo->fmdi_props
|
||||
* For now we just hard code for phase 2. In the
|
||||
@ -337,12 +345,14 @@ fmd_case_uuresolved(fmd_hdl_t *hdl, const char *uuid)
|
||||
int
|
||||
fmd_case_solved(fmd_hdl_t *hdl, fmd_case_t *cp)
|
||||
{
|
||||
(void) hdl;
|
||||
return ((cp->ci_state >= FMD_CASE_SOLVED) ? FMD_B_TRUE : FMD_B_FALSE);
|
||||
}
|
||||
|
||||
void
|
||||
fmd_case_add_ereport(fmd_hdl_t *hdl, fmd_case_t *cp, fmd_event_t *ep)
|
||||
{
|
||||
(void) hdl, (void) cp, (void) ep;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -444,19 +454,21 @@ fmd_case_add_suspect(fmd_hdl_t *hdl, fmd_case_t *cp, nvlist_t *fault)
|
||||
void
|
||||
fmd_case_setspecific(fmd_hdl_t *hdl, fmd_case_t *cp, void *data)
|
||||
{
|
||||
(void) hdl;
|
||||
cp->ci_data = data;
|
||||
}
|
||||
|
||||
void *
|
||||
fmd_case_getspecific(fmd_hdl_t *hdl, fmd_case_t *cp)
|
||||
{
|
||||
(void) hdl;
|
||||
return (cp->ci_data);
|
||||
}
|
||||
|
||||
void
|
||||
fmd_buf_create(fmd_hdl_t *hdl, fmd_case_t *cp, const char *name, size_t size)
|
||||
{
|
||||
assert(strcmp(name, "data") == 0);
|
||||
assert(strcmp(name, "data") == 0), (void) name;
|
||||
assert(cp->ci_bufptr == NULL);
|
||||
assert(size < (1024 * 1024));
|
||||
|
||||
@ -468,7 +480,8 @@ void
|
||||
fmd_buf_read(fmd_hdl_t *hdl, fmd_case_t *cp,
|
||||
const char *name, void *buf, size_t size)
|
||||
{
|
||||
assert(strcmp(name, "data") == 0);
|
||||
(void) hdl;
|
||||
assert(strcmp(name, "data") == 0), (void) name;
|
||||
assert(cp->ci_bufptr != NULL);
|
||||
assert(size <= cp->ci_bufsiz);
|
||||
|
||||
@ -479,7 +492,8 @@ void
|
||||
fmd_buf_write(fmd_hdl_t *hdl, fmd_case_t *cp,
|
||||
const char *name, const void *buf, size_t size)
|
||||
{
|
||||
assert(strcmp(name, "data") == 0);
|
||||
(void) hdl;
|
||||
assert(strcmp(name, "data") == 0), (void) name;
|
||||
assert(cp->ci_bufptr != NULL);
|
||||
assert(cp->ci_bufsiz >= size);
|
||||
|
||||
@ -583,6 +597,7 @@ _timer_notify(union sigval sv)
|
||||
fmd_timer_t *
|
||||
fmd_timer_install(fmd_hdl_t *hdl, void *arg, fmd_event_t *ep, hrtime_t delta)
|
||||
{
|
||||
(void) ep;
|
||||
struct sigevent sev;
|
||||
struct itimerspec its;
|
||||
fmd_timer_t *ftp;
|
||||
@ -626,6 +641,7 @@ nvlist_t *
|
||||
fmd_nvl_create_fault(fmd_hdl_t *hdl, const char *class, uint8_t certainty,
|
||||
nvlist_t *asru, nvlist_t *fru, nvlist_t *resource)
|
||||
{
|
||||
(void) hdl;
|
||||
nvlist_t *nvl;
|
||||
int err = 0;
|
||||
|
||||
@ -689,6 +705,7 @@ fmd_strmatch(const char *s, const char *p)
|
||||
int
|
||||
fmd_nvl_class_match(fmd_hdl_t *hdl, nvlist_t *nvl, const char *pattern)
|
||||
{
|
||||
(void) hdl;
|
||||
char *class;
|
||||
|
||||
return (nvl != NULL &&
|
||||
@ -699,6 +716,7 @@ fmd_nvl_class_match(fmd_hdl_t *hdl, nvlist_t *nvl, const char *pattern)
|
||||
nvlist_t *
|
||||
fmd_nvl_alloc(fmd_hdl_t *hdl, int flags)
|
||||
{
|
||||
(void) hdl, (void) flags;
|
||||
nvlist_t *nvl = NULL;
|
||||
|
||||
if (nvlist_alloc(&nvl, NV_UNIQUE_NAME, 0) != 0)
|
||||
|
@ -327,6 +327,8 @@ zfs_agent_dispatch(const char *class, const char *subclass, nvlist_t *nvl)
|
||||
static void *
|
||||
zfs_agent_consumer_thread(void *arg)
|
||||
{
|
||||
(void) arg;
|
||||
|
||||
for (;;) {
|
||||
agent_event_t *event;
|
||||
|
||||
|
@ -119,7 +119,7 @@ uu_list_t *zfs_cases;
|
||||
* Write out the persistent representation of an active case.
|
||||
*/
|
||||
static void
|
||||
zfs_case_serialize(fmd_hdl_t *hdl, zfs_case_t *zcp)
|
||||
zfs_case_serialize(zfs_case_t *zcp)
|
||||
{
|
||||
zcp->zc_data.zc_version = CASE_DATA_VERSION_SERD;
|
||||
}
|
||||
@ -209,10 +209,10 @@ zfs_mark_vdev(uint64_t pool_guid, nvlist_t *vd, er_timeval_t *loaded)
|
||||
}
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static int
|
||||
zfs_mark_pool(zpool_handle_t *zhp, void *unused)
|
||||
{
|
||||
(void) unused;
|
||||
zfs_case_t *zcp;
|
||||
uint64_t pool_guid;
|
||||
uint64_t *tod;
|
||||
@ -373,8 +373,7 @@ zfs_serd_name(char *buf, uint64_t pool_guid, uint64_t vdev_guid,
|
||||
* case.
|
||||
*/
|
||||
static void
|
||||
zfs_case_solve(fmd_hdl_t *hdl, zfs_case_t *zcp, const char *faultname,
|
||||
boolean_t checkunusable)
|
||||
zfs_case_solve(fmd_hdl_t *hdl, zfs_case_t *zcp, const char *faultname)
|
||||
{
|
||||
nvlist_t *detector, *fault;
|
||||
boolean_t serialize;
|
||||
@ -412,7 +411,7 @@ zfs_case_solve(fmd_hdl_t *hdl, zfs_case_t *zcp, const char *faultname,
|
||||
serialize = B_TRUE;
|
||||
}
|
||||
if (serialize)
|
||||
zfs_case_serialize(hdl, zcp);
|
||||
zfs_case_serialize(zcp);
|
||||
|
||||
nvlist_free(detector);
|
||||
}
|
||||
@ -424,10 +423,10 @@ timeval_earlier(er_timeval_t *a, er_timeval_t *b)
|
||||
(a->ertv_sec == b->ertv_sec && a->ertv_nsec < b->ertv_nsec));
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
zfs_ereport_when(fmd_hdl_t *hdl, nvlist_t *nvl, er_timeval_t *when)
|
||||
{
|
||||
(void) hdl;
|
||||
int64_t *tod;
|
||||
uint_t nelem;
|
||||
|
||||
@ -443,7 +442,6 @@ zfs_ereport_when(fmd_hdl_t *hdl, nvlist_t *nvl, er_timeval_t *when)
|
||||
/*
|
||||
* Main fmd entry point.
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
zfs_fm_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class)
|
||||
{
|
||||
@ -686,7 +684,7 @@ zfs_fm_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class)
|
||||
if (zcp->zc_data.zc_has_remove_timer) {
|
||||
fmd_timer_remove(hdl, zcp->zc_remove_timer);
|
||||
zcp->zc_data.zc_has_remove_timer = 0;
|
||||
zfs_case_serialize(hdl, zcp);
|
||||
zfs_case_serialize(zcp);
|
||||
}
|
||||
if (zcp->zc_data.zc_serd_io[0] != '\0')
|
||||
fmd_serd_reset(hdl, zcp->zc_data.zc_serd_io);
|
||||
@ -751,18 +749,18 @@ zfs_fm_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class)
|
||||
fmd_case_close(hdl, dcp->zc_case);
|
||||
}
|
||||
|
||||
zfs_case_solve(hdl, zcp, "fault.fs.zfs.pool", B_TRUE);
|
||||
zfs_case_solve(hdl, zcp, "fault.fs.zfs.pool");
|
||||
} else if (fmd_nvl_class_match(hdl, nvl,
|
||||
ZFS_MAKE_EREPORT(FM_EREPORT_ZFS_LOG_REPLAY))) {
|
||||
/*
|
||||
* Pool level fault for reading the intent logs.
|
||||
*/
|
||||
zfs_case_solve(hdl, zcp, "fault.fs.zfs.log_replay", B_TRUE);
|
||||
zfs_case_solve(hdl, zcp, "fault.fs.zfs.log_replay");
|
||||
} else if (fmd_nvl_class_match(hdl, nvl, "ereport.fs.zfs.vdev.*")) {
|
||||
/*
|
||||
* Device fault.
|
||||
*/
|
||||
zfs_case_solve(hdl, zcp, "fault.fs.zfs.device", B_TRUE);
|
||||
zfs_case_solve(hdl, zcp, "fault.fs.zfs.device");
|
||||
} else if (fmd_nvl_class_match(hdl, nvl,
|
||||
ZFS_MAKE_EREPORT(FM_EREPORT_ZFS_IO)) ||
|
||||
fmd_nvl_class_match(hdl, nvl,
|
||||
@ -789,7 +787,7 @@ zfs_fm_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class)
|
||||
fmd_serd_create(hdl, zcp->zc_data.zc_serd_io,
|
||||
fmd_prop_get_int32(hdl, "io_N"),
|
||||
fmd_prop_get_int64(hdl, "io_T"));
|
||||
zfs_case_serialize(hdl, zcp);
|
||||
zfs_case_serialize(zcp);
|
||||
}
|
||||
if (fmd_serd_record(hdl, zcp->zc_data.zc_serd_io, ep))
|
||||
checkremove = B_TRUE;
|
||||
@ -802,12 +800,12 @@ zfs_fm_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class)
|
||||
zcp->zc_data.zc_serd_checksum,
|
||||
fmd_prop_get_int32(hdl, "checksum_N"),
|
||||
fmd_prop_get_int64(hdl, "checksum_T"));
|
||||
zfs_case_serialize(hdl, zcp);
|
||||
zfs_case_serialize(zcp);
|
||||
}
|
||||
if (fmd_serd_record(hdl,
|
||||
zcp->zc_data.zc_serd_checksum, ep)) {
|
||||
zfs_case_solve(hdl, zcp,
|
||||
"fault.fs.zfs.vdev.checksum", B_FALSE);
|
||||
"fault.fs.zfs.vdev.checksum");
|
||||
}
|
||||
} else if (fmd_nvl_class_match(hdl, nvl,
|
||||
ZFS_MAKE_EREPORT(FM_EREPORT_ZFS_IO_FAILURE)) &&
|
||||
@ -817,12 +815,11 @@ zfs_fm_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class)
|
||||
if (strncmp(failmode, FM_EREPORT_FAILMODE_CONTINUE,
|
||||
strlen(FM_EREPORT_FAILMODE_CONTINUE)) == 0) {
|
||||
zfs_case_solve(hdl, zcp,
|
||||
"fault.fs.zfs.io_failure_continue",
|
||||
B_FALSE);
|
||||
"fault.fs.zfs.io_failure_continue");
|
||||
} else if (strncmp(failmode, FM_EREPORT_FAILMODE_WAIT,
|
||||
strlen(FM_EREPORT_FAILMODE_WAIT)) == 0) {
|
||||
zfs_case_solve(hdl, zcp,
|
||||
"fault.fs.zfs.io_failure_wait", B_FALSE);
|
||||
"fault.fs.zfs.io_failure_wait");
|
||||
}
|
||||
} else if (fmd_nvl_class_match(hdl, nvl,
|
||||
ZFS_MAKE_EREPORT(FM_EREPORT_ZFS_PROBE_FAILURE))) {
|
||||
@ -844,7 +841,7 @@ zfs_fm_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class)
|
||||
zfs_remove_timeout);
|
||||
if (!zcp->zc_data.zc_has_remove_timer) {
|
||||
zcp->zc_data.zc_has_remove_timer = 1;
|
||||
zfs_case_serialize(hdl, zcp);
|
||||
zfs_case_serialize(zcp);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -854,14 +851,13 @@ zfs_fm_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class)
|
||||
* The timeout is fired when we diagnosed an I/O error, and it was not due to
|
||||
* device removal (which would cause the timeout to be cancelled).
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
zfs_fm_timeout(fmd_hdl_t *hdl, id_t id, void *data)
|
||||
{
|
||||
zfs_case_t *zcp = data;
|
||||
|
||||
if (id == zcp->zc_remove_timer)
|
||||
zfs_case_solve(hdl, zcp, "fault.fs.zfs.vdev.io", B_FALSE);
|
||||
zfs_case_solve(hdl, zcp, "fault.fs.zfs.vdev.io");
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -681,7 +681,7 @@ guid_iter(uint64_t pool_guid, uint64_t vdev_guid, const char *devid,
|
||||
* phys_path: 'pci-0000:04:00.0-sas-0x4433221106000000-lun-0'
|
||||
*/
|
||||
static int
|
||||
zfs_deliver_add(nvlist_t *nvl, boolean_t is_lofi)
|
||||
zfs_deliver_add(nvlist_t *nvl)
|
||||
{
|
||||
char *devpath = NULL, *devid;
|
||||
uint64_t pool_guid = 0, vdev_guid = 0;
|
||||
@ -866,18 +866,15 @@ static int
|
||||
zfs_slm_deliver_event(const char *class, const char *subclass, nvlist_t *nvl)
|
||||
{
|
||||
int ret;
|
||||
boolean_t is_lofi = B_FALSE, is_check = B_FALSE, is_dle = B_FALSE;
|
||||
boolean_t is_check = B_FALSE, is_dle = B_FALSE;
|
||||
|
||||
if (strcmp(class, EC_DEV_ADD) == 0) {
|
||||
/*
|
||||
* We're mainly interested in disk additions, but we also listen
|
||||
* for new loop devices, to allow for simplified testing.
|
||||
*/
|
||||
if (strcmp(subclass, ESC_DISK) == 0)
|
||||
is_lofi = B_FALSE;
|
||||
else if (strcmp(subclass, ESC_LOFI) == 0)
|
||||
is_lofi = B_TRUE;
|
||||
else
|
||||
if (strcmp(subclass, ESC_DISK) != 0 &&
|
||||
strcmp(subclass, ESC_LOFI) != 0)
|
||||
return (0);
|
||||
|
||||
is_check = B_FALSE;
|
||||
@ -901,15 +898,16 @@ zfs_slm_deliver_event(const char *class, const char *subclass, nvlist_t *nvl)
|
||||
else if (is_check)
|
||||
ret = zfs_deliver_check(nvl);
|
||||
else
|
||||
ret = zfs_deliver_add(nvl, is_lofi);
|
||||
ret = zfs_deliver_add(nvl);
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void *
|
||||
zfs_enum_pools(void *arg)
|
||||
{
|
||||
(void) arg;
|
||||
|
||||
(void) zpool_iter(g_zfshdl, zfs_unavail_pool, (void *)&g_pool_list);
|
||||
/*
|
||||
* Linux - instead of using a thread pool, each list entry
|
||||
|
@ -263,7 +263,6 @@ replace_with_spare(fmd_hdl_t *hdl, zpool_handle_t *zhp, nvlist_t *vdev)
|
||||
* ASRU is now usable. ZFS has found the device to be present and
|
||||
* functioning.
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
zfs_vdev_repair(fmd_hdl_t *hdl, nvlist_t *nvl)
|
||||
{
|
||||
@ -302,11 +301,11 @@ zfs_vdev_repair(fmd_hdl_t *hdl, nvlist_t *nvl)
|
||||
vdev_guid, pool_guid);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
zfs_retire_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl,
|
||||
const char *class)
|
||||
{
|
||||
(void) ep;
|
||||
uint64_t pool_guid, vdev_guid;
|
||||
zpool_handle_t *zhp;
|
||||
nvlist_t *resource, *fault;
|
||||
|
@ -36,6 +36,7 @@ static volatile sig_atomic_t _got_hup = 0;
|
||||
static void
|
||||
_exit_handler(int signum)
|
||||
{
|
||||
(void) signum;
|
||||
_got_exit = 1;
|
||||
}
|
||||
|
||||
@ -45,6 +46,7 @@ _exit_handler(int signum)
|
||||
static void
|
||||
_hup_handler(int signum)
|
||||
{
|
||||
(void) signum;
|
||||
_got_hup = 1;
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,10 @@ dist_zedconf_DATA = \
|
||||
zed-functions.sh \
|
||||
zed.rc
|
||||
|
||||
SHELLCHECKSCRIPTS = zed-functions.sh zed.rc
|
||||
SHELLCHECK_OPTS = --enable=all
|
||||
SHELLCHECK_SHELL = dash
|
||||
|
||||
zedexecdir = $(zfsexecdir)/zed.d
|
||||
|
||||
dist_zedexec_SCRIPTS = \
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# Log all environment variables to ZED_DEBUG_LOG.
|
||||
#
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# Copyright (C) 2013-2014 Lawrence Livermore National Security, LLC.
|
||||
# Copyright (c) 2020 by Delphix. All rights reserved.
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# Send notification in response to a DATA error.
|
||||
#
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# Send notification in response to a given zevent.
|
||||
#
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# Track changes to enumerated pools for use in early-boot
|
||||
set -ef
|
||||
@ -72,7 +73,7 @@ PROPS="name,mountpoint,canmount,atime,relatime,devices,exec\
|
||||
,org.openzfs.systemd:wanted-by,org.openzfs.systemd:required-by\
|
||||
,org.openzfs.systemd:nofail,org.openzfs.systemd:ignore"
|
||||
|
||||
"${ZFS}" list -H -t filesystem -o $PROPS -r "${ZEVENT_POOL}" > "${FSLIST_TMP}"
|
||||
"${ZFS}" list -H -t filesystem -o "${PROPS}" -r "${ZEVENT_POOL}" > "${FSLIST_TMP}"
|
||||
|
||||
# Sort the output so that it is stable
|
||||
sort "${FSLIST_TMP}" -o "${FSLIST_TMP}"
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC2154
|
||||
# resilver_finish-start-scrub.sh
|
||||
# Run a scrub after a resilver
|
||||
#
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# Send notification in response to a RESILVER_FINISH or SCRUB_FINISH.
|
||||
#
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# Turn off/on vdevs' enclosure fault LEDs when their pool's state changes.
|
||||
#
|
||||
@ -126,6 +127,9 @@ state_to_val()
|
||||
ONLINE)
|
||||
echo 0
|
||||
;;
|
||||
*)
|
||||
echo "invalid state: $state"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
@ -138,26 +142,24 @@ nvme_dev_to_slot()
|
||||
dev="$1"
|
||||
|
||||
# Get the address "0000:01:00.0"
|
||||
address=$(cat "/sys/class/block/$dev/device/address")
|
||||
read -r address < "/sys/class/block/$dev/device/address"
|
||||
|
||||
# For each /sys/bus/pci/slots subdir that is an actual number
|
||||
# (rather than weird directories like "1-3/").
|
||||
# shellcheck disable=SC2010
|
||||
for i in $(ls /sys/bus/pci/slots/ | grep -E "^[0-9]+$") ; do
|
||||
this_address=$(cat "/sys/bus/pci/slots/$i/address")
|
||||
find /sys/bus/pci/slots -regex '.*/[0-9]+/address$' | \
|
||||
while read -r sys_addr; do
|
||||
read -r this_address < "$sys_addr"
|
||||
|
||||
# The format of address is a little different between
|
||||
# /sys/class/block/$dev/device/address and
|
||||
# /sys/bus/pci/slots/
|
||||
#
|
||||
# address= "0000:01:00.0"
|
||||
# this_address = "0000:01:00"
|
||||
#
|
||||
if echo "$address" | grep -Eq ^"$this_address" ; then
|
||||
echo "/sys/bus/pci/slots/$i"
|
||||
break
|
||||
fi
|
||||
done
|
||||
# The format of address is a little different between
|
||||
# /sys/class/block/$dev/device/address and
|
||||
# /sys/bus/pci/slots/
|
||||
#
|
||||
# address= "0000:01:00.0"
|
||||
# this_address = "0000:01:00"
|
||||
#
|
||||
if echo "$address" | grep -Eq ^"$this_address" ; then
|
||||
echo "${sys_addr%/*}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# CDDL HEADER START
|
||||
#
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# Send notification in response to a TRIM_FINISH. The event
|
||||
# will be received for each vdev in the pool which was trimmed.
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC2039
|
||||
# shellcheck disable=SC2154,SC3043
|
||||
# zed-functions.sh
|
||||
#
|
||||
# ZED helper functions for use in ZEDLETs
|
||||
@ -266,7 +266,7 @@ zed_notify_email()
|
||||
| sed -e "s/@ADDRESS@/${ZED_EMAIL_ADDR}/g" \
|
||||
-e "s/@SUBJECT@/${subject}/g")"
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
# shellcheck disable=SC2086,SC2248
|
||||
eval ${ZED_EMAIL_PROG} ${ZED_EMAIL_OPTS} < "${pathname}" >/dev/null 2>&1
|
||||
rv=$?
|
||||
if [ "${rv}" -ne 0 ]; then
|
||||
|
@ -3,6 +3,7 @@
|
||||
#
|
||||
# This file should be owned by root and permissioned 0600.
|
||||
##
|
||||
# shellcheck disable=SC2034
|
||||
|
||||
##
|
||||
# Absolute path to the debug output file.
|
||||
@ -13,9 +14,9 @@
|
||||
# Email address of the zpool administrator for receipt of notifications;
|
||||
# multiple addresses can be specified if they are delimited by whitespace.
|
||||
# Email will only be sent if ZED_EMAIL_ADDR is defined.
|
||||
# Disabled by default; uncomment to enable.
|
||||
# Enabled by default; comment to disable.
|
||||
#
|
||||
#ZED_EMAIL_ADDR="root"
|
||||
ZED_EMAIL_ADDR="root"
|
||||
|
||||
##
|
||||
# Name or path of executable responsible for sending notifications via email;
|
||||
|
@ -187,11 +187,14 @@ _zed_exec_fork_child(uint64_t eid, const char *dir, const char *prog,
|
||||
|
||||
static void
|
||||
_nop(int sig)
|
||||
{}
|
||||
{
|
||||
(void) sig;
|
||||
}
|
||||
|
||||
static void *
|
||||
_reap_children(void *arg)
|
||||
{
|
||||
(void) arg;
|
||||
struct launched_process_node node, *pnode;
|
||||
pid_t pid;
|
||||
int status;
|
||||
|
@ -219,9 +219,8 @@ zfs_sort_only_by_name(const zfs_sort_column_t *sc)
|
||||
sc->sc_prop == ZFS_PROP_NAME);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
zfs_compare(const void *larg, const void *rarg, void *unused)
|
||||
zfs_compare(const void *larg, const void *rarg)
|
||||
{
|
||||
zfs_handle_t *l = ((zfs_node_t *)larg)->zn_handle;
|
||||
zfs_handle_t *r = ((zfs_node_t *)rarg)->zn_handle;
|
||||
@ -382,7 +381,7 @@ zfs_sort(const void *larg, const void *rarg, void *data)
|
||||
}
|
||||
}
|
||||
|
||||
return (zfs_compare(larg, rarg, NULL));
|
||||
return (zfs_compare(larg, rarg));
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -53,7 +53,6 @@
|
||||
#include <zfeature_common.h>
|
||||
#include <libzutil.h>
|
||||
|
||||
const char cmdname[] = "zhack";
|
||||
static importargs_t g_importargs;
|
||||
static char *g_pool;
|
||||
static boolean_t g_readonly;
|
||||
@ -62,9 +61,9 @@ static __attribute__((noreturn)) void
|
||||
usage(void)
|
||||
{
|
||||
(void) fprintf(stderr,
|
||||
"Usage: %s [-c cachefile] [-d dir] <subcommand> <args> ...\n"
|
||||
"Usage: zhack [-c cachefile] [-d dir] <subcommand> <args> ...\n"
|
||||
"where <subcommand> <args> is one of the following:\n"
|
||||
"\n", cmdname);
|
||||
"\n");
|
||||
|
||||
(void) fprintf(stderr,
|
||||
" feature stat <pool>\n"
|
||||
@ -99,19 +98,20 @@ fatal(spa_t *spa, void *tag, const char *fmt, ...)
|
||||
}
|
||||
|
||||
va_start(ap, fmt);
|
||||
(void) fprintf(stderr, "%s: ", cmdname);
|
||||
(void) fputs("zhack: ", stderr);
|
||||
(void) vfprintf(stderr, fmt, ap);
|
||||
va_end(ap);
|
||||
(void) fprintf(stderr, "\n");
|
||||
(void) fputc('\n', stderr);
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
space_delta_cb(dmu_object_type_t bonustype, const void *data,
|
||||
zfs_file_info_t *zoi)
|
||||
{
|
||||
(void) data, (void) zoi;
|
||||
|
||||
/*
|
||||
* Is it a valid type of object to track?
|
||||
*/
|
||||
@ -276,7 +276,7 @@ zhack_do_feature_enable(int argc, char **argv)
|
||||
spa_t *spa;
|
||||
objset_t *mos;
|
||||
zfeature_info_t feature;
|
||||
spa_feature_t nodeps[] = { SPA_FEATURE_NONE };
|
||||
const spa_feature_t nodeps[] = { SPA_FEATURE_NONE };
|
||||
|
||||
/*
|
||||
* Features are not added to the pool's label until their refcounts
|
||||
@ -373,7 +373,7 @@ zhack_do_feature_ref(int argc, char **argv)
|
||||
spa_t *spa;
|
||||
objset_t *mos;
|
||||
zfeature_info_t feature;
|
||||
spa_feature_t nodeps[] = { SPA_FEATURE_NONE };
|
||||
const spa_feature_t nodeps[] = { SPA_FEATURE_NONE };
|
||||
|
||||
/*
|
||||
* fi_desc does not matter here because it was written to disk
|
||||
|
@ -497,11 +497,11 @@ print_all_handlers(void)
|
||||
return (count + total);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
cancel_one_handler(int id, const char *pool, zinject_record_t *record,
|
||||
void *data)
|
||||
{
|
||||
(void) pool, (void) record, (void) data;
|
||||
zfs_cmd_t zc = {"\0"};
|
||||
|
||||
zc.zc_guid = (uint64_t)id;
|
||||
|
@ -5,6 +5,8 @@ AM_CFLAGS += $(LIBBLKID_CFLAGS) $(LIBUUID_CFLAGS)
|
||||
|
||||
DEFAULT_INCLUDES += -I$(srcdir)
|
||||
|
||||
SHELLCHECK_OPTS = --enable=all
|
||||
|
||||
sbin_PROGRAMS = zpool
|
||||
|
||||
zpool_SOURCES = \
|
||||
|
@ -86,6 +86,7 @@ int
|
||||
check_device(const char *name, boolean_t force, boolean_t isspare,
|
||||
boolean_t iswholedisk)
|
||||
{
|
||||
(void) iswholedisk;
|
||||
char path[MAXPATHLEN];
|
||||
|
||||
if (strncmp(name, _PATH_DEV, sizeof (_PATH_DEV) - 1) != 0)
|
||||
@ -99,6 +100,7 @@ check_device(const char *name, boolean_t force, boolean_t isspare,
|
||||
boolean_t
|
||||
check_sector_size_database(char *path, int *sector_size)
|
||||
{
|
||||
(void) path, (void) sector_size;
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@ -409,6 +409,7 @@ check_device(const char *path, boolean_t force,
|
||||
void
|
||||
after_zpool_upgrade(zpool_handle_t *zhp)
|
||||
{
|
||||
(void) zhp;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -9,6 +9,7 @@ if [ "$1" = "-h" ] ; then
|
||||
exit
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
dev="$VDEV_PATH"
|
||||
|
||||
# If the VDEV path is a symlink, resolve it to a real device
|
||||
|
@ -27,6 +27,7 @@ elif [ "$script" = "iostat-10s" ] ; then
|
||||
brief="yes"
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
if [ -f "$VDEV_UPATH" ] ; then
|
||||
# We're a file-based vdev, iostat doesn't work on us. Do nothing.
|
||||
exit
|
||||
@ -67,7 +68,7 @@ i=0
|
||||
for col in $cols ; do
|
||||
i=$((i+1))
|
||||
# Skip the first column since it's just the device name
|
||||
if [ $i -eq 1 ]; then
|
||||
if [ "$i" -eq 1 ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
|
@ -66,6 +66,7 @@ for i in $list ; do
|
||||
|
||||
# Special case: Looking up the size of a file-based vdev can't
|
||||
# be done with lsblk.
|
||||
# shellcheck disable=SC2154
|
||||
if [ "$i" = "size" ] && [ -f "$VDEV_UPATH" ] ; then
|
||||
size=$(du -h --apparent-size "$VDEV_UPATH" | cut -f 1)
|
||||
echo "size=$size"
|
||||
|
@ -8,12 +8,14 @@ if [ "$1" = "-h" ] ; then
|
||||
exit
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
if [ -b "$VDEV_UPATH" ]; then
|
||||
device="${VDEV_UPATH##*/}"
|
||||
read -r val 2>/dev/null < "/sys/block/$device/queue/rotational"
|
||||
case "$val" in
|
||||
0) MEDIA="ssd" ;;
|
||||
1) MEDIA="hdd" ;;
|
||||
*) MEDIA="invalid" ;;
|
||||
esac
|
||||
|
||||
vpd_pg83="/sys/block/$device/device/vpd_pg83"
|
||||
|
@ -24,6 +24,7 @@ else
|
||||
fi
|
||||
|
||||
for i in $scripts ; do
|
||||
# shellcheck disable=SC2154
|
||||
if [ -z "$VDEV_ENC_SYSFS_PATH" ] ; then
|
||||
echo "$i="
|
||||
continue
|
||||
@ -52,7 +53,9 @@ for i in $scripts ; do
|
||||
locate_led)
|
||||
val=$(cat "$VDEV_ENC_SYSFS_PATH/locate" 2>/dev/null)
|
||||
;;
|
||||
*)
|
||||
val=invalid
|
||||
;;
|
||||
esac
|
||||
echo "$i=$val"
|
||||
done
|
||||
|
||||
|
@ -69,6 +69,7 @@ if [ "$1" = "-h" ] ; then
|
||||
exit
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
if [ -b "$VDEV_UPATH" ] && PATH="/usr/sbin:$PATH" command -v smartctl > /dev/null || [ -n "$samples" ] ; then
|
||||
if [ -n "$samples" ] ; then
|
||||
# cat a smartctl output text file instead of running smartctl
|
||||
|
@ -4,4 +4,5 @@ if [ "$1" = "-h" ] ; then
|
||||
exit
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
echo upath="$VDEV_UPATH"
|
||||
|
@ -63,10 +63,10 @@ struct zpool_list {
|
||||
zfs_type_t zl_type;
|
||||
};
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
zpool_compare(const void *larg, const void *rarg, void *unused)
|
||||
{
|
||||
(void) unused;
|
||||
zpool_handle_t *l = ((zpool_node_t *)larg)->zn_handle;
|
||||
zpool_handle_t *r = ((zpool_node_t *)rarg)->zn_handle;
|
||||
const char *lname = zpool_get_name(l);
|
||||
|
@ -906,8 +906,7 @@ add_prop_list(const char *propname, char *propval, nvlist_t **props,
|
||||
* Set a default property pair (name, string-value) in a property nvlist
|
||||
*/
|
||||
static int
|
||||
add_prop_list_default(const char *propname, char *propval, nvlist_t **props,
|
||||
boolean_t poolprop)
|
||||
add_prop_list_default(const char *propname, char *propval, nvlist_t **props)
|
||||
{
|
||||
char *pval;
|
||||
|
||||
@ -1501,7 +1500,7 @@ zpool_do_create(int argc, char **argv)
|
||||
ZPOOL_PROP_ALTROOT), optarg, &props, B_TRUE))
|
||||
goto errout;
|
||||
if (add_prop_list_default(zpool_prop_to_name(
|
||||
ZPOOL_PROP_CACHEFILE), "none", &props, B_TRUE))
|
||||
ZPOOL_PROP_CACHEFILE), "none", &props))
|
||||
goto errout;
|
||||
break;
|
||||
case 'm':
|
||||
@ -1579,7 +1578,7 @@ zpool_do_create(int argc, char **argv)
|
||||
ZPOOL_PROP_TNAME), optarg, &props, B_TRUE))
|
||||
goto errout;
|
||||
if (add_prop_list_default(zpool_prop_to_name(
|
||||
ZPOOL_PROP_CACHEFILE), "none", &props, B_TRUE))
|
||||
ZPOOL_PROP_CACHEFILE), "none", &props))
|
||||
goto errout;
|
||||
tname = optarg;
|
||||
break;
|
||||
@ -3618,7 +3617,7 @@ zpool_do_import(int argc, char **argv)
|
||||
ZPOOL_PROP_ALTROOT), optarg, &props, B_TRUE))
|
||||
goto error;
|
||||
if (add_prop_list_default(zpool_prop_to_name(
|
||||
ZPOOL_PROP_CACHEFILE), "none", &props, B_TRUE))
|
||||
ZPOOL_PROP_CACHEFILE), "none", &props))
|
||||
goto error;
|
||||
break;
|
||||
case 's':
|
||||
@ -3627,7 +3626,7 @@ zpool_do_import(int argc, char **argv)
|
||||
case 't':
|
||||
flags |= ZFS_IMPORT_TEMP_NAME;
|
||||
if (add_prop_list_default(zpool_prop_to_name(
|
||||
ZPOOL_PROP_CACHEFILE), "none", &props, B_TRUE))
|
||||
ZPOOL_PROP_CACHEFILE), "none", &props))
|
||||
goto error;
|
||||
break;
|
||||
|
||||
@ -4570,11 +4569,8 @@ single_histo_average(uint64_t *histo, unsigned int buckets)
|
||||
}
|
||||
|
||||
static void
|
||||
print_iostat_queues(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
||||
nvlist_t *newnv)
|
||||
print_iostat_queues(iostat_cbdata_t *cb, nvlist_t *newnv)
|
||||
{
|
||||
int i;
|
||||
uint64_t val;
|
||||
const char *names[] = {
|
||||
ZPOOL_CONFIG_VDEV_SYNC_R_PEND_QUEUE,
|
||||
ZPOOL_CONFIG_VDEV_SYNC_R_ACTIVE_QUEUE,
|
||||
@ -4604,8 +4600,8 @@ print_iostat_queues(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
||||
else
|
||||
format = ZFS_NICENUM_1024;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(names); i++) {
|
||||
val = nva[i].data[0];
|
||||
for (int i = 0; i < ARRAY_SIZE(names); i++) {
|
||||
uint64_t val = nva[i].data[0];
|
||||
print_one_stat(val, format, column_width, cb->cb_scripted);
|
||||
}
|
||||
|
||||
@ -4796,7 +4792,7 @@ print_vdev_stats(zpool_handle_t *zhp, const char *name, nvlist_t *oldnv,
|
||||
if (cb->cb_flags & IOS_LATENCY_M)
|
||||
print_iostat_latency(cb, oldnv, newnv);
|
||||
if (cb->cb_flags & IOS_QUEUES_M)
|
||||
print_iostat_queues(cb, oldnv, newnv);
|
||||
print_iostat_queues(cb, newnv);
|
||||
if (cb->cb_flags & IOS_ANYHISTO_M) {
|
||||
printf("\n");
|
||||
print_iostat_histos(cb, oldnv, newnv, scale, name);
|
||||
@ -6596,7 +6592,6 @@ zpool_do_attach_or_replace(int argc, char **argv, int replacing)
|
||||
*
|
||||
* Replace <device> with <new_device>.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
int
|
||||
zpool_do_replace(int argc, char **argv)
|
||||
{
|
||||
@ -6632,7 +6627,6 @@ zpool_do_attach(int argc, char **argv)
|
||||
* is the last device in the mirror, or if the DTLs indicate that this device
|
||||
* has the only valid copy of some data.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
int
|
||||
zpool_do_detach(int argc, char **argv)
|
||||
{
|
||||
@ -6939,7 +6933,6 @@ zpool_do_online(int argc, char **argv)
|
||||
* -t Only take the device off-line temporarily. The offline/faulted
|
||||
* state will not be persistent across reboots.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
int
|
||||
zpool_do_offline(int argc, char **argv)
|
||||
{
|
||||
@ -9084,7 +9077,6 @@ upgrade_list_disabled_cb(zpool_handle_t *zhp, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
upgrade_one(zpool_handle_t *zhp, void *data)
|
||||
{
|
||||
@ -9849,7 +9841,7 @@ zpool_do_events_next(ev_opts_t *opts)
|
||||
}
|
||||
|
||||
static int
|
||||
zpool_do_events_clear(ev_opts_t *opts)
|
||||
zpool_do_events_clear(void)
|
||||
{
|
||||
int count, ret;
|
||||
|
||||
@ -9916,7 +9908,7 @@ zpool_do_events(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (opts.clear)
|
||||
ret = zpool_do_events_clear(&opts);
|
||||
ret = zpool_do_events_clear();
|
||||
else
|
||||
ret = zpool_do_events_next(&opts);
|
||||
|
||||
@ -10854,6 +10846,8 @@ find_command_idx(char *command, int *idx)
|
||||
static int
|
||||
zpool_do_version(int argc, char **argv)
|
||||
{
|
||||
(void) argc, (void) argv;
|
||||
|
||||
if (zfs_version_print() == -1)
|
||||
return (1);
|
||||
|
||||
|
@ -253,7 +253,7 @@ extern uint64_t metaslab_force_ganging;
|
||||
extern uint64_t metaslab_df_alloc_threshold;
|
||||
extern unsigned long zfs_deadman_synctime_ms;
|
||||
extern int metaslab_preload_limit;
|
||||
extern boolean_t zfs_compressed_arc_enabled;
|
||||
extern int zfs_compressed_arc_enabled;
|
||||
extern int zfs_abd_scatter_enabled;
|
||||
extern int dmu_object_alloc_chunk_shift;
|
||||
extern boolean_t zfs_force_some_double_word_sm_entries;
|
||||
@ -1189,10 +1189,10 @@ ztest_kill(ztest_shared_t *zs)
|
||||
(void) kill(getpid(), SIGKILL);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
ztest_record_enospc(const char *s)
|
||||
{
|
||||
(void) s;
|
||||
ztest_shared->zs_enospc_count++;
|
||||
}
|
||||
|
||||
@ -2389,10 +2389,10 @@ zil_replay_func_t *ztest_replay_vector[TX_MAX_TYPE] = {
|
||||
* ZIL get_data callbacks
|
||||
*/
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
ztest_get_done(zgd_t *zgd, int error)
|
||||
{
|
||||
(void) error;
|
||||
ztest_ds_t *zd = zgd->zgd_private;
|
||||
uint64_t object = ((rl_t *)zgd->zgd_lr)->rl_object;
|
||||
|
||||
@ -2409,6 +2409,7 @@ static int
|
||||
ztest_get_data(void *arg, uint64_t arg2, lr_write_t *lr, char *buf,
|
||||
struct lwb *lwb, zio_t *zio)
|
||||
{
|
||||
(void) arg2;
|
||||
ztest_ds_t *zd = arg;
|
||||
objset_t *os = zd->zd_os;
|
||||
uint64_t object = lr->lr_foid;
|
||||
@ -2869,10 +2870,10 @@ ztest_object_init(ztest_ds_t *zd, ztest_od_t *od, size_t size, boolean_t remove)
|
||||
return (rv);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_zil_commit(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) id;
|
||||
zilog_t *zilog = zd->zd_zilog;
|
||||
|
||||
(void) pthread_rwlock_rdlock(&zd->zd_zilog_lock);
|
||||
@ -2898,10 +2899,10 @@ ztest_zil_commit(ztest_ds_t *zd, uint64_t id)
|
||||
* mount/unmount operation. We hold the dataset across these operations in an
|
||||
* attempt to expose any implicit assumptions about ZIL management.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_zil_remount(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) id;
|
||||
objset_t *os = zd->zd_os;
|
||||
|
||||
/*
|
||||
@ -2935,10 +2936,10 @@ ztest_zil_remount(ztest_ds_t *zd, uint64_t id)
|
||||
* Verify that we can't destroy an active pool, create an existing pool,
|
||||
* or create a pool with a bad vdev spec.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_spa_create_destroy(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
ztest_shared_opts_t *zo = &ztest_opts;
|
||||
spa_t *spa;
|
||||
nvlist_t *nvroot;
|
||||
@ -2998,10 +2999,10 @@ ztest_spa_create_destroy(ztest_ds_t *zd, uint64_t id)
|
||||
* Start and then stop the MMP threads to ensure the startup and shutdown code
|
||||
* works properly. Actual protection and property-related code tested via ZTS.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_mmp_enable_disable(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
ztest_shared_opts_t *zo = &ztest_opts;
|
||||
spa_t *spa = ztest_spa;
|
||||
|
||||
@ -3044,10 +3045,10 @@ ztest_mmp_enable_disable(ztest_ds_t *zd, uint64_t id)
|
||||
spa_config_exit(spa, SCL_CONFIG, FTAG);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_spa_upgrade(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
spa_t *spa;
|
||||
uint64_t initial_version = SPA_VERSION_INITIAL;
|
||||
uint64_t version, newversion;
|
||||
@ -3164,10 +3165,10 @@ ztest_spa_discard_checkpoint(spa_t *spa)
|
||||
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_spa_checkpoint_create_discard(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
spa_t *spa = ztest_spa;
|
||||
|
||||
mutex_enter(&ztest_checkpoint_lock);
|
||||
@ -3208,10 +3209,10 @@ spa_num_top_vdevs(spa_t *spa)
|
||||
/*
|
||||
* Verify that vdev_add() works as expected.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_vdev_add_remove(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
ztest_shared_t *zs = ztest_shared;
|
||||
spa_t *spa = ztest_spa;
|
||||
uint64_t leaves;
|
||||
@ -3298,10 +3299,10 @@ ztest_vdev_add_remove(ztest_ds_t *zd, uint64_t id)
|
||||
mutex_exit(&ztest_vdev_lock);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_vdev_class_add(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
ztest_shared_t *zs = ztest_shared;
|
||||
spa_t *spa = ztest_spa;
|
||||
uint64_t leaves;
|
||||
@ -3379,10 +3380,10 @@ ztest_vdev_class_add(ztest_ds_t *zd, uint64_t id)
|
||||
/*
|
||||
* Verify that adding/removing aux devices (l2arc, hot spare) works as expected.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_vdev_aux_add_remove(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
ztest_shared_t *zs = ztest_shared;
|
||||
spa_t *spa = ztest_spa;
|
||||
vdev_t *rvd = spa->spa_root_vdev;
|
||||
@ -3491,10 +3492,10 @@ ztest_vdev_aux_add_remove(ztest_ds_t *zd, uint64_t id)
|
||||
/*
|
||||
* split a pool if it has mirror tlvdevs
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_split_pool(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
ztest_shared_t *zs = ztest_shared;
|
||||
spa_t *spa = ztest_spa;
|
||||
vdev_t *rvd = spa->spa_root_vdev;
|
||||
@ -3586,10 +3587,10 @@ ztest_split_pool(ztest_ds_t *zd, uint64_t id)
|
||||
/*
|
||||
* Verify that we can attach and detach devices.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_vdev_attach_detach(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
ztest_shared_t *zs = ztest_shared;
|
||||
spa_t *spa = ztest_spa;
|
||||
spa_aux_vdev_t *sav = &spa->spa_spares;
|
||||
@ -3829,10 +3830,10 @@ ztest_vdev_attach_detach(ztest_ds_t *zd, uint64_t id)
|
||||
umem_free(newpath, MAXPATHLEN);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_device_removal(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
spa_t *spa = ztest_spa;
|
||||
vdev_t *vd;
|
||||
uint64_t guid;
|
||||
@ -3922,10 +3923,10 @@ grow_vdev(vdev_t *vd, void *arg)
|
||||
/*
|
||||
* Callback function which expands a given vdev by calling vdev_online().
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static vdev_t *
|
||||
online_vdev(vdev_t *vd, void *arg)
|
||||
{
|
||||
(void) arg;
|
||||
spa_t *spa = vd->vdev_spa;
|
||||
vdev_t *tvd = vd->vdev_top;
|
||||
uint64_t guid = vd->vdev_guid;
|
||||
@ -4006,10 +4007,10 @@ vdev_walk_tree(vdev_t *vd, vdev_t *(*func)(vdev_t *, void *), void *arg)
|
||||
/*
|
||||
* Verify that dynamic LUN growth works as expected.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_vdev_LUN_growth(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
spa_t *spa = ztest_spa;
|
||||
vdev_t *vd, *tvd;
|
||||
metaslab_class_t *mc;
|
||||
@ -4161,10 +4162,11 @@ ztest_vdev_LUN_growth(ztest_ds_t *zd, uint64_t id)
|
||||
/*
|
||||
* Verify that dmu_objset_{create,destroy,open,close} work as expected.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
ztest_objset_create_cb(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx)
|
||||
{
|
||||
(void) arg, (void) cr;
|
||||
|
||||
/*
|
||||
* Create the objects common to all ztest datasets.
|
||||
*/
|
||||
@ -4241,10 +4243,10 @@ ztest_dataset_create(char *dsname)
|
||||
ZFS_SYNC_ALWAYS, B_FALSE));
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
ztest_objset_destroy_cb(const char *name, void *arg)
|
||||
{
|
||||
(void) arg;
|
||||
objset_t *os;
|
||||
dmu_object_info_t doi;
|
||||
int error;
|
||||
@ -4317,10 +4319,10 @@ ztest_snapshot_destroy(char *osname, uint64_t id)
|
||||
return (B_TRUE);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_dmu_objset_create_destroy(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd;
|
||||
ztest_ds_t *zdtmp;
|
||||
int iters;
|
||||
int error;
|
||||
@ -4642,6 +4644,7 @@ ztest_dmu_object_alloc_free(ztest_ds_t *zd, uint64_t id)
|
||||
void
|
||||
ztest_dmu_object_next_chunk(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) id;
|
||||
objset_t *os = zd->zd_os;
|
||||
int dnodes_per_chunk = 1 << dmu_object_alloc_chunk_shift;
|
||||
uint64_t object;
|
||||
@ -5188,10 +5191,10 @@ ztest_dmu_read_write_zcopy(ztest_ds_t *zd, uint64_t id)
|
||||
umem_free(od, size);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_dmu_write_parallel(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) id;
|
||||
ztest_od_t *od;
|
||||
|
||||
od = umem_alloc(sizeof (ztest_od_t), UMEM_NOFAIL);
|
||||
@ -5450,10 +5453,10 @@ ztest_fzap(ztest_ds_t *zd, uint64_t id)
|
||||
umem_free(od, sizeof (ztest_od_t));
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_zap_parallel(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) id;
|
||||
objset_t *os = zd->zd_os;
|
||||
ztest_od_t *od;
|
||||
uint64_t txg, object, count, wsize, wc, zl_wsize, zl_wc;
|
||||
@ -5785,10 +5788,10 @@ ztest_dmu_commit_callbacks(ztest_ds_t *zd, uint64_t id)
|
||||
* are consistent what was stored in the block tag when it was created,
|
||||
* and that its unused bonus buffer space has not been overwritten.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_verify_dnode_bt(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) id;
|
||||
objset_t *os = zd->zd_os;
|
||||
uint64_t obj;
|
||||
int err = 0;
|
||||
@ -5820,21 +5823,20 @@ ztest_verify_dnode_bt(ztest_ds_t *zd, uint64_t id)
|
||||
}
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_dsl_prop_get_set(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) id;
|
||||
zfs_prop_t proplist[] = {
|
||||
ZFS_PROP_CHECKSUM,
|
||||
ZFS_PROP_COMPRESSION,
|
||||
ZFS_PROP_COPIES,
|
||||
ZFS_PROP_DEDUP
|
||||
};
|
||||
int p;
|
||||
|
||||
(void) pthread_rwlock_rdlock(&ztest_name_lock);
|
||||
|
||||
for (p = 0; p < sizeof (proplist) / sizeof (proplist[0]); p++)
|
||||
for (int p = 0; p < sizeof (proplist) / sizeof (proplist[0]); p++)
|
||||
(void) ztest_dsl_prop_set_uint64(zd->zd_name, proplist[p],
|
||||
ztest_random_dsl_prop(proplist[p]), (int)ztest_random(2));
|
||||
|
||||
@ -5844,10 +5846,10 @@ ztest_dsl_prop_get_set(ztest_ds_t *zd, uint64_t id)
|
||||
(void) pthread_rwlock_unlock(&ztest_name_lock);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_spa_prop_get_set(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
nvlist_t *props = NULL;
|
||||
|
||||
(void) pthread_rwlock_rdlock(&ztest_name_lock);
|
||||
@ -6008,10 +6010,10 @@ ztest_dmu_snapshot_hold(ztest_ds_t *zd, uint64_t id)
|
||||
/*
|
||||
* Inject random faults into the on-disk data.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_fault_inject(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
ztest_shared_t *zs = ztest_shared;
|
||||
spa_t *spa = ztest_spa;
|
||||
int fd;
|
||||
@ -6324,10 +6326,10 @@ ztest_scrub_impl(spa_t *spa)
|
||||
/*
|
||||
* Scrub the pool.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_scrub(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
spa_t *spa = ztest_spa;
|
||||
int error;
|
||||
|
||||
@ -6352,10 +6354,10 @@ ztest_scrub(ztest_ds_t *zd, uint64_t id)
|
||||
/*
|
||||
* Change the guid for the pool.
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_reguid(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
spa_t *spa = ztest_spa;
|
||||
uint64_t orig, load;
|
||||
int error;
|
||||
@ -6385,6 +6387,7 @@ ztest_reguid(ztest_ds_t *zd, uint64_t id)
|
||||
void
|
||||
ztest_fletcher(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
hrtime_t end = gethrtime() + NANOSEC;
|
||||
|
||||
while (gethrtime() <= end) {
|
||||
@ -6454,6 +6457,7 @@ ztest_fletcher(ztest_ds_t *zd, uint64_t id)
|
||||
void
|
||||
ztest_fletcher_incr(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
void *buf;
|
||||
size_t size;
|
||||
int *ptr;
|
||||
@ -6657,10 +6661,10 @@ ztest_random_concrete_vdev_leaf(vdev_t *vd)
|
||||
return (ztest_random_concrete_vdev_leaf(eligible[child_no]));
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_initialize(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
spa_t *spa = ztest_spa;
|
||||
int error = 0;
|
||||
|
||||
@ -6729,10 +6733,10 @@ ztest_initialize(ztest_ds_t *zd, uint64_t id)
|
||||
mutex_exit(&ztest_vdev_lock);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
ztest_trim(ztest_ds_t *zd, uint64_t id)
|
||||
{
|
||||
(void) zd, (void) id;
|
||||
spa_t *spa = ztest_spa;
|
||||
int error = 0;
|
||||
|
||||
@ -7246,10 +7250,10 @@ ztest_dataset_close(int d)
|
||||
ztest_zd_fini(zd);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
ztest_replay_zil_cb(const char *name, void *arg)
|
||||
{
|
||||
(void) arg;
|
||||
objset_t *os;
|
||||
ztest_ds_t *zdtmp;
|
||||
|
||||
@ -7371,7 +7375,7 @@ ztest_freeze(void)
|
||||
}
|
||||
|
||||
static void
|
||||
ztest_import_impl(ztest_shared_t *zs)
|
||||
ztest_import_impl(void)
|
||||
{
|
||||
importargs_t args = { 0 };
|
||||
nvlist_t *cfg = NULL;
|
||||
@ -7404,7 +7408,7 @@ ztest_import(ztest_shared_t *zs)
|
||||
|
||||
kernel_init(SPA_MODE_READ | SPA_MODE_WRITE);
|
||||
|
||||
ztest_import_impl(zs);
|
||||
ztest_import_impl();
|
||||
|
||||
VERIFY0(spa_open(ztest_opts.zo_pool, &spa, FTAG));
|
||||
zs->zs_metaslab_sz =
|
||||
@ -7470,7 +7474,7 @@ ztest_run(ztest_shared_t *zs)
|
||||
error = spa_open(ztest_opts.zo_pool, &spa, FTAG);
|
||||
if (error) {
|
||||
VERIFY3S(error, ==, ENOENT);
|
||||
ztest_import_impl(zs);
|
||||
ztest_import_impl();
|
||||
VERIFY0(spa_open(ztest_opts.zo_pool, &spa, FTAG));
|
||||
zs->zs_metaslab_sz =
|
||||
1ULL << spa->spa_root_vdev->vdev_child[0]->vdev_ms_shift;
|
||||
|
@ -1,3 +1,5 @@
|
||||
include $(top_srcdir)/config/Shellcheck.am
|
||||
|
||||
dist_bin_SCRIPTS = zvol_wait
|
||||
|
||||
SHELLCHECK_OPTS = --enable=all
|
||||
|
8
sys/contrib/openzfs/config/always-parallel.m4
Normal file
8
sys/contrib/openzfs/config/always-parallel.m4
Normal file
@ -0,0 +1,8 @@
|
||||
dnl #
|
||||
dnl # Check if GNU parallel is available.
|
||||
dnl #
|
||||
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_PARALLEL], [
|
||||
AC_CHECK_PROG([PARALLEL], [parallel], [yes])
|
||||
|
||||
AM_CONDITIONAL([HAVE_PARALLEL], [test "x$PARALLEL" = "xyes"])
|
||||
])
|
@ -1,7 +1,6 @@
|
||||
dnl #
|
||||
dnl # The majority of the python scripts are written to be compatible
|
||||
dnl # with Python 2.6 and Python 3.4. Therefore, they may be installed
|
||||
dnl # and used with either interpreter. This option is intended to
|
||||
dnl # with Python 3.6. This option is intended to
|
||||
dnl # to provide a method to specify the default system version, and
|
||||
dnl # set the PYTHON environment variable accordingly.
|
||||
dnl #
|
||||
@ -13,9 +12,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_PYTHON], [
|
||||
[with_python=check])
|
||||
|
||||
AS_CASE([$with_python],
|
||||
[check], [AC_CHECK_PROGS([PYTHON], [python3 python2], [:])],
|
||||
[2*], [PYTHON="python${with_python}"],
|
||||
[*python2*], [PYTHON="${with_python}"],
|
||||
[check], [AC_CHECK_PROGS([PYTHON], [python3], [:])],
|
||||
[3*], [PYTHON="python${with_python}"],
|
||||
[*python3*], [PYTHON="${with_python}"],
|
||||
[no], [PYTHON=":"],
|
||||
@ -23,8 +20,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_PYTHON], [
|
||||
)
|
||||
|
||||
dnl #
|
||||
dnl # Minimum supported Python versions for utilities:
|
||||
dnl # Python 2.6 or Python 3.4
|
||||
dnl # Minimum supported Python versions for utilities: Python 3.6
|
||||
dnl #
|
||||
AM_PATH_PYTHON([], [], [:])
|
||||
AS_IF([test -z "$PYTHON_VERSION"], [
|
||||
@ -33,25 +29,16 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_PYTHON], [
|
||||
PYTHON_MINOR=${PYTHON_VERSION#*\.}
|
||||
|
||||
AS_CASE([$PYTHON_VERSION],
|
||||
[2.*], [
|
||||
AS_IF([test $PYTHON_MINOR -lt 6],
|
||||
[AC_MSG_ERROR("Python >= 2.6 is required")])
|
||||
],
|
||||
[3.*], [
|
||||
AS_IF([test $PYTHON_MINOR -lt 4],
|
||||
[AC_MSG_ERROR("Python >= 3.4 is required")])
|
||||
AS_IF([test $PYTHON_MINOR -lt 6],
|
||||
[AC_MSG_ERROR("Python >= 3.6 is required")])
|
||||
],
|
||||
[:|2|3], [],
|
||||
[PYTHON_VERSION=3]
|
||||
)
|
||||
|
||||
AM_CONDITIONAL([USING_PYTHON], [test "$PYTHON" != :])
|
||||
AM_CONDITIONAL([USING_PYTHON_2], [test "x${PYTHON_VERSION%%\.*}" = x2])
|
||||
AM_CONDITIONAL([USING_PYTHON_3], [test "x${PYTHON_VERSION%%\.*}" = x3])
|
||||
|
||||
AM_COND_IF([USING_PYTHON_2],
|
||||
[AC_SUBST([PYTHON_SHEBANG], [python2])],
|
||||
[AC_SUBST([PYTHON_SHEBANG], [python3])])
|
||||
AC_SUBST([PYTHON_SHEBANG], [python3])
|
||||
|
||||
dnl #
|
||||
dnl # Request that packages be built for a specific Python version.
|
||||
|
@ -18,7 +18,7 @@ AC_DEFUN([ZFS_AC_PYTHON_MODULE], [
|
||||
])
|
||||
|
||||
dnl #
|
||||
dnl # Determines if pyzfs can be built, requires Python 2.7 or later.
|
||||
dnl # Determines if pyzfs can be built, requires Python 3.6 or later.
|
||||
dnl #
|
||||
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_PYZFS], [
|
||||
AC_ARG_ENABLE([pyzfs],
|
||||
@ -62,12 +62,11 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_PYZFS], [
|
||||
])
|
||||
|
||||
dnl #
|
||||
dnl # Require python-devel libraries
|
||||
dnl # Require python3-devel libraries
|
||||
dnl #
|
||||
AS_IF([test "x$enable_pyzfs" = xcheck -o "x$enable_pyzfs" = xyes], [
|
||||
AS_CASE([$PYTHON_VERSION],
|
||||
[3.*], [PYTHON_REQUIRED_VERSION=">= '3.4.0'"],
|
||||
[2.*], [PYTHON_REQUIRED_VERSION=">= '2.7.0'"],
|
||||
[3.*], [PYTHON_REQUIRED_VERSION=">= '3.6.0'"],
|
||||
[AC_MSG_ERROR("Python $PYTHON_VERSION unknown")]
|
||||
)
|
||||
|
||||
|
@ -224,6 +224,7 @@ CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
|
||||
# Ignore tmp and tests themselves
|
||||
CODE_COVERAGE_IGNORE_PATTERN ?= "/tmp/*" "*/tests/*"
|
||||
CODE_COVERAGE_IGNORE_PATTERN += "*/module/zstd/lib/*"
|
||||
CODE_COVERAGE_IGNORE_PATTERN += "*/module/zfs/lz4.c"
|
||||
|
||||
GITIGNOREFILES ?=
|
||||
GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
|
||||
|
@ -32,7 +32,7 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBFETCH], [
|
||||
have_libfetch=1
|
||||
LIBFETCH_IS_FETCH=1
|
||||
LIBFETCH_DYNAMIC=1
|
||||
LIBFETCH_SONAME='"libfetch.so.6"'
|
||||
LIBFETCH_SONAME="libfetch.so.6"
|
||||
LIBFETCH_LIBS="-ldl"
|
||||
AC_MSG_RESULT([fetch(3)])
|
||||
], [])
|
||||
@ -45,7 +45,7 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBFETCH], [
|
||||
LIBFETCH_IS_LIBCURL=1
|
||||
if test "$(curl-config --built-shared)" = "yes"; then
|
||||
LIBFETCH_DYNAMIC=1
|
||||
LIBFETCH_SONAME='"libcurl.so.4"'
|
||||
LIBFETCH_SONAME="libcurl.so.4"
|
||||
LIBFETCH_LIBS="-ldl"
|
||||
AC_MSG_RESULT([libcurl])
|
||||
else
|
||||
@ -67,5 +67,5 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBFETCH], [
|
||||
AC_DEFINE_UNQUOTED([LIBFETCH_IS_FETCH], [$LIBFETCH_IS_FETCH], [libfetch is fetch(3)])
|
||||
AC_DEFINE_UNQUOTED([LIBFETCH_IS_LIBCURL], [$LIBFETCH_IS_LIBCURL], [libfetch is libcurl])
|
||||
AC_DEFINE_UNQUOTED([LIBFETCH_DYNAMIC], [$LIBFETCH_DYNAMIC], [whether the chosen libfetch is to be loaded at run-time])
|
||||
AC_DEFINE_UNQUOTED([LIBFETCH_SONAME], [$LIBFETCH_SONAME], [soname of chosen libfetch])
|
||||
AC_DEFINE_UNQUOTED([LIBFETCH_SONAME], ["$LIBFETCH_SONAME"], [soname of chosen libfetch])
|
||||
])
|
||||
|
@ -226,6 +226,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [
|
||||
ZFS_AC_CONFIG_ALWAYS_SED
|
||||
ZFS_AC_CONFIG_ALWAYS_CPPCHECK
|
||||
ZFS_AC_CONFIG_ALWAYS_SHELLCHECK
|
||||
ZFS_AC_CONFIG_ALWAYS_PARALLEL
|
||||
])
|
||||
|
||||
AC_DEFUN([ZFS_AC_CONFIG], [
|
||||
|
@ -213,6 +213,7 @@ AC_CONFIG_FILES([
|
||||
tests/zfs-tests/cmd/file_trunc/Makefile
|
||||
tests/zfs-tests/cmd/file_write/Makefile
|
||||
tests/zfs-tests/cmd/get_diff/Makefile
|
||||
tests/zfs-tests/cmd/getversion/Makefile
|
||||
tests/zfs-tests/cmd/largest_file/Makefile
|
||||
tests/zfs-tests/cmd/libzfs_input_check/Makefile
|
||||
tests/zfs-tests/cmd/mkbusy/Makefile
|
||||
@ -388,6 +389,7 @@ AC_CONFIG_FILES([
|
||||
tests/zfs-tests/tests/functional/snapshot/Makefile
|
||||
tests/zfs-tests/tests/functional/snapused/Makefile
|
||||
tests/zfs-tests/tests/functional/sparse/Makefile
|
||||
tests/zfs-tests/tests/functional/stat/Makefile
|
||||
tests/zfs-tests/tests/functional/suid/Makefile
|
||||
tests/zfs-tests/tests/functional/threadsappend/Makefile
|
||||
tests/zfs-tests/tests/functional/tmpfile/Makefile
|
||||
|
@ -61,7 +61,7 @@ install() {
|
||||
dracut_install /usr/lib*/gcc/**/libgcc_s.so*
|
||||
fi
|
||||
# shellcheck disable=SC2050
|
||||
if [ "@LIBFETCH_DYNAMIC@" != 0 ]; then
|
||||
if [ @LIBFETCH_DYNAMIC@ -gt 0 ]; then
|
||||
for d in $libdirs; do
|
||||
[ -e "$d/@LIBFETCH_SONAME@" ] && dracut_install "$d/@LIBFETCH_SONAME@"
|
||||
done
|
||||
|
@ -45,7 +45,7 @@ if [ "$(zpool list -H -o feature@encryption "${BOOTFS%%/*}")" = 'active' ]; then
|
||||
case "${KEYLOCATION%%://*}" in
|
||||
prompt)
|
||||
for _ in 1 2 3; do
|
||||
systemd-ask-password "Encrypted ZFS password for ${BOOTFS}" --no-tty | zfs load-key "${ENCRYPTIONROOT}" && break
|
||||
systemd-ask-password --no-tty "Encrypted ZFS password for ${BOOTFS}" | zfs load-key "${ENCRYPTIONROOT}" && break
|
||||
done
|
||||
;;
|
||||
http*)
|
||||
|
@ -30,7 +30,7 @@ find /lib/ -type f -name "libgcc_s.so.[1-9]" | while read -r libgcc; do
|
||||
done
|
||||
|
||||
# shellcheck disable=SC2050
|
||||
if [ "@LIBFETCH_DYNAMIC@" != 0 ]; then
|
||||
if [ @LIBFETCH_DYNAMIC@ -gt 0 ]; then
|
||||
find /lib/ -name "@LIBFETCH_SONAME@" | while read -r libfetch; do
|
||||
copy_exec "$libfetch"
|
||||
done
|
||||
|
@ -421,7 +421,7 @@ decrypt_fs()
|
||||
elif [ -e /run/systemd/system ]; then
|
||||
echo "systemd-ask-password" > /run/zfs_console_askpwd_cmd
|
||||
for _ in 1 2 3; do
|
||||
systemd-ask-password "Encrypted ZFS password for ${ENCRYPTIONROOT}" --no-tty | \
|
||||
systemd-ask-password --no-tty "Encrypted ZFS password for ${ENCRYPTIONROOT}" | \
|
||||
$ZFS load-key "${ENCRYPTIONROOT}" && break
|
||||
done
|
||||
|
||||
|
@ -219,6 +219,8 @@ pw_clear(pam_handle_t *pamh)
|
||||
static void
|
||||
destroy_pw(pam_handle_t *pamh, void *data, int errcode)
|
||||
{
|
||||
(void) pamh, (void) errcode;
|
||||
|
||||
if (data != NULL) {
|
||||
pw_free((pw_password_t *)data);
|
||||
}
|
||||
@ -638,6 +640,8 @@ PAM_EXTERN int
|
||||
pam_sm_authenticate(pam_handle_t *pamh, int flags,
|
||||
int argc, const char **argv)
|
||||
{
|
||||
(void) flags, (void) argc, (void) argv;
|
||||
|
||||
if (pw_fetch_lazy(pamh) == NULL) {
|
||||
return (PAM_AUTH_ERR);
|
||||
}
|
||||
@ -650,6 +654,7 @@ PAM_EXTERN int
|
||||
pam_sm_setcred(pam_handle_t *pamh, int flags,
|
||||
int argc, const char **argv)
|
||||
{
|
||||
(void) pamh, (void) flags, (void) argc, (void) argv;
|
||||
return (PAM_SUCCESS);
|
||||
}
|
||||
|
||||
@ -737,6 +742,8 @@ PAM_EXTERN int
|
||||
pam_sm_open_session(pam_handle_t *pamh, int flags,
|
||||
int argc, const char **argv)
|
||||
{
|
||||
(void) flags;
|
||||
|
||||
if (geteuid() != 0) {
|
||||
pam_syslog(pamh, LOG_ERR,
|
||||
"Cannot zfs_mount when not being root.");
|
||||
@ -791,6 +798,8 @@ PAM_EXTERN int
|
||||
pam_sm_close_session(pam_handle_t *pamh, int flags,
|
||||
int argc, const char **argv)
|
||||
{
|
||||
(void) flags;
|
||||
|
||||
if (geteuid() != 0) {
|
||||
pam_syslog(pamh, LOG_ERR,
|
||||
"Cannot zfs_mount when not being root.");
|
||||
|
@ -29,13 +29,12 @@ setup(
|
||||
"Development Status :: 4 - Beta",
|
||||
"Intended Audience :: Developers",
|
||||
"License :: OSI Approved :: Apache Software License",
|
||||
"Programming Language :: Python :: 2",
|
||||
"Programming Language :: Python :: 2.7",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.4",
|
||||
"Programming Language :: Python :: 3.5",
|
||||
"Programming Language :: Python :: 3.6",
|
||||
"Programming Language :: Python :: 3.7",
|
||||
"Programming Language :: Python :: 3.8",
|
||||
"Programming Language :: Python :: 3.9",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Topic :: System :: Filesystems",
|
||||
"Topic :: Software Development :: Libraries",
|
||||
],
|
||||
@ -53,7 +52,7 @@ setup(
|
||||
setup_requires=[
|
||||
"cffi",
|
||||
],
|
||||
python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<4',
|
||||
python_requires='>=3.6,<4',
|
||||
zip_safe=False,
|
||||
test_suite="libzfs_core.test",
|
||||
)
|
||||
|
@ -1,9 +1,10 @@
|
||||
include $(top_srcdir)/config/Shellcheck.am
|
||||
|
||||
SUBDIRS = zfs sudoers.d
|
||||
SHELLCHECKDIRS = zfs
|
||||
SHELLCHECKDIRS = default $(ZFS_INIT_SYSV) zfs
|
||||
SHELLCHECK_OPTS = --enable=all
|
||||
|
||||
if BUILD_LINUX
|
||||
SHELLCHECKDIRS += default $(ZFS_INIT_SYSV)
|
||||
SUBDIRS += default $(ZFS_INIT_SYSTEMD) $(ZFS_INIT_SYSV) $(ZFS_MODULE_LOAD)
|
||||
endif
|
||||
DIST_SUBDIRS = default init.d zfs systemd modules-load.d sudoers.d
|
||||
|
@ -5,4 +5,5 @@ initconf_SCRIPTS = zfs
|
||||
|
||||
SUBSTFILES += $(initconf_SCRIPTS)
|
||||
|
||||
SHELLCHECK_SHELL = sh
|
||||
SHELLCHECK_SHELL = dash
|
||||
SHELLCHECK_OPTS = --enable=all
|
||||
|
@ -1,4 +1,5 @@
|
||||
# OpenZFS userland configuration.
|
||||
# shellcheck disable=SC2154
|
||||
|
||||
# NOTE: This file is intended for sysv init and initramfs.
|
||||
# Changing some of these settings may not make any difference on
|
||||
|
@ -7,4 +7,5 @@ init_SCRIPTS = zfs-import zfs-load-key zfs-mount zfs-share zfs-zed
|
||||
|
||||
SUBSTFILES += $(init_SCRIPTS)
|
||||
|
||||
SHELLCHECK_SHELL = dash # local variables
|
||||
SHELLCHECK_SHELL = dash
|
||||
SHELLCHECK_OPTS = --enable=all
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!@DEFAULT_INIT_SHELL@
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# zfs-import This script will import ZFS pools
|
||||
#
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!@DEFAULT_INIT_SHELL@
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# zfs-load-key This script will load/unload the zfs filesystems keys.
|
||||
#
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!@DEFAULT_INIT_SHELL@
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# zfs-mount This script will mount/umount the zfs filesystems.
|
||||
#
|
||||
@ -68,7 +69,7 @@ do_mount()
|
||||
check_boolean "$DO_OVERLAY_MOUNTS" && overlay=O
|
||||
|
||||
zfs_action "Mounting ZFS filesystem(s)" \
|
||||
"$ZFS" mount -a$verbose$overlay "$MOUNT_EXTRA_OPTIONS"
|
||||
"$ZFS" mount "-a$verbose$overlay" "$MOUNT_EXTRA_OPTIONS"
|
||||
|
||||
# Require each volume/filesystem to have 'noauto' and no fsck
|
||||
# option. This shouldn't really be necessary, as long as one
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!@DEFAULT_INIT_SHELL@
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# zfs-share This script will network share zfs filesystems and volumes.
|
||||
#
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!@DEFAULT_INIT_SHELL@
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# zfs-zed
|
||||
#
|
||||
|
@ -1,3 +1,4 @@
|
||||
*.service
|
||||
*.target
|
||||
*.preset
|
||||
*.timer
|
||||
|
@ -12,7 +12,10 @@ systemdunit_DATA = \
|
||||
zfs-volume-wait.service \
|
||||
zfs-import.target \
|
||||
zfs-volumes.target \
|
||||
zfs.target
|
||||
zfs.target \
|
||||
zfs-scrub-monthly@.timer \
|
||||
zfs-scrub-weekly@.timer \
|
||||
zfs-scrub@.service
|
||||
|
||||
SUBSTFILES += $(systemdpreset_DATA) $(systemdunit_DATA)
|
||||
|
||||
|
@ -0,0 +1,12 @@
|
||||
[Unit]
|
||||
Description=Monthly zpool scrub timer for %i
|
||||
Documentation=man:zpool-scrub(8)
|
||||
|
||||
[Timer]
|
||||
OnCalendar=monthly
|
||||
Persistent=true
|
||||
RandomizedDelaySec=1h
|
||||
Unit=zfs-scrub@%i.service
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
@ -0,0 +1,12 @@
|
||||
[Unit]
|
||||
Description=Weekly zpool scrub timer for %i
|
||||
Documentation=man:zpool-scrub(8)
|
||||
|
||||
[Timer]
|
||||
OnCalendar=weekly
|
||||
Persistent=true
|
||||
RandomizedDelaySec=1h
|
||||
Unit=zfs-scrub@%i.service
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
14
sys/contrib/openzfs/etc/systemd/system/zfs-scrub@.service.in
Normal file
14
sys/contrib/openzfs/etc/systemd/system/zfs-scrub@.service.in
Normal file
@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=zpool scrub on %i
|
||||
Documentation=man:zpool-scrub(8)
|
||||
Requires=zfs.target
|
||||
After=zfs.target
|
||||
ConditionACPower=true
|
||||
ConditionPathIsDirectory=/sys/module/zfs
|
||||
|
||||
[Service]
|
||||
ExecStart=/bin/sh -c '\
|
||||
if @sbindir@/zpool status %i | grep "scrub in progress"; then\
|
||||
exec @sbindir@/zpool wait -t scrub %i;\
|
||||
else exec @sbindir@/zpool scrub -w %i; fi'
|
||||
ExecStop=-/bin/sh -c '@sbindir@/zpool scrub -p %i 2>/dev/null || true'
|
@ -15,4 +15,5 @@ pkgsysconf_SCRIPTS = \
|
||||
|
||||
SUBSTFILES += $(pkgsysconf_SCRIPTS)
|
||||
|
||||
SHELLCHECK_SHELL = dash # local variables
|
||||
SHELLCHECK_OPTS = --enable=all
|
||||
SHELLCHECK_SHELL = dash
|
||||
|
@ -46,6 +46,7 @@ elif type success > /dev/null 2>&1 ; then
|
||||
|
||||
zfs_log_begin_msg() { printf "%s" "$1 "; }
|
||||
zfs_log_end_msg() {
|
||||
# shellcheck disable=SC2154
|
||||
zfs_set_ifs "$OLD_IFS"
|
||||
if [ "$1" -eq 0 ]; then
|
||||
success
|
||||
@ -119,12 +120,12 @@ zfs_action()
|
||||
$CMD
|
||||
ret=$?
|
||||
if [ "$ret" -eq 0 ]; then
|
||||
zfs_log_end_msg $ret
|
||||
zfs_log_end_msg "$ret"
|
||||
else
|
||||
zfs_log_failure_msg $ret
|
||||
zfs_log_failure_msg "$ret"
|
||||
fi
|
||||
|
||||
return $ret
|
||||
return "$ret"
|
||||
}
|
||||
|
||||
# Returns
|
||||
|
@ -452,7 +452,7 @@ _LIBZFS_H void zpool_print_unsup_feat(nvlist_t *config);
|
||||
*/
|
||||
struct zfs_cmd;
|
||||
|
||||
_LIBZFS_H const char *zfs_history_event_names[];
|
||||
_LIBZFS_H const char *const zfs_history_event_names[];
|
||||
|
||||
typedef enum {
|
||||
VDEV_NAME_PATH = 1 << 0,
|
||||
|
@ -133,14 +133,14 @@ void spl_dumpstack(void);
|
||||
*/
|
||||
#ifdef NDEBUG
|
||||
|
||||
#define ASSERT(x) ((void)0)
|
||||
#define ASSERT3B(x,y,z) ((void)0)
|
||||
#define ASSERT3S(x,y,z) ((void)0)
|
||||
#define ASSERT3U(x,y,z) ((void)0)
|
||||
#define ASSERT3P(x,y,z) ((void)0)
|
||||
#define ASSERT0(x) ((void)0)
|
||||
#define IMPLY(A, B) ((void)0)
|
||||
#define EQUIV(A, B) ((void)0)
|
||||
#define ASSERT(x) ((void) sizeof (!!(x)))
|
||||
#define ASSERT3B(x,y,z) ((void) sizeof (!!(x)), (void) sizeof (!!(z)))
|
||||
#define ASSERT3S(x,y,z) ((void) sizeof (!!(x)), (void) sizeof (!!(z)))
|
||||
#define ASSERT3U(x,y,z) ((void) sizeof (!!(x)), (void) sizeof (!!(z)))
|
||||
#define ASSERT3P(x,y,z) ((void) sizeof (!!(x)), (void) sizeof (!!(z)))
|
||||
#define ASSERT0(x) ((void) sizeof (!!(x)))
|
||||
#define IMPLY(A, B) ((void) sizeof (!!(A)), (void) sizeof (!!(B)))
|
||||
#define EQUIV(A, B) ((void) sizeof (!!(A)), (void) sizeof (!!(B)))
|
||||
|
||||
/*
|
||||
* Debugging enabled (--enable-debug)
|
||||
|
@ -134,7 +134,6 @@ vn_flush_cached_data(vnode_t *vp, boolean_t sync)
|
||||
/* TODO: This field needs conversion! */
|
||||
#define va_nblocks va_bytes
|
||||
#define va_blksize va_blocksize
|
||||
#define va_seq va_gen
|
||||
|
||||
#define MAXOFFSET_T OFF_MAX
|
||||
#define EXCL 0
|
||||
|
@ -88,11 +88,11 @@ void crypto_mac_final(struct hmac_ctx *ctx, void *out_data,
|
||||
size_t out_data_size);
|
||||
|
||||
int freebsd_crypt_newsession(freebsd_crypt_session_t *sessp,
|
||||
struct zio_crypt_info *, crypto_key_t *);
|
||||
const struct zio_crypt_info *, crypto_key_t *);
|
||||
void freebsd_crypt_freesession(freebsd_crypt_session_t *sessp);
|
||||
|
||||
int freebsd_crypt_uio(boolean_t, freebsd_crypt_session_t *,
|
||||
struct zio_crypt_info *, zfs_uio_t *, crypto_key_t *, uint8_t *,
|
||||
const struct zio_crypt_info *, zfs_uio_t *, crypto_key_t *, uint8_t *,
|
||||
size_t, size_t);
|
||||
|
||||
#endif /* _ZFS_FREEBSD_CRYPTO_H */
|
||||
|
@ -48,7 +48,7 @@
|
||||
#define cond_resched() kern_yield(PRI_USER)
|
||||
|
||||
#define taskq_create_sysdc(a, b, d, e, p, dc, f) \
|
||||
(taskq_create(a, b, maxclsyspri, d, e, f))
|
||||
((void) sizeof (dc), taskq_create(a, b, maxclsyspri, d, e, f))
|
||||
|
||||
#define tsd_create(keyp, destructor) do { \
|
||||
*(keyp) = osd_thread_register((destructor)); \
|
||||
|
@ -175,8 +175,7 @@ extern void zfs_tstamp_update_setup_ext(struct znode *,
|
||||
uint_t, uint64_t [2], uint64_t [2], boolean_t have_tx);
|
||||
extern void zfs_znode_free(struct znode *);
|
||||
|
||||
extern zil_replay_func_t *zfs_replay_vector[TX_MAX_TYPE];
|
||||
extern int zfsfstype;
|
||||
extern zil_replay_func_t *const zfs_replay_vector[TX_MAX_TYPE];
|
||||
|
||||
extern int zfs_znode_parent_and_name(struct znode *zp, struct znode **dzpp,
|
||||
char *buf);
|
||||
|
@ -36,7 +36,8 @@ enum xdr_op {
|
||||
struct xdr_ops;
|
||||
|
||||
typedef struct {
|
||||
struct xdr_ops *x_ops; /* Let caller know xdrmem_create() succeeds */
|
||||
const struct xdr_ops *x_ops;
|
||||
/* Let caller know xdrmem_create() succeeds */
|
||||
caddr_t x_addr; /* Current buffer addr */
|
||||
caddr_t x_addr_end; /* End of the buffer */
|
||||
enum xdr_op x_op; /* Stream direction */
|
||||
|
@ -133,14 +133,14 @@ void spl_dumpstack(void);
|
||||
*/
|
||||
#ifdef NDEBUG
|
||||
|
||||
#define ASSERT(x) ((void)0)
|
||||
#define ASSERT3B(x,y,z) ((void)0)
|
||||
#define ASSERT3S(x,y,z) ((void)0)
|
||||
#define ASSERT3U(x,y,z) ((void)0)
|
||||
#define ASSERT3P(x,y,z) ((void)0)
|
||||
#define ASSERT0(x) ((void)0)
|
||||
#define IMPLY(A, B) ((void)0)
|
||||
#define EQUIV(A, B) ((void)0)
|
||||
#define ASSERT(x) ((void) sizeof (!!(x)))
|
||||
#define ASSERT3B(x,y,z) ((void) sizeof (!!(x)), (void) sizeof (!!(z)))
|
||||
#define ASSERT3S(x,y,z) ((void) sizeof (!!(x)), (void) sizeof (!!(z)))
|
||||
#define ASSERT3U(x,y,z) ((void) sizeof (!!(x)), (void) sizeof (!!(z)))
|
||||
#define ASSERT3P(x,y,z) ((void) sizeof (!!(x)), (void) sizeof (!!(z)))
|
||||
#define ASSERT0(x) ((void) sizeof (!!(x)))
|
||||
#define IMPLY(A, B) ((void) sizeof (!!(A)), (void) sizeof (!!(B)))
|
||||
#define EQUIV(A, B) ((void) sizeof (!!(A)), (void) sizeof (!!(B)))
|
||||
|
||||
/*
|
||||
* Debugging enabled (--enable-debug)
|
||||
|
@ -113,7 +113,6 @@
|
||||
#endif
|
||||
|
||||
/* Missing globals */
|
||||
extern char spl_gitrev[64];
|
||||
extern unsigned long spl_hostid;
|
||||
|
||||
/* Missing misc functions */
|
||||
|
@ -160,7 +160,8 @@ extern taskq_t *taskq_of_curthread(void);
|
||||
#define taskq_create_proc(name, nthreads, pri, min, max, proc, flags) \
|
||||
taskq_create(name, nthreads, pri, min, max, flags)
|
||||
#define taskq_create_sysdc(name, nthreads, min, max, proc, dc, flags) \
|
||||
taskq_create(name, nthreads, maxclsyspri, min, max, flags)
|
||||
((void) sizeof (dc), \
|
||||
taskq_create(name, nthreads, maxclsyspri, min, max, flags))
|
||||
|
||||
int spl_taskq_init(void);
|
||||
void spl_taskq_fini(void);
|
||||
|
@ -173,8 +173,7 @@ extern caddr_t zfs_map_page(page_t *, enum seg_rw);
|
||||
extern void zfs_unmap_page(page_t *, caddr_t);
|
||||
#endif /* HAVE_UIO_RW */
|
||||
|
||||
extern zil_replay_func_t *zfs_replay_vector[TX_MAX_TYPE];
|
||||
extern int zfsfstype;
|
||||
extern zil_replay_func_t *const zfs_replay_vector[TX_MAX_TYPE];
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -99,7 +99,6 @@ extern const struct inode_operations zpl_ops_root;
|
||||
|
||||
extern const struct file_operations zpl_fops_snapdir;
|
||||
extern const struct inode_operations zpl_ops_snapdir;
|
||||
extern const struct dentry_operations zpl_dops_snapdirs;
|
||||
|
||||
extern const struct file_operations zpl_fops_shares;
|
||||
extern const struct inode_operations zpl_ops_shares;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user