2010-08-26 19:28:14 +00:00
|
|
|
# Makefile.in generated by automake 1.11.1 from Makefile.am.
|
|
|
|
# @configure_input@
|
|
|
|
|
|
|
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
|
|
|
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
|
|
|
|
# Inc.
|
|
|
|
# This Makefile.in is free software; the Free Software Foundation
|
|
|
|
# gives unlimited permission to copy and/or distribute it,
|
|
|
|
# with or without modifications, as long as this notice is preserved.
|
|
|
|
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|
|
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
|
|
# PARTICULAR PURPOSE.
|
|
|
|
|
|
|
|
@SET_MAKE@
|
|
|
|
|
|
|
|
VPATH = @srcdir@
|
|
|
|
pkgdatadir = $(datadir)/@PACKAGE@
|
|
|
|
pkgincludedir = $(includedir)/@PACKAGE@
|
|
|
|
pkglibdir = $(libdir)/@PACKAGE@
|
|
|
|
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
|
|
|
install_sh_DATA = $(install_sh) -c -m 644
|
|
|
|
install_sh_PROGRAM = $(install_sh) -c
|
|
|
|
install_sh_SCRIPT = $(install_sh) -c
|
|
|
|
INSTALL_HEADER = $(INSTALL_DATA)
|
|
|
|
transform = $(program_transform_name)
|
|
|
|
NORMAL_INSTALL = :
|
|
|
|
PRE_INSTALL = :
|
|
|
|
POST_INSTALL = :
|
|
|
|
NORMAL_UNINSTALL = :
|
|
|
|
PRE_UNINSTALL = :
|
|
|
|
POST_UNINSTALL = :
|
|
|
|
build_triplet = @build@
|
|
|
|
host_triplet = @host@
|
|
|
|
target_triplet = @target@
|
|
|
|
subdir = scripts
|
2010-09-04 20:26:23 +00:00
|
|
|
DIST_COMMON = $(dist_pkglibexec_SCRIPTS) $(srcdir)/Makefile.am \
|
|
|
|
$(srcdir)/Makefile.in $(srcdir)/common.sh.in
|
2010-08-26 19:28:14 +00:00
|
|
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
|
|
am__aclocal_m4_deps = \
|
|
|
|
$(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
|
|
|
|
$(top_srcdir)/config/kernel-bdev-logical-size.m4 \
|
|
|
|
$(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
|
|
|
|
$(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
|
2010-10-01 17:57:56 +00:00
|
|
|
$(top_srcdir)/config/kernel-bio-failfast.m4 \
|
2010-08-26 19:28:14 +00:00
|
|
|
$(top_srcdir)/config/kernel-bio-rw-syncio.m4 \
|
|
|
|
$(top_srcdir)/config/kernel-blk-end-request.m4 \
|
|
|
|
$(top_srcdir)/config/kernel-blk-fetch-request.m4 \
|
|
|
|
$(top_srcdir)/config/kernel-blk-requeue-request.m4 \
|
|
|
|
$(top_srcdir)/config/kernel-blk-rq-bytes.m4 \
|
|
|
|
$(top_srcdir)/config/kernel-blk-rq-pos.m4 \
|
|
|
|
$(top_srcdir)/config/kernel-blk-rq-sectors.m4 \
|
2011-02-22 22:55:35 +00:00
|
|
|
$(top_srcdir)/config/kernel-blkdev-get-by-path.m4 \
|
2011-02-11 21:46:10 +00:00
|
|
|
$(top_srcdir)/config/kernel-evict-inode.m4 \
|
2010-08-26 19:28:14 +00:00
|
|
|
$(top_srcdir)/config/kernel-fmode-t.m4 \
|
2011-02-11 16:58:55 +00:00
|
|
|
$(top_srcdir)/config/kernel-fsync.m4 \
|
2010-08-26 19:28:14 +00:00
|
|
|
$(top_srcdir)/config/kernel-get-disk-ro.m4 \
|
2011-03-22 16:55:09 +00:00
|
|
|
$(top_srcdir)/config/kernel-insert-inode-locked.m4 \
|
2010-08-26 19:28:14 +00:00
|
|
|
$(top_srcdir)/config/kernel-invalidate-bdev-args.m4 \
|
|
|
|
$(top_srcdir)/config/kernel-kobj-name-len.m4 \
|
|
|
|
$(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \
|
|
|
|
$(top_srcdir)/config/kernel-rq-for-each_segment.m4 \
|
|
|
|
$(top_srcdir)/config/kernel-rq-is_sync.m4 \
|
2011-02-11 00:16:52 +00:00
|
|
|
$(top_srcdir)/config/kernel-xattr-handler.m4 \
|
2010-08-26 19:28:14 +00:00
|
|
|
$(top_srcdir)/config/kernel.m4 \
|
|
|
|
$(top_srcdir)/config/user-arch.m4 \
|
|
|
|
$(top_srcdir)/config/user-frame-larger-than.m4 \
|
|
|
|
$(top_srcdir)/config/user-ioctl.m4 \
|
|
|
|
$(top_srcdir)/config/user-libblkid.m4 \
|
|
|
|
$(top_srcdir)/config/user-libuuid.m4 \
|
|
|
|
$(top_srcdir)/config/user-nptl_guard_within_stack.m4 \
|
2010-12-16 22:26:08 +00:00
|
|
|
$(top_srcdir)/config/user-selinux.m4 \
|
2010-08-26 19:28:14 +00:00
|
|
|
$(top_srcdir)/config/user-zlib.m4 $(top_srcdir)/config/user.m4 \
|
|
|
|
$(top_srcdir)/config/zfs-build.m4 \
|
|
|
|
$(top_srcdir)/config/zfs-meta.m4 $(top_srcdir)/configure.ac
|
|
|
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|
|
|
$(ACLOCAL_M4)
|
|
|
|
mkinstalldirs = $(install_sh) -d
|
|
|
|
CONFIG_HEADER = $(top_builddir)/zfs_config.h
|
|
|
|
CONFIG_CLEAN_FILES = common.sh
|
|
|
|
CONFIG_CLEAN_VPATH_FILES =
|
|
|
|
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
|
|
|
am__vpath_adj = case $$p in \
|
|
|
|
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
|
|
|
*) f=$$p;; \
|
|
|
|
esac;
|
|
|
|
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
|
|
|
|
am__install_max = 40
|
|
|
|
am__nobase_strip_setup = \
|
|
|
|
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
|
|
|
|
am__nobase_strip = \
|
|
|
|
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
|
|
|
|
am__nobase_list = $(am__nobase_strip_setup); \
|
|
|
|
for p in $$list; do echo "$$p $$p"; done | \
|
|
|
|
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
|
|
|
|
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
|
|
|
|
if (++n[$$2] == $(am__install_max)) \
|
|
|
|
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
|
|
|
|
END { for (dir in files) print dir, files[dir] }'
|
|
|
|
am__base_list = \
|
|
|
|
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
|
|
|
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
|
|
|
am__installdirs = "$(DESTDIR)$(pkglibexecdir)"
|
2010-09-04 20:26:23 +00:00
|
|
|
SCRIPTS = $(dist_pkglibexec_SCRIPTS)
|
2010-08-26 19:28:14 +00:00
|
|
|
AM_V_GEN = $(am__v_GEN_$(V))
|
|
|
|
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
|
|
|
|
am__v_GEN_0 = @echo " GEN " $@;
|
|
|
|
AM_V_at = $(am__v_at_$(V))
|
|
|
|
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
|
|
|
|
am__v_at_0 = @
|
|
|
|
SOURCES =
|
|
|
|
DIST_SOURCES =
|
2010-09-04 20:26:23 +00:00
|
|
|
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
|
|
|
html-recursive info-recursive install-data-recursive \
|
|
|
|
install-dvi-recursive install-exec-recursive \
|
|
|
|
install-html-recursive install-info-recursive \
|
|
|
|
install-pdf-recursive install-ps-recursive install-recursive \
|
|
|
|
installcheck-recursive installdirs-recursive pdf-recursive \
|
|
|
|
ps-recursive uninstall-recursive
|
|
|
|
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
|
|
|
distclean-recursive maintainer-clean-recursive
|
|
|
|
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
|
|
|
|
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
|
|
|
|
distdir
|
|
|
|
ETAGS = etags
|
|
|
|
CTAGS = ctags
|
|
|
|
DIST_SUBDIRS = $(SUBDIRS)
|
2010-08-26 19:28:14 +00:00
|
|
|
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
2010-09-04 20:26:23 +00:00
|
|
|
am__relativize = \
|
|
|
|
dir0=`pwd`; \
|
|
|
|
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
|
|
|
|
sed_rest='s,^[^/]*/*,,'; \
|
|
|
|
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
|
|
|
|
sed_butlast='s,/*[^/]*$$,,'; \
|
|
|
|
while test -n "$$dir1"; do \
|
|
|
|
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
|
|
|
|
if test "$$first" != "."; then \
|
|
|
|
if test "$$first" = ".."; then \
|
|
|
|
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
|
|
|
|
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
|
|
|
|
else \
|
|
|
|
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
|
|
|
|
if test "$$first2" = "$$first"; then \
|
|
|
|
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
|
|
|
|
else \
|
|
|
|
dir2="../$$dir2"; \
|
|
|
|
fi; \
|
|
|
|
dir0="$$dir0"/"$$first"; \
|
|
|
|
fi; \
|
|
|
|
fi; \
|
|
|
|
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
|
|
|
|
done; \
|
|
|
|
reldir="$$dir2"
|
2010-08-26 19:28:14 +00:00
|
|
|
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
|
|
|
ACLOCAL = @ACLOCAL@
|
|
|
|
ALIEN = @ALIEN@
|
|
|
|
ALIEN_VERSION = @ALIEN_VERSION@
|
|
|
|
AMTAR = @AMTAR@
|
|
|
|
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
|
|
|
AR = @AR@
|
|
|
|
AUTOCONF = @AUTOCONF@
|
|
|
|
AUTOHEADER = @AUTOHEADER@
|
|
|
|
AUTOMAKE = @AUTOMAKE@
|
|
|
|
AWK = @AWK@
|
|
|
|
CC = @CC@
|
|
|
|
CCAS = @CCAS@
|
|
|
|
CCASDEPMODE = @CCASDEPMODE@
|
|
|
|
CCASFLAGS = @CCASFLAGS@
|
|
|
|
CCDEPMODE = @CCDEPMODE@
|
|
|
|
CFLAGS = @CFLAGS@
|
|
|
|
CPP = @CPP@
|
|
|
|
CPPFLAGS = @CPPFLAGS@
|
|
|
|
CYGPATH_W = @CYGPATH_W@
|
|
|
|
DEBUG_CFLAGS = @DEBUG_CFLAGS@
|
|
|
|
DEBUG_STACKFLAGS = @DEBUG_STACKFLAGS@
|
2011-03-17 22:02:28 +00:00
|
|
|
DEFAULT_INIT_SCRIPT = @DEFAULT_INIT_SCRIPT@
|
2010-08-26 19:28:14 +00:00
|
|
|
DEFAULT_PACKAGE = @DEFAULT_PACKAGE@
|
|
|
|
DEFS = @DEFS@
|
|
|
|
DEPDIR = @DEPDIR@
|
|
|
|
DPKG = @DPKG@
|
|
|
|
DPKGBUILD = @DPKGBUILD@
|
|
|
|
DPKGBUILD_VERSION = @DPKGBUILD_VERSION@
|
|
|
|
DPKG_VERSION = @DPKG_VERSION@
|
|
|
|
DSYMUTIL = @DSYMUTIL@
|
|
|
|
DUMPBIN = @DUMPBIN@
|
|
|
|
ECHO_C = @ECHO_C@
|
|
|
|
ECHO_N = @ECHO_N@
|
|
|
|
ECHO_T = @ECHO_T@
|
|
|
|
EGREP = @EGREP@
|
|
|
|
EXEEXT = @EXEEXT@
|
|
|
|
FGREP = @FGREP@
|
|
|
|
FRAME_LARGER_THAN = @FRAME_LARGER_THAN@
|
|
|
|
GREP = @GREP@
|
|
|
|
HAVE_ALIEN = @HAVE_ALIEN@
|
|
|
|
HAVE_DPKG = @HAVE_DPKG@
|
|
|
|
HAVE_DPKGBUILD = @HAVE_DPKGBUILD@
|
|
|
|
HAVE_RPM = @HAVE_RPM@
|
|
|
|
HAVE_RPMBUILD = @HAVE_RPMBUILD@
|
|
|
|
INSTALL = @INSTALL@
|
|
|
|
INSTALL_DATA = @INSTALL_DATA@
|
|
|
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
|
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
|
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
|
|
|
KERNELCPPFLAGS = @KERNELCPPFLAGS@
|
|
|
|
KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@
|
|
|
|
LD = @LD@
|
|
|
|
LDFLAGS = @LDFLAGS@
|
|
|
|
LIBBLKID = @LIBBLKID@
|
|
|
|
LIBOBJS = @LIBOBJS@
|
|
|
|
LIBS = @LIBS@
|
2010-12-16 22:26:08 +00:00
|
|
|
LIBSELINUX = @LIBSELINUX@
|
2010-08-26 19:28:14 +00:00
|
|
|
LIBTOOL = @LIBTOOL@
|
|
|
|
LIBUUID = @LIBUUID@
|
|
|
|
LINUX = @LINUX@
|
|
|
|
LINUX_OBJ = @LINUX_OBJ@
|
|
|
|
LINUX_SYMBOLS = @LINUX_SYMBOLS@
|
|
|
|
LINUX_VERSION = @LINUX_VERSION@
|
|
|
|
LIPO = @LIPO@
|
|
|
|
LN_S = @LN_S@
|
|
|
|
LTLIBOBJS = @LTLIBOBJS@
|
|
|
|
MAINT = @MAINT@
|
|
|
|
MAKEINFO = @MAKEINFO@
|
|
|
|
MKDIR_P = @MKDIR_P@
|
|
|
|
NM = @NM@
|
|
|
|
NMEDIT = @NMEDIT@
|
|
|
|
OBJDUMP = @OBJDUMP@
|
|
|
|
OBJEXT = @OBJEXT@
|
|
|
|
OTOOL = @OTOOL@
|
|
|
|
OTOOL64 = @OTOOL64@
|
|
|
|
PACKAGE = @PACKAGE@
|
|
|
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
|
|
|
PACKAGE_NAME = @PACKAGE_NAME@
|
|
|
|
PACKAGE_STRING = @PACKAGE_STRING@
|
|
|
|
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
|
|
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
|
|
|
PATH_SEPARATOR = @PATH_SEPARATOR@
|
|
|
|
RANLIB = @RANLIB@
|
|
|
|
RPM = @RPM@
|
|
|
|
RPMBUILD = @RPMBUILD@
|
|
|
|
RPMBUILD_VERSION = @RPMBUILD_VERSION@
|
|
|
|
RPM_VERSION = @RPM_VERSION@
|
|
|
|
SED = @SED@
|
|
|
|
SET_MAKE = @SET_MAKE@
|
|
|
|
SHELL = @SHELL@
|
|
|
|
SPL = @SPL@
|
|
|
|
SPL_OBJ = @SPL_OBJ@
|
|
|
|
SPL_SYMBOLS = @SPL_SYMBOLS@
|
|
|
|
SPL_VERSION = @SPL_VERSION@
|
|
|
|
STRIP = @STRIP@
|
|
|
|
TARGET_ASM_DIR = @TARGET_ASM_DIR@
|
|
|
|
VENDOR = @VENDOR@
|
|
|
|
VERSION = @VERSION@
|
|
|
|
ZFS_CONFIG = @ZFS_CONFIG@
|
|
|
|
ZFS_META_ALIAS = @ZFS_META_ALIAS@
|
|
|
|
ZFS_META_AUTHOR = @ZFS_META_AUTHOR@
|
|
|
|
ZFS_META_DATA = @ZFS_META_DATA@
|
|
|
|
ZFS_META_LICENSE = @ZFS_META_LICENSE@
|
|
|
|
ZFS_META_LT_AGE = @ZFS_META_LT_AGE@
|
|
|
|
ZFS_META_LT_CURRENT = @ZFS_META_LT_CURRENT@
|
|
|
|
ZFS_META_LT_REVISION = @ZFS_META_LT_REVISION@
|
|
|
|
ZFS_META_NAME = @ZFS_META_NAME@
|
|
|
|
ZFS_META_RELEASE = @ZFS_META_RELEASE@
|
|
|
|
ZFS_META_VERSION = @ZFS_META_VERSION@
|
|
|
|
ZLIB = @ZLIB@
|
|
|
|
abs_builddir = @abs_builddir@
|
|
|
|
abs_srcdir = @abs_srcdir@
|
|
|
|
abs_top_builddir = @abs_top_builddir@
|
|
|
|
abs_top_srcdir = @abs_top_srcdir@
|
|
|
|
ac_ct_CC = @ac_ct_CC@
|
|
|
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
|
|
|
am__include = @am__include@
|
|
|
|
am__leading_dot = @am__leading_dot@
|
|
|
|
am__quote = @am__quote@
|
|
|
|
am__tar = @am__tar@
|
|
|
|
am__untar = @am__untar@
|
|
|
|
bindir = @bindir@
|
|
|
|
build = @build@
|
|
|
|
build_alias = @build_alias@
|
|
|
|
build_cpu = @build_cpu@
|
|
|
|
build_os = @build_os@
|
|
|
|
build_vendor = @build_vendor@
|
|
|
|
builddir = @builddir@
|
|
|
|
datadir = @datadir@
|
|
|
|
datarootdir = @datarootdir@
|
|
|
|
docdir = @docdir@
|
|
|
|
dvidir = @dvidir@
|
|
|
|
exec_prefix = @exec_prefix@
|
|
|
|
host = @host@
|
|
|
|
host_alias = @host_alias@
|
|
|
|
host_cpu = @host_cpu@
|
|
|
|
host_os = @host_os@
|
|
|
|
host_vendor = @host_vendor@
|
|
|
|
htmldir = @htmldir@
|
|
|
|
includedir = @includedir@
|
|
|
|
infodir = @infodir@
|
|
|
|
install_sh = @install_sh@
|
|
|
|
libdir = @libdir@
|
|
|
|
libexecdir = @libexecdir@
|
|
|
|
localedir = @localedir@
|
|
|
|
localstatedir = @localstatedir@
|
|
|
|
lt_ECHO = @lt_ECHO@
|
|
|
|
mandir = @mandir@
|
|
|
|
mkdir_p = @mkdir_p@
|
|
|
|
oldincludedir = @oldincludedir@
|
|
|
|
pdfdir = @pdfdir@
|
|
|
|
prefix = @prefix@
|
|
|
|
program_transform_name = @program_transform_name@
|
|
|
|
psdir = @psdir@
|
|
|
|
sbindir = @sbindir@
|
|
|
|
sharedstatedir = @sharedstatedir@
|
|
|
|
srcdir = @srcdir@
|
|
|
|
sysconfdir = @sysconfdir@
|
|
|
|
target = @target@
|
|
|
|
target_alias = @target_alias@
|
|
|
|
target_cpu = @target_cpu@
|
|
|
|
target_os = @target_os@
|
|
|
|
target_vendor = @target_vendor@
|
|
|
|
top_build_prefix = @top_build_prefix@
|
|
|
|
top_builddir = @top_builddir@
|
|
|
|
top_srcdir = @top_srcdir@
|
2010-09-15 22:32:27 +00:00
|
|
|
SUBDIRS = zpool-config zpool-layout zpios-test zpios-profile
|
2010-09-04 20:26:23 +00:00
|
|
|
dist_pkglibexec_SCRIPTS = \
|
|
|
|
$(top_builddir)/scripts/common.sh \
|
|
|
|
$(top_srcdir)/scripts/zconfig.sh \
|
Add zfault zpool configurations and tests
Eleven new zpool configurations were added to allow testing of various
failure cases. The first 5 zpool configurations leverage the 'faulty'
md device type which allow us to simuluate IO errors at the block layer.
The last 6 zpool configurations leverage the scsi_debug module provided
by modern kernels. This device allows you to create virtual scsi
devices which are backed by a ram disk. With this setup we can verify
the full IO stack by injecting faults at the lowest layer. Both methods
of fault injection are important to verifying the IO stack.
The zfs code itself also provides a mechanism for error injection
via the zinject command line tool. While we should also take advantage
of this appraoch to validate the code it does not address any of the
Linux integration issues which are the most concerning. For the
moment we're trusting that the upstream Solaris guys are running
zinject and would have caught internal zfs logic errors.
Currently, there are 6 r/w test cases layered on top of the 'faulty'
md devices. They include 3 writes tests for soft/transient errors,
hard/permenant errors, and all writes error to the device. There
are 3 matching read tests for soft/transient errors, hard/permenant
errors, and fixable read error with a write. Although for this last
case zfs doesn't do anything special.
The seventh test case verifies zfs detects and corrects checksum
errors. In this case one of the drives is extensively damaged and
by dd'ing over large sections of it. We then ensure zfs logs the
issue and correctly rebuilds the damage.
The next test cases use the scsi_debug configuration to injects error
at the bottom of the scsi stack. This ensures we find any flaws in the
scsi midlayer or our usage of it. Plus it stresses the device specific
retry, timeout, and error handling outside of zfs's control.
The eighth test case is to verify that the system correctly handles an
intermittent device timeout. Here the scsi_debug device drops 1 in N
requests resulting in a retry either at the block level. The ZFS code
does specify the FAILFAST option but it turns out that for this case
the Linux IO stack with still retry the command. The FAILFAST logic
located in scsi_noretry_cmd() does no seem to apply to the simply
timeout case. It appears to be more targeted to specific device or
transport errors from the lower layers.
The ninth test case handles a persistent failure in which the device
is removed from the system by Linux. The test verifies that the failure
is detected, the device is made unavailable, and then can be successfully
re-add when brought back online. Additionally, it ensures that errors
and events are logged to the correct places and the no data corruption
has occured due to the failure.
2010-09-28 23:32:12 +00:00
|
|
|
$(top_srcdir)/scripts/zfault.sh \
|
2010-09-04 20:26:23 +00:00
|
|
|
$(top_srcdir)/scripts/zfs.sh \
|
|
|
|
$(top_srcdir)/scripts/zpool-create.sh \
|
|
|
|
$(top_srcdir)/scripts/zpios.sh \
|
|
|
|
$(top_srcdir)/scripts/zpios-sanity.sh \
|
|
|
|
$(top_srcdir)/scripts/zpios-survey.sh
|
|
|
|
|
|
|
|
ZFS = $(top_builddir)/scripts/zfs.sh
|
|
|
|
ZCONFIG = $(top_builddir)/scripts/zconfig.sh
|
Add zfault zpool configurations and tests
Eleven new zpool configurations were added to allow testing of various
failure cases. The first 5 zpool configurations leverage the 'faulty'
md device type which allow us to simuluate IO errors at the block layer.
The last 6 zpool configurations leverage the scsi_debug module provided
by modern kernels. This device allows you to create virtual scsi
devices which are backed by a ram disk. With this setup we can verify
the full IO stack by injecting faults at the lowest layer. Both methods
of fault injection are important to verifying the IO stack.
The zfs code itself also provides a mechanism for error injection
via the zinject command line tool. While we should also take advantage
of this appraoch to validate the code it does not address any of the
Linux integration issues which are the most concerning. For the
moment we're trusting that the upstream Solaris guys are running
zinject and would have caught internal zfs logic errors.
Currently, there are 6 r/w test cases layered on top of the 'faulty'
md devices. They include 3 writes tests for soft/transient errors,
hard/permenant errors, and all writes error to the device. There
are 3 matching read tests for soft/transient errors, hard/permenant
errors, and fixable read error with a write. Although for this last
case zfs doesn't do anything special.
The seventh test case verifies zfs detects and corrects checksum
errors. In this case one of the drives is extensively damaged and
by dd'ing over large sections of it. We then ensure zfs logs the
issue and correctly rebuilds the damage.
The next test cases use the scsi_debug configuration to injects error
at the bottom of the scsi stack. This ensures we find any flaws in the
scsi midlayer or our usage of it. Plus it stresses the device specific
retry, timeout, and error handling outside of zfs's control.
The eighth test case is to verify that the system correctly handles an
intermittent device timeout. Here the scsi_debug device drops 1 in N
requests resulting in a retry either at the block level. The ZFS code
does specify the FAILFAST option but it turns out that for this case
the Linux IO stack with still retry the command. The FAILFAST logic
located in scsi_noretry_cmd() does no seem to apply to the simply
timeout case. It appears to be more targeted to specific device or
transport errors from the lower layers.
The ninth test case handles a persistent failure in which the device
is removed from the system by Linux. The test verifies that the failure
is detected, the device is made unavailable, and then can be successfully
re-add when brought back online. Additionally, it ensures that errors
and events are logged to the correct places and the no data corruption
has occured due to the failure.
2010-09-28 23:32:12 +00:00
|
|
|
ZFAULT = $(top_builddir)/scripts/zfault.sh
|
2010-09-04 20:26:23 +00:00
|
|
|
ZTEST = $(top_builddir)/cmd/ztest/ztest
|
|
|
|
ZPIOS_SANITY = $(top_builddir)/scripts/zpios-sanity.sh
|
|
|
|
all: all-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
.SUFFIXES:
|
|
|
|
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
|
|
|
@for dep in $?; do \
|
|
|
|
case '$(am__configure_deps)' in \
|
|
|
|
*$$dep*) \
|
|
|
|
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
|
|
|
&& { if test -f $@; then exit 0; else break; fi; }; \
|
|
|
|
exit 1;; \
|
|
|
|
esac; \
|
|
|
|
done; \
|
|
|
|
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu scripts/Makefile'; \
|
|
|
|
$(am__cd) $(top_srcdir) && \
|
|
|
|
$(AUTOMAKE) --gnu scripts/Makefile
|
|
|
|
.PRECIOUS: Makefile
|
|
|
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
|
|
|
@case '$?' in \
|
|
|
|
*config.status*) \
|
|
|
|
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
|
|
|
*) \
|
|
|
|
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
|
|
|
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
|
|
|
esac;
|
|
|
|
|
|
|
|
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
|
|
|
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
|
|
|
|
|
|
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
|
|
|
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
|
|
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
|
|
|
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
|
|
|
$(am__aclocal_m4_deps):
|
|
|
|
common.sh: $(top_builddir)/config.status $(srcdir)/common.sh.in
|
|
|
|
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
|
2010-09-04 20:26:23 +00:00
|
|
|
install-dist_pkglibexecSCRIPTS: $(dist_pkglibexec_SCRIPTS)
|
2010-08-26 19:28:14 +00:00
|
|
|
@$(NORMAL_INSTALL)
|
|
|
|
test -z "$(pkglibexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibexecdir)"
|
2010-09-04 20:26:23 +00:00
|
|
|
@list='$(dist_pkglibexec_SCRIPTS)'; test -n "$(pkglibexecdir)" || list=; \
|
2010-08-26 19:28:14 +00:00
|
|
|
for p in $$list; do \
|
|
|
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
|
|
|
if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
|
|
|
|
done | \
|
|
|
|
sed -e 'p;s,.*/,,;n' \
|
2010-09-04 20:26:23 +00:00
|
|
|
-e 'h;s|.*|.|' \
|
2010-08-26 19:28:14 +00:00
|
|
|
-e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
|
|
|
|
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
|
|
|
|
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
|
|
|
if ($$2 == $$4) { files[d] = files[d] " " $$1; \
|
|
|
|
if (++n[d] == $(am__install_max)) { \
|
|
|
|
print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
|
|
|
|
else { print "f", d "/" $$4, $$1 } } \
|
|
|
|
END { for (d in files) print "f", d, files[d] }' | \
|
|
|
|
while read type dir files; do \
|
|
|
|
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
|
|
|
test -z "$$files" || { \
|
|
|
|
echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(pkglibexecdir)$$dir'"; \
|
|
|
|
$(INSTALL_SCRIPT) $$files "$(DESTDIR)$(pkglibexecdir)$$dir" || exit $$?; \
|
|
|
|
} \
|
|
|
|
; done
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
uninstall-dist_pkglibexecSCRIPTS:
|
2010-08-26 19:28:14 +00:00
|
|
|
@$(NORMAL_UNINSTALL)
|
2010-09-04 20:26:23 +00:00
|
|
|
@list='$(dist_pkglibexec_SCRIPTS)'; test -n "$(pkglibexecdir)" || exit 0; \
|
|
|
|
files=`for p in $$list; do echo "$$p"; done | \
|
|
|
|
sed -e 's,.*/,,;$(transform)'`; \
|
2010-08-26 19:28:14 +00:00
|
|
|
test -n "$$list" || exit 0; \
|
|
|
|
echo " ( cd '$(DESTDIR)$(pkglibexecdir)' && rm -f" $$files ")"; \
|
|
|
|
cd "$(DESTDIR)$(pkglibexecdir)" && rm -f $$files
|
|
|
|
|
|
|
|
mostlyclean-libtool:
|
|
|
|
-rm -f *.lo
|
|
|
|
|
|
|
|
clean-libtool:
|
|
|
|
-rm -rf .libs _libs
|
2010-09-04 20:26:23 +00:00
|
|
|
|
|
|
|
# This directory's subdirectories are mostly independent; you can cd
|
|
|
|
# into them and run `make' without going through this Makefile.
|
|
|
|
# To change the values of `make' variables: instead of editing Makefiles,
|
|
|
|
# (1) if the variable is set in `config.status', edit `config.status'
|
|
|
|
# (which will cause the Makefiles to be regenerated when you run `make');
|
|
|
|
# (2) otherwise, pass the desired values on the `make' command line.
|
|
|
|
$(RECURSIVE_TARGETS):
|
|
|
|
@fail= failcom='exit 1'; \
|
|
|
|
for f in x $$MAKEFLAGS; do \
|
|
|
|
case $$f in \
|
|
|
|
*=* | --[!k]*);; \
|
|
|
|
*k*) failcom='fail=yes';; \
|
|
|
|
esac; \
|
|
|
|
done; \
|
|
|
|
dot_seen=no; \
|
|
|
|
target=`echo $@ | sed s/-recursive//`; \
|
|
|
|
list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
|
|
echo "Making $$target in $$subdir"; \
|
|
|
|
if test "$$subdir" = "."; then \
|
|
|
|
dot_seen=yes; \
|
|
|
|
local_target="$$target-am"; \
|
|
|
|
else \
|
|
|
|
local_target="$$target"; \
|
|
|
|
fi; \
|
|
|
|
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
|
|
|
|| eval $$failcom; \
|
|
|
|
done; \
|
|
|
|
if test "$$dot_seen" = "no"; then \
|
|
|
|
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
|
|
|
fi; test -z "$$fail"
|
|
|
|
|
|
|
|
$(RECURSIVE_CLEAN_TARGETS):
|
|
|
|
@fail= failcom='exit 1'; \
|
|
|
|
for f in x $$MAKEFLAGS; do \
|
|
|
|
case $$f in \
|
|
|
|
*=* | --[!k]*);; \
|
|
|
|
*k*) failcom='fail=yes';; \
|
|
|
|
esac; \
|
|
|
|
done; \
|
|
|
|
dot_seen=no; \
|
|
|
|
case "$@" in \
|
|
|
|
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
|
|
|
*) list='$(SUBDIRS)' ;; \
|
|
|
|
esac; \
|
|
|
|
rev=''; for subdir in $$list; do \
|
|
|
|
if test "$$subdir" = "."; then :; else \
|
|
|
|
rev="$$subdir $$rev"; \
|
|
|
|
fi; \
|
|
|
|
done; \
|
|
|
|
rev="$$rev ."; \
|
|
|
|
target=`echo $@ | sed s/-recursive//`; \
|
|
|
|
for subdir in $$rev; do \
|
|
|
|
echo "Making $$target in $$subdir"; \
|
|
|
|
if test "$$subdir" = "."; then \
|
|
|
|
local_target="$$target-am"; \
|
|
|
|
else \
|
|
|
|
local_target="$$target"; \
|
|
|
|
fi; \
|
|
|
|
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
|
|
|
|| eval $$failcom; \
|
|
|
|
done && test -z "$$fail"
|
|
|
|
tags-recursive:
|
|
|
|
list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
|
|
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
|
|
|
done
|
|
|
|
ctags-recursive:
|
|
|
|
list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
|
|
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
|
|
|
done
|
|
|
|
|
|
|
|
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
|
|
|
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
|
|
unique=`for i in $$list; do \
|
|
|
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
|
|
done | \
|
|
|
|
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
|
|
|
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
|
|
|
mkid -fID $$unique
|
2010-08-26 19:28:14 +00:00
|
|
|
tags: TAGS
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
|
|
$(TAGS_FILES) $(LISP)
|
|
|
|
set x; \
|
|
|
|
here=`pwd`; \
|
|
|
|
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
|
|
|
include_option=--etags-include; \
|
|
|
|
empty_fix=.; \
|
|
|
|
else \
|
|
|
|
include_option=--include; \
|
|
|
|
empty_fix=; \
|
|
|
|
fi; \
|
|
|
|
list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
|
|
if test "$$subdir" = .; then :; else \
|
|
|
|
test ! -f $$subdir/TAGS || \
|
|
|
|
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
|
|
|
|
fi; \
|
|
|
|
done; \
|
|
|
|
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
|
|
unique=`for i in $$list; do \
|
|
|
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
|
|
done | \
|
|
|
|
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
|
|
|
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
|
|
|
shift; \
|
|
|
|
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
|
|
|
test -n "$$unique" || unique=$$empty_fix; \
|
|
|
|
if test $$# -gt 0; then \
|
|
|
|
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
|
|
|
"$$@" $$unique; \
|
|
|
|
else \
|
|
|
|
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
|
|
|
$$unique; \
|
|
|
|
fi; \
|
|
|
|
fi
|
2010-08-26 19:28:14 +00:00
|
|
|
ctags: CTAGS
|
2010-09-04 20:26:23 +00:00
|
|
|
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|
|
|
$(TAGS_FILES) $(LISP)
|
|
|
|
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
|
|
|
unique=`for i in $$list; do \
|
|
|
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|
|
|
done | \
|
|
|
|
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
|
|
|
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
|
|
|
test -z "$(CTAGS_ARGS)$$unique" \
|
|
|
|
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
|
|
|
$$unique
|
|
|
|
|
|
|
|
GTAGS:
|
|
|
|
here=`$(am__cd) $(top_builddir) && pwd` \
|
|
|
|
&& $(am__cd) $(top_srcdir) \
|
|
|
|
&& gtags -i $(GTAGS_ARGS) "$$here"
|
|
|
|
|
|
|
|
distclean-tags:
|
|
|
|
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
distdir: $(DISTFILES)
|
|
|
|
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
|
|
|
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
|
|
|
list='$(DISTFILES)'; \
|
|
|
|
dist_files=`for file in $$list; do echo $$file; done | \
|
|
|
|
sed -e "s|^$$srcdirstrip/||;t" \
|
|
|
|
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
|
|
|
case $$dist_files in \
|
|
|
|
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
|
|
|
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
|
|
|
sort -u` ;; \
|
|
|
|
esac; \
|
|
|
|
for file in $$dist_files; do \
|
|
|
|
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
|
|
|
if test -d $$d/$$file; then \
|
|
|
|
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
|
|
|
if test -d "$(distdir)/$$file"; then \
|
|
|
|
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
|
|
|
fi; \
|
|
|
|
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
|
|
|
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
|
|
|
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
|
|
|
fi; \
|
|
|
|
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
|
|
|
else \
|
|
|
|
test -f "$(distdir)/$$file" \
|
|
|
|
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
|
|
|
|| exit 1; \
|
|
|
|
fi; \
|
|
|
|
done
|
2010-09-04 20:26:23 +00:00
|
|
|
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
|
|
|
if test "$$subdir" = .; then :; else \
|
|
|
|
test -d "$(distdir)/$$subdir" \
|
|
|
|
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
|
|
|
|| exit 1; \
|
|
|
|
fi; \
|
|
|
|
done
|
|
|
|
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
|
|
|
if test "$$subdir" = .; then :; else \
|
|
|
|
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
|
|
|
|
$(am__relativize); \
|
|
|
|
new_distdir=$$reldir; \
|
|
|
|
dir1=$$subdir; dir2="$(top_distdir)"; \
|
|
|
|
$(am__relativize); \
|
|
|
|
new_top_distdir=$$reldir; \
|
|
|
|
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
|
|
|
|
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
|
|
|
|
($(am__cd) $$subdir && \
|
|
|
|
$(MAKE) $(AM_MAKEFLAGS) \
|
|
|
|
top_distdir="$$new_top_distdir" \
|
|
|
|
distdir="$$new_distdir" \
|
|
|
|
am__remove_distdir=: \
|
|
|
|
am__skip_length_check=: \
|
|
|
|
am__skip_mode_fix=: \
|
|
|
|
distdir) \
|
|
|
|
|| exit 1; \
|
|
|
|
fi; \
|
|
|
|
done
|
2010-08-26 19:28:14 +00:00
|
|
|
check-am: all-am
|
2010-09-04 20:26:23 +00:00
|
|
|
check: check-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
all-am: Makefile $(SCRIPTS)
|
2010-09-04 20:26:23 +00:00
|
|
|
installdirs: installdirs-recursive
|
|
|
|
installdirs-am:
|
2010-08-26 19:28:14 +00:00
|
|
|
for dir in "$(DESTDIR)$(pkglibexecdir)"; do \
|
|
|
|
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
|
|
|
done
|
2010-09-04 20:26:23 +00:00
|
|
|
install: install-recursive
|
|
|
|
install-exec: install-exec-recursive
|
|
|
|
install-data: install-data-recursive
|
|
|
|
uninstall: uninstall-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
install-am: all-am
|
|
|
|
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
installcheck: installcheck-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
install-strip:
|
|
|
|
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
|
|
|
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
|
|
|
`test -z '$(STRIP)' || \
|
|
|
|
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
|
|
|
mostlyclean-generic:
|
|
|
|
|
|
|
|
clean-generic:
|
|
|
|
|
|
|
|
distclean-generic:
|
|
|
|
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
|
|
|
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
|
|
|
|
|
|
|
maintainer-clean-generic:
|
|
|
|
@echo "This command is intended for maintainers to use"
|
|
|
|
@echo "it deletes files that may require special tools to rebuild."
|
|
|
|
clean-am: clean-generic clean-libtool mostlyclean-am
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
distclean: distclean-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
-rm -f Makefile
|
2010-09-04 20:26:23 +00:00
|
|
|
distclean-am: clean-am distclean-generic distclean-tags
|
2010-08-26 19:28:14 +00:00
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
dvi: dvi-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
dvi-am:
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
html: html-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
html-am:
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
info: info-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
info-am:
|
|
|
|
|
|
|
|
install-data-am:
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
install-dvi: install-dvi-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
install-dvi-am:
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
install-exec-am: install-dist_pkglibexecSCRIPTS
|
2010-08-26 19:28:14 +00:00
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
install-html: install-html-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
install-html-am:
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
install-info: install-info-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
install-info-am:
|
|
|
|
|
|
|
|
install-man:
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
install-pdf: install-pdf-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
install-pdf-am:
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
install-ps: install-ps-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
install-ps-am:
|
|
|
|
|
|
|
|
installcheck-am:
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
maintainer-clean: maintainer-clean-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
-rm -f Makefile
|
|
|
|
maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
mostlyclean: mostlyclean-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
pdf: pdf-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
pdf-am:
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
ps: ps-recursive
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
ps-am:
|
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
uninstall-am: uninstall-dist_pkglibexecSCRIPTS
|
|
|
|
|
|
|
|
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
|
|
|
|
install-am install-strip tags-recursive
|
|
|
|
|
|
|
|
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
|
|
|
|
all all-am check check-am clean clean-generic clean-libtool \
|
|
|
|
ctags ctags-recursive distclean distclean-generic \
|
|
|
|
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
|
|
|
html-am info info-am install install-am install-data \
|
|
|
|
install-data-am install-dist_pkglibexecSCRIPTS install-dvi \
|
|
|
|
install-dvi-am install-exec install-exec-am install-html \
|
|
|
|
install-html-am install-info install-info-am install-man \
|
|
|
|
install-pdf install-pdf-am install-ps install-ps-am \
|
|
|
|
install-strip installcheck installcheck-am installdirs \
|
|
|
|
installdirs-am maintainer-clean maintainer-clean-generic \
|
|
|
|
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
|
|
|
|
ps ps-am tags tags-recursive uninstall uninstall-am \
|
|
|
|
uninstall-dist_pkglibexecSCRIPTS
|
|
|
|
|
|
|
|
|
|
|
|
all:
|
|
|
|
@list='$(dist_pkglibexec_SCRIPTS)'; \
|
|
|
|
for file in $$list; do \
|
|
|
|
link=$$(basename $$file); \
|
|
|
|
if [ ! -e $$link ]; then \
|
|
|
|
$(LN_S) $$file $$link; \
|
|
|
|
fi \
|
|
|
|
done
|
2010-08-26 19:28:14 +00:00
|
|
|
|
2010-09-04 20:26:23 +00:00
|
|
|
clean:
|
|
|
|
@list='$(dist_pkglibexec_SCRIPTS)'; \
|
|
|
|
for file in $$list; do \
|
|
|
|
link=$$(basename $$file); \
|
|
|
|
if [ -L $$link ]; then \
|
|
|
|
$(RM) $$link; \
|
|
|
|
fi \
|
|
|
|
done
|
2010-08-26 19:28:14 +00:00
|
|
|
|
|
|
|
check:
|
2010-11-11 18:17:02 +00:00
|
|
|
@$(ZFS) -u
|
2010-08-26 19:28:14 +00:00
|
|
|
@echo
|
|
|
|
@echo -n "===================================="
|
|
|
|
@echo -n " ZTEST "
|
|
|
|
@echo "===================================="
|
|
|
|
@echo
|
|
|
|
@$(ZFS)
|
|
|
|
@$(ZTEST) -V
|
|
|
|
@$(ZFS) -u
|
|
|
|
@echo
|
|
|
|
@echo
|
|
|
|
@echo -n "==================================="
|
|
|
|
@echo -n " ZCONFIG "
|
|
|
|
@echo "==================================="
|
|
|
|
@echo
|
Add zfault zpool configurations and tests
Eleven new zpool configurations were added to allow testing of various
failure cases. The first 5 zpool configurations leverage the 'faulty'
md device type which allow us to simuluate IO errors at the block layer.
The last 6 zpool configurations leverage the scsi_debug module provided
by modern kernels. This device allows you to create virtual scsi
devices which are backed by a ram disk. With this setup we can verify
the full IO stack by injecting faults at the lowest layer. Both methods
of fault injection are important to verifying the IO stack.
The zfs code itself also provides a mechanism for error injection
via the zinject command line tool. While we should also take advantage
of this appraoch to validate the code it does not address any of the
Linux integration issues which are the most concerning. For the
moment we're trusting that the upstream Solaris guys are running
zinject and would have caught internal zfs logic errors.
Currently, there are 6 r/w test cases layered on top of the 'faulty'
md devices. They include 3 writes tests for soft/transient errors,
hard/permenant errors, and all writes error to the device. There
are 3 matching read tests for soft/transient errors, hard/permenant
errors, and fixable read error with a write. Although for this last
case zfs doesn't do anything special.
The seventh test case verifies zfs detects and corrects checksum
errors. In this case one of the drives is extensively damaged and
by dd'ing over large sections of it. We then ensure zfs logs the
issue and correctly rebuilds the damage.
The next test cases use the scsi_debug configuration to injects error
at the bottom of the scsi stack. This ensures we find any flaws in the
scsi midlayer or our usage of it. Plus it stresses the device specific
retry, timeout, and error handling outside of zfs's control.
The eighth test case is to verify that the system correctly handles an
intermittent device timeout. Here the scsi_debug device drops 1 in N
requests resulting in a retry either at the block level. The ZFS code
does specify the FAILFAST option but it turns out that for this case
the Linux IO stack with still retry the command. The FAILFAST logic
located in scsi_noretry_cmd() does no seem to apply to the simply
timeout case. It appears to be more targeted to specific device or
transport errors from the lower layers.
The ninth test case handles a persistent failure in which the device
is removed from the system by Linux. The test verifies that the failure
is detected, the device is made unavailable, and then can be successfully
re-add when brought back online. Additionally, it ensures that errors
and events are logged to the correct places and the no data corruption
has occured due to the failure.
2010-09-28 23:32:12 +00:00
|
|
|
@$(ZCONFIG) -c
|
|
|
|
@echo
|
|
|
|
@echo -n "==================================="
|
|
|
|
@echo -n " ZFAULT "
|
|
|
|
@echo "==================================="
|
|
|
|
@echo
|
|
|
|
@$(ZFAULT) -c
|
2010-08-26 19:28:14 +00:00
|
|
|
@echo
|
|
|
|
@echo -n "===================================="
|
|
|
|
@echo -n " ZPIOS "
|
|
|
|
@echo "===================================="
|
|
|
|
@echo
|
|
|
|
@$(ZFS)
|
|
|
|
@$(ZPIOS_SANITY)
|
|
|
|
@$(ZFS) -u
|
|
|
|
@echo
|
|
|
|
|
|
|
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
|
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
|
|
.NOEXPORT:
|