Add build system
Add autoconf style build infrastructure to the ZFS tree. This includes autogen.sh, configure.ac, m4 macros, some scripts/*, and makefiles for all the core ZFS components.
This commit is contained in:
parent
40b84e7aec
commit
c9c0d073da
|
@ -0,0 +1,576 @@
|
||||||
|
2010-08-13 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.5.0
|
||||||
|
|
||||||
|
* : The ChangeLog is being retired. Please use the git commit
|
||||||
|
logs for a full records of changes: 'git log --no-merges'
|
||||||
|
|
||||||
|
2010-05-21 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.4.9 - Use 'git log --no-merges' for full change log.
|
||||||
|
|
||||||
|
* : Build system improvements:
|
||||||
|
- Added support for the 'make -s' silent build option.
|
||||||
|
- Allow zfs_config.h to be included by dependent packages.
|
||||||
|
- Minor spec file updates.
|
||||||
|
- Minor build system message updates.
|
||||||
|
|
||||||
|
* : Topic branch cleanup. Several old branches were removed and
|
||||||
|
numerous hunks which were accidentaly commited to incorrect topic
|
||||||
|
branches in the past were relocated to the correct topic branch.
|
||||||
|
|
||||||
|
* *.c, *.h, *.sh, AUTHORS, COPYING, COPYRIGHT, DISCLAIMER, README:
|
||||||
|
Added standard header to source files which includes the copyright,
|
||||||
|
license, and author information. Additionally, updated the listed
|
||||||
|
top level files to the latest versions.
|
||||||
|
|
||||||
|
* cmd/zpool/zpool_vdev.c: Check all partitions with check_file()
|
||||||
|
even when no libblkid is found. This oversight would result in
|
||||||
|
ZFS not detecting existing filesystems on partitions.
|
||||||
|
|
||||||
|
* module/zfs/fm.c, module/zfs/zfs_fm, libzfs/libzfs_pool.c:
|
||||||
|
Added zevents which are similar to Solaris FMA support. The
|
||||||
|
existing FMA and sysevent call points in ZFS were unified in
|
||||||
|
to a single event type and used to create a user space visible
|
||||||
|
event notification system under Linux. The new 'zpool events'
|
||||||
|
command can be used to show all recent ZFS events.
|
||||||
|
|
||||||
|
* module/zfs/spa.c, module/zfs/zil.c: Suppress large memory
|
||||||
|
allocation warnings for two particular kmem_alloc()'s. For
|
||||||
|
now we can live with them as is but long term a way should be
|
||||||
|
found to perform small allocations or use the vmem based slab.
|
||||||
|
|
||||||
|
* module/zfs/zvol.c: Recreate volume and snapshot /dev links during
|
||||||
|
module load. Links in /dev for volumes/snapshots were only being
|
||||||
|
created at volume/snapshot creation time. Those links are now also
|
||||||
|
created dynamically at module load time based on the spa config.
|
||||||
|
|
||||||
|
* module/zfs/zvol.c, module/zfs/include/sys/blkdev.h: The handler
|
||||||
|
zvol_request() should use the unlocked version of blk_end_request()
|
||||||
|
to avoid a deadlock in the ZVOL.
|
||||||
|
|
||||||
|
2010-03-11 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.4.8 - Use 'git log --no-merges' for full change log.
|
||||||
|
|
||||||
|
* : Build system improvements:
|
||||||
|
- Remove Module.markers and Module.symver{s} in clean target.
|
||||||
|
- Improved kernel source detection when none specified.
|
||||||
|
- Fix RPM definitions for the unknown distro/installation.
|
||||||
|
- Check for spl in ../spl if not found in install path.
|
||||||
|
- Include all headers regardless of depth in packages.
|
||||||
|
- Allow recursive configure/make.
|
||||||
|
|
||||||
|
* lib/libzpool/kernel.c: Fixed several zdb bugs when opening a pool
|
||||||
|
- zdb wasn't getting the correct device size when the vdev is a
|
||||||
|
block device. In Solaris, fstat64() returns the device size but
|
||||||
|
in Linux an ioctl() is needed.
|
||||||
|
- make sure that we don't try to open a block device in write mode
|
||||||
|
from userspace. This shouldn't happen, because zdb opens devices
|
||||||
|
in read-only mode, and ztest only uses files.
|
||||||
|
|
||||||
|
* lib/libspl/include/umem.h: Add umem_alloc_aligned() and honor
|
||||||
|
cache_align field for umem cache. Under linux we open block devices
|
||||||
|
with O_DIRECT which means we must provide aligned memory buffers.
|
||||||
|
|
||||||
|
* lib/libzpool/kernel.c: Fix some incorrect error handling. In
|
||||||
|
vn_open(), if fstat64() returned an error, the real errno was being
|
||||||
|
obscured by calling close().
|
||||||
|
|
||||||
|
* scripts/*: Fix scripts to work when invoked from other directories.
|
||||||
|
|
||||||
|
* module/zfs/arc.c: Fix struct ht_lock padding in arc.c.
|
||||||
|
|
||||||
|
* lib/libefi/include/sys/uuid.h: Fix duplicate uuid_t typedef.
|
||||||
|
|
||||||
|
* module/zfs/txg.c: Use CPU percentages for number of commit cb
|
||||||
|
threads. This doesn't change number of threads in the kernel, but it
|
||||||
|
reduces number of threads in ztest (important due to 32-bit address
|
||||||
|
limitations).
|
||||||
|
|
||||||
|
* cmd/ztest/ztest.c: Clean up emulation of kernel threads in
|
||||||
|
userspace. Updated to use pthread thread specific data rather than
|
||||||
|
keeping a global list. This also fixes at least one easily
|
||||||
|
reproducible crash in ztest
|
||||||
|
|
||||||
|
* META, config/kernel.m4: Add configure check for kernel build
|
||||||
|
options which are incompatible with the license. If your building
|
||||||
|
against a kernel deemed incompatible configure will fail and
|
||||||
|
suggest how you should rebuild your kernel.
|
||||||
|
|
||||||
|
* config/kernel-fmode-t.m4: Linux 2.6.28 compat, add a check for the
|
||||||
|
fmode_t type. This typedef first appears in 2.6.28 kernels as part
|
||||||
|
of some block device operation reworking.
|
||||||
|
|
||||||
|
* module/zfs/dmu_send.c: No inline to keep dmu_recv_stream() stack
|
||||||
|
frame less than 1024 bytes. Recent builds against 2.6.31 flagged
|
||||||
|
dmu_recv_stream() as stack heavy. Further analysis of this function
|
||||||
|
should be performed to further reduce its stack usage.
|
||||||
|
|
||||||
|
* scripts/common.sh: Split the udev rule from a specific configuration
|
||||||
|
by providing a generic 60-zpool.rules file which uses a small helper
|
||||||
|
util 'zpool_id' to parse a configuration file by default located in
|
||||||
|
/etc/zfs/zdev.conf. The helper script maps a by-path udev name to a
|
||||||
|
more friendly name of <channel><rank> for large configurations.
|
||||||
|
|
||||||
|
Additionally, when running zpool-create.sh in-tree it will no longer
|
||||||
|
use udev because we would have to copy certain helper scripts in to
|
||||||
|
the installed system. To avoid this the config file in simply
|
||||||
|
parsed and symlinks are created in your working tree. The script
|
||||||
|
will use udev if it as run as part of an installed zfs-test package.
|
||||||
|
|
||||||
|
* module/zfs/zvol.c: Use check_disk_change() instead of
|
||||||
|
revalidate_disk(). For 2.6.27 kernels are earlier revalidate_disk()
|
||||||
|
was not available. However, check_disk_change() has been available
|
||||||
|
for far longer and will properly inform the kernel of the volume
|
||||||
|
change for both older and newer kernels.
|
||||||
|
|
||||||
|
* module/zfs/dmu.c: Fixed incorrect ASSERT3S() added by ZVOL.
|
||||||
|
|
||||||
|
* module/zfs/vdev_raidz.c, module/zfs/zvol.c: Minor fixes for 32-bit.
|
||||||
|
|
||||||
|
* scripts/zfs-update.sh, man/man8/*: Added man pages based on the
|
||||||
|
latest documentation and modified zfs-update.sh script to update them.
|
||||||
|
|
||||||
|
* .gitignore: Updated .gitignore rules to exclude build products.
|
||||||
|
|
||||||
|
2009-11-24 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.4.7 - Use 'git log --no-merges' for full change log.
|
||||||
|
|
||||||
|
* module/zcommon/include/sys/fs/zfs.h, module/zfs/include/sys/blkdev.h,
|
||||||
|
module/zfs/include/sys/dmu.h, module/zfs/dmu.c,
|
||||||
|
module/zfs/include/sys/zvol.h, module/zfs/zvol.c,
|
||||||
|
module/zfs/zfs_ioctl.c:
|
||||||
|
Added the ZVOL block device, with the addition of the ZVOL real ZFS
|
||||||
|
based block devices are available and can be compared head to head
|
||||||
|
with Linux's MD and LVM block drivers. The Linux ZVOL has not yet
|
||||||
|
had any performance work done but from a user perspective it should
|
||||||
|
be functionally complete and behave like any other Linux block device.
|
||||||
|
The ZVOL has so far been tested using zconfig.sh on the following
|
||||||
|
x86_64 based platforms: FC11, CHAOS4, RHEL5, RHEL6, and SLES11.
|
||||||
|
However, more testing is required to ensure everything is working
|
||||||
|
as designed.
|
||||||
|
|
||||||
|
* scripts/udev-rules/99-zpool.rules.promise,
|
||||||
|
scripts/zpool-config/promise-raid0-1x16.sh,
|
||||||
|
scripts/zpool-config/promise-raid10-8x2.sh,
|
||||||
|
scripts/zpool-config/promise-raidz-2x8.sh,
|
||||||
|
scripts/zpool-config/promise-raidz2-2x8.sh:
|
||||||
|
Additional test configurations for a small 16 drive JBOD.
|
||||||
|
|
||||||
|
* module/zfs/arc.c: Linux 2.6.31 compat, mutexes can now exceed 64
|
||||||
|
bytes depending on the the kernel build options. To account for
|
||||||
|
this increase the pad size to 256 bytes.
|
||||||
|
|
||||||
|
* module/zfs/vdev_disk.c: Linux 2.6.31 compat, to get the hard
|
||||||
|
sector size use bdev_logical_block_size() this function replaces
|
||||||
|
bdev_hardsect_size().
|
||||||
|
|
||||||
|
* module/zfs/zfs_rlock.c: Prevent gcc uninit compiler warning in
|
||||||
|
zfs_range_unlock_reader().
|
||||||
|
|
||||||
|
* Makefile.am: Ensure *.order and *.markers build products are
|
||||||
|
removed by distclean rule.
|
||||||
|
|
||||||
|
2009-11-02 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.4.6 - Use 'git log --no-merges' for full change log.
|
||||||
|
|
||||||
|
* Rebased to ZFS b121 from OpenSolaris.
|
||||||
|
|
||||||
|
* module/zfs/vdev_disk.c: Finally a feature complete implementation:
|
||||||
|
- Handle dynamic bio merge_bdev limitations when constructing the
|
||||||
|
bio set associated with a dio. This previously prevented us from
|
||||||
|
layering cleanly on the md and dm virtual devices.
|
||||||
|
- Removed hard coded 512 byte sector size.
|
||||||
|
- Correctly determine the device size when using a partition.
|
||||||
|
- Hold and extra dio reference when submitting bio's using
|
||||||
|
bio_submit() to prevent a completion race.
|
||||||
|
|
||||||
|
* lib/libefi/*: Added fully function libefi library from Solaris.
|
||||||
|
This allows us to properly create and access GPT style partition
|
||||||
|
tables which are used when a whole device is added to a zpool.
|
||||||
|
|
||||||
|
* cmd/zpool/zpool_vdev.c: Fully integrated zpool with Linux package
|
||||||
|
libblkid. This allows zpool to identify existing devices of
|
||||||
|
various types to prevent devices from accidentally being used. When
|
||||||
|
given a whole device with a GPT partition table all partitions will
|
||||||
|
be checked for existing filesystems. At the moment MBR style
|
||||||
|
partition tables cannot be check and the force option must be used.
|
||||||
|
|
||||||
|
* cmd/zpool/zpool_vdev.c: Solaris devid support has been removed in
|
||||||
|
favor of Linux's udev. This means that a zpool device will always be
|
||||||
|
opened using the path provided at configuration time. This may
|
||||||
|
initially seem limiting but it has certain advantages:
|
||||||
|
- When creating a zpool where the physical location of the device
|
||||||
|
is NOT import simply create the pool using the /dev/disk/by-id paths.
|
||||||
|
This will ensure that regardless of physical location the device
|
||||||
|
will be properly located.
|
||||||
|
- When creating a zpool where the physical location of the device
|
||||||
|
is important use the /dev/disk/by-path paths. This will ensure that
|
||||||
|
devices are never accidentally detected and used in an incorrect
|
||||||
|
location which would compromise the redundancy of the system.
|
||||||
|
- Ever better you can create use your own udev rules file to setup
|
||||||
|
any mapping and naming convention you desire. One example of a
|
||||||
|
custom rule is to map physical device locations using grid with
|
||||||
|
numbers are letter for coordinates. Each letter might represent
|
||||||
|
a specific bus/channel and each number a specific device. For large
|
||||||
|
configurations this provides an easy way to identify devices.
|
||||||
|
|
||||||
|
* module/zpios/zpios.c: Update to use kobject_set_name() for
|
||||||
|
increased portability.
|
||||||
|
|
||||||
|
* modules/*/*: Update module init/exit access points to use
|
||||||
|
spl_module_{init,exit}() macro API. This ensures the cwd is
|
||||||
|
immediately set to '/' and may be leveraged latter for any
|
||||||
|
additional module setup/cleanup which is required.
|
||||||
|
|
||||||
|
* cmd/ztest/ztest.c: Check ftrucate() return code to prevent
|
||||||
|
warnings when --fortify-source options is used in rpm builds.
|
||||||
|
|
||||||
|
* config/Rules.am: Set DEBUG/NDEBUG globally when building user
|
||||||
|
space components.
|
||||||
|
|
||||||
|
* scripts/zconfig.sh: Initial hook for running additional sanity
|
||||||
|
tests are part of 'make check'. Currently, there are only two
|
||||||
|
tests which do some basic configuration checking but they should
|
||||||
|
be extended as much as possible to prevent regressions. Tests
|
||||||
|
should also all be written so they run entirely in-tree.
|
||||||
|
|
||||||
|
* scripts/zpios-sanity.sh: Initial hook for validating real IO
|
||||||
|
using all block devices and all raid configurations. Supported
|
||||||
|
device types include scsi, ide, md, dm, ram, loop, and file.
|
||||||
|
Supported raid types include raid0, raid10, raidz, and raidz2.
|
||||||
|
|
||||||
|
* scripts/zpool-config/*: Update dragon and x4550 configs to use
|
||||||
|
custom udev rules file with <A-Z><1-N> naming convention. Add
|
||||||
|
configs for md, dm, and ram block devices to verify functionality.
|
||||||
|
|
||||||
|
* zfs-test.spec.in: Added zfs-test package which extends the existing
|
||||||
|
in-tree test infrastructure such that it can be run as part of an
|
||||||
|
installed package. This simplifies the testing of tagged releases.
|
||||||
|
|
||||||
|
* zfs-modules.spec.in: Various spec file tweaks for the supported
|
||||||
|
distros: RHEL5, RHEL6, SLES10, SLES11, Chaos4, Fedora 11.
|
||||||
|
|
||||||
|
2009-08-04 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.4.5 - Use 'git log --no-merges' for full change log.
|
||||||
|
|
||||||
|
* FC11 and SLES11 support: This includes all compatibility changes
|
||||||
|
to support 2.6.29 based kernels and the required build system
|
||||||
|
improvements.
|
||||||
|
* lib/libspl/asm-generic/atomic.c: Generic user space atomic support.
|
||||||
|
* module/zpios/zpios.c: Register a basic compat ioctl handler for
|
||||||
|
32-bit user vs 64-bit kernel compatibility. This is the default
|
||||||
|
build environment for all 64-bit SLES systems. Additionally
|
||||||
|
replace the use of 'struct timespec' which uses longs internally
|
||||||
|
and is therefore different sizes on 32-bit vs 64-bit objects with
|
||||||
|
'struct zpios_timespec_t'.a
|
||||||
|
* config/kernel.m4: Check arch/default path when detecting kernel
|
||||||
|
objects under SLES. We still preferentially use arch/arch if
|
||||||
|
available but if that fails it is acceptable to use default.
|
||||||
|
* config/kernel.m4: Remove LINUXINCLUDE from autoconf wrapper.
|
||||||
|
This breaks the 2.6.28+ kernels build system, all kernel build systems
|
||||||
|
at least post 2.6.16 will set this properly so we should not.
|
||||||
|
* lib/libspl/include/assert.h: Add ASSERTV macro to simplify removing
|
||||||
|
variables (the V in ASSERTV) which are only used in ASSERT().
|
||||||
|
Also revert all previously modified ASSERT()s to their original
|
||||||
|
definitions and use the ASSERTV macro to handle unused variables.
|
||||||
|
* module/zpios/zpios.c: Use spl device interfaces for portability.
|
||||||
|
* scripts/common.sh: The losetup -f option is unavailable for
|
||||||
|
SLES10 use the unused_loop_device() common function. Additionally
|
||||||
|
LOSETUP is now used to portably reference the losetup binary.
|
||||||
|
* module/zfs/vdev_disk.c: Unused destroy_dirty_buffers arg removed.
|
||||||
|
* module/zfs/vdev_disk.c: BIO_RW_SYNC renamed to BIO_RW_SYNCIO.
|
||||||
|
* module/zfs/vdev_disk.c: open/close_bdev_excl() renamed to
|
||||||
|
open/close_bdev_exclusive().
|
||||||
|
* module/zfs/vdev_disk.c: Empty write barriers are supported as of
|
||||||
|
linux 2.6.24 and are now used to implement DKIOCFLUSHWRITECACHE.
|
||||||
|
* module/zfs/vdev_disk.c: The bi_end_io API changes make partial
|
||||||
|
IO's impossible handle this case cleanly.
|
||||||
|
* module/zfs/vdev_disk.c: BIO_RW_FAILFAST replaced with
|
||||||
|
BIO_RW_FAILFAST_{DEV|_TRANSPORT|_DRIVER}, use the legacy
|
||||||
|
BIO_RW_FAILFAST flag if it exists for now.
|
||||||
|
* module/zfs/dmu_objset.c, module/zfs/spa_history.c: Excessively
|
||||||
|
large stack frames (>2048) were detected in dmu_objset_snapshot()
|
||||||
|
and spa_history_log() and were reduced by allocating from the heap.
|
||||||
|
|
||||||
|
* Rebased to ZFS b117 from OpenSolaris:
|
||||||
|
* module/zfs/dmu.c: Update zerocopy patch to be consistent with
|
||||||
|
new flags arg passed to dmu_read().
|
||||||
|
* module/zpios/zpios.c: Update zpios to be aware of the new flags
|
||||||
|
argument available in dmu_read(). Additionally add a zpios command
|
||||||
|
line flag to set the DMU_READ_NO_PREFETCH flag for a test.
|
||||||
|
* module/zfs/include/sys/zfs_context.h: Wrap new sysevent includes
|
||||||
|
until sysevent or something like it is implemented.
|
||||||
|
* module/zfs/zfs_ioctl.c: Wrap all the ACL interfaces with HAVE_ZPL.
|
||||||
|
They are integrated with the vfs layer which is not yet supported.
|
||||||
|
* module/zcommon/zfs_prop.c: Export new quota related symbols.
|
||||||
|
* lib/libzfs/libzfs_util.c: Increase buffer size for nvlist which
|
||||||
|
is needed for large configurations.
|
||||||
|
|
||||||
|
* Bug fixes:
|
||||||
|
* lib/libspl/include/sys/zfs_debug.h: Removed duplicate file.
|
||||||
|
* lib/libspl/include/sys/isa_defs.h: Fixed missing macro definitions
|
||||||
|
for little endian and big endian.
|
||||||
|
* cmd/zpios/zpios_main.c: Pretty-up the zpios 'make check' output.
|
||||||
|
* module/zfs/vdev_disk.c: Honor spa_mode() when opening block devs.
|
||||||
|
* module/zfs/vdev_disk.c: Initial error handling added to
|
||||||
|
vdev_disk_io_done() to revalidate the media on EIO.
|
||||||
|
* lib/libzfs/libzfs_util.c: Fix an accidentally introduced formatting
|
||||||
|
issue in zfs_nicenum() output.
|
||||||
|
|
||||||
|
2009-07-02 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.4.4 - Use 'git log --no-merges' for full change log.
|
||||||
|
|
||||||
|
* : Generic distro friendly build system / packaging improvements
|
||||||
|
for RPM based distros including CHAOS, RHEL, Fedora, and SLES.
|
||||||
|
|
||||||
|
These changes bring the zfs-0.4.4 tree in to compliance with
|
||||||
|
the spl-0.4.4 packaging changes. The bottom line is 2 source
|
||||||
|
rpms and 4 binary rpms will now be generated when creating
|
||||||
|
packages there will be:
|
||||||
|
|
||||||
|
zfs-<version>.src.rpm
|
||||||
|
- Fully rebuildable source rpm for libzfs and utils.
|
||||||
|
zfs-modules-<version>.src.rpm
|
||||||
|
- Fully rebuildable source rpm for kernel modules.
|
||||||
|
|
||||||
|
zfs-<version>.<arch>.rpm
|
||||||
|
- Binary rpm for libzfs and utils. The utils in this package are
|
||||||
|
compatible with all zfs-module rpms of the same version.
|
||||||
|
zfs-devel-<version>.<arch>.rpm
|
||||||
|
- Binary rpm containing headers for building against libzfs libraries.
|
||||||
|
|
||||||
|
zfs-modules-<verion>-<kernel>.arch.rpm
|
||||||
|
- Binary rpm containing the kernel modules for a specific kernel build.
|
||||||
|
The package name contains the kernel version and you should have one
|
||||||
|
of these packages installed to match every kernel on your system.
|
||||||
|
zfs-modules-devel-<verion>-<kernel>.arch.rpm
|
||||||
|
- Binary rpm containing development header and module symbols needed
|
||||||
|
for building additional kernel modules which are dependent on the
|
||||||
|
zfs module stack.
|
||||||
|
|
||||||
|
* : SLES9/10 distro support added: Several significant updates to
|
||||||
|
the build system were required to support this including:
|
||||||
|
|
||||||
|
- Autoconf macros updated to be aware of the standard install
|
||||||
|
locations for SLES kernel sources and build objects. Additionally
|
||||||
|
changes were made to support multiple names for Module{s}.symvers.
|
||||||
|
- By default on SLES all user space builds are 32-bit even on
|
||||||
|
64-bit arches. This means we need to be careful to pass -m64 in
|
||||||
|
the autoconf checks which probe the kernel. Additionally,
|
||||||
|
ioctl_compat handles still need to be added so 32-bit user
|
||||||
|
binarys can perform ioctls with the 64-bit kernel.
|
||||||
|
|
||||||
|
* : Powerpc64 support added:
|
||||||
|
|
||||||
|
- 64-bit user space atomic support for power64 was obtained from
|
||||||
|
an old version of OpenSolaris which offered minimal powerpc support.
|
||||||
|
The atomic support is not 100% fully implemented but it's a good
|
||||||
|
first step towards cleanly supporting the architecture.
|
||||||
|
- Added powerpc ISA type.
|
||||||
|
- Explicitly use signed char for portability. On x86/x86_64
|
||||||
|
systems the default char type is signed, on ppc/ppc64 systems
|
||||||
|
the default char type is unsigned.
|
||||||
|
- Core target arch support for conditional compilation of SUBDIRs.
|
||||||
|
Required by libspl for its arch specific atomic implementations.
|
||||||
|
|
||||||
|
* COPYRIGHT: Readded accidentally dropped COPYRIGHT, it just
|
||||||
|
references the OPENSOLARIS.LICENSE which was still in the project.
|
||||||
|
|
||||||
|
* module/zfs/dmu_tx.c: Add EXPORT_SYMBOL(dmu_tx_callback_register).
|
||||||
|
|
||||||
|
* config/user-zlib.m4: Add basic zlib autoconf check for user space.
|
||||||
|
|
||||||
|
2009-03-20 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.4.3 - Use 'git log --no-merges' for full change log.
|
||||||
|
|
||||||
|
* : Rebased to ZFS b108 from OpenSolaris
|
||||||
|
|
||||||
|
* configure.ac, *Makefile.am: Build system update. This includes
|
||||||
|
resolving various build issues and adding support for the remaining
|
||||||
|
common build targets. Available targets now include:
|
||||||
|
|
||||||
|
- make all # Build everything
|
||||||
|
- make install # Install everything
|
||||||
|
- make clean # Clean up build products
|
||||||
|
- make distclean # Clean up everything
|
||||||
|
- make dist # Create package tarball
|
||||||
|
- make srpm # Create package source RPM
|
||||||
|
- make rpm # Create package binary RPMs
|
||||||
|
- make tags # Create ctags and etags for everything
|
||||||
|
|
||||||
|
Extra care was taken to ensure that the source RPMs are fully
|
||||||
|
rebuildable against Fedora/RHEL/Chaos kernels. To build binary
|
||||||
|
RPMs from the source RPM for your system simply run:
|
||||||
|
|
||||||
|
rpmbuild --rebuild zfs-x.y.z-1.src.rpm
|
||||||
|
|
||||||
|
This will produce two binary RPMs with correct 'requires'
|
||||||
|
dependencies for your kernel. One will contain all zfs modules
|
||||||
|
and support utilities, the other is a devel package for compiling
|
||||||
|
additional kernel modules which are dependent on the zfs.
|
||||||
|
|
||||||
|
zfs-x.y.z-1_<kernel version>.x86_64.rpm
|
||||||
|
zfs-devel-x.y.2-1_<kernel version>.x86_64.rpm
|
||||||
|
|
||||||
|
* config/kernel.m4, config/Rules.am: Removed the build options
|
||||||
|
-Wno-unused -Wno-missing -Wno-unused -Wno-parentheses and
|
||||||
|
-Wno-unknown-pragmas. All upstream warnings which were being
|
||||||
|
suppressed by these options are now handled in the matching
|
||||||
|
gcc-* topic branch.
|
||||||
|
|
||||||
|
* zpios: Various zpios and test infrastructure improvements.
|
||||||
|
|
||||||
|
* feature-commit-cb: New feature commit callbacks.
|
||||||
|
|
||||||
|
* : Various bug fixes which are more clearly detailed in the
|
||||||
|
git commit logs. For a detailed summary of changes post version
|
||||||
|
0.4.2, check out the 'top' topic branch and view the commit logs.
|
||||||
|
|
||||||
|
git checkout top
|
||||||
|
git log --no-merges -53
|
||||||
|
|
||||||
|
2009-02-05 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.4.2
|
||||||
|
|
||||||
|
* lib/libzfs/libzfs_util.c: Remove mknod() this is now handled by
|
||||||
|
by the SPL with an upcall even without GPL-only symbols.
|
||||||
|
|
||||||
|
* module/zfs/vdev_diskc: Updated linux vdev_disk interfaces to issue
|
||||||
|
multiple bios if needed due to the maximum request size being smaller
|
||||||
|
than the request size passed down from the spa.
|
||||||
|
|
||||||
|
* scripts/zpool-config/lo-*: Add loopback based test configs.
|
||||||
|
|
||||||
|
2009-01-21 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.4.1
|
||||||
|
|
||||||
|
* : Rebased to ZFS b105 from OpenSolaris
|
||||||
|
|
||||||
|
* : Restructured project and build system to more closely
|
||||||
|
mirror the code organization used in OpenSolaris. This
|
||||||
|
allows us minimize the changes to upstream source needed,
|
||||||
|
and allows concurrent user+kernel space builds of all components.
|
||||||
|
|
||||||
|
2008-11-19 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.4.0
|
||||||
|
|
||||||
|
* : ZFS project migrated from Subversion which leveraged a
|
||||||
|
quilt based patch stack to Git and a TopGit managed patch
|
||||||
|
stack. The new method treats all patches as Git branches
|
||||||
|
which can be more easily shared for distributed development.
|
||||||
|
Consult the top level GIT file for detailed information on
|
||||||
|
how to properly develop for this package using Git+TopGit.
|
||||||
|
|
||||||
|
2008-11-12 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.3.4
|
||||||
|
|
||||||
|
* zfs-07-create-dev-zfs.patch:
|
||||||
|
Ricardo M. Correia <Ricardo.M.Correia@sun.com>
|
||||||
|
- Make libzfs create /dev/zfs if it doesn't exist.
|
||||||
|
|
||||||
|
* zfs-05-check-zvol-size.patch:
|
||||||
|
Ricardo M. Correia <Ricardo.M.Correia@sun.com>
|
||||||
|
- Properly check zvol size under Linux.
|
||||||
|
|
||||||
|
* zfs-04-no-openat-fdopendir.patch:
|
||||||
|
Ricardo M. Correia <Ricardo.M.Correia@sun.com>
|
||||||
|
- Do not use openat() and fdopendir() since they are not available
|
||||||
|
on older systems.
|
||||||
|
|
||||||
|
* zfs-03-fix-bio-sync.patch:
|
||||||
|
Ricardo M. Correia <Ricardo.M.Correia@sun.com>
|
||||||
|
- Fix memory corruption in RHEL4 due to synchronous IO becoming
|
||||||
|
asynchronous.
|
||||||
|
|
||||||
|
2008-11-06 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* zfs-02-zpios-fix-stuck-thread-memleak.patch:
|
||||||
|
Ricardo M. Correia <Ricardo.M.Correia@sun.com>
|
||||||
|
- Fix stuck threads and memory leaks when errors occur while writing.
|
||||||
|
|
||||||
|
* zfs-01-zpios-arg-corruption.patch:
|
||||||
|
Ricardo M. Correia <Ricardo.M.Correia@sun.com>
|
||||||
|
- Fix zpios cmd line argument corruption problem.
|
||||||
|
|
||||||
|
* zfs-00-minor-fixes.patch:
|
||||||
|
Ricardo M. Correia <Ricardo.M.Correia@sun.com>
|
||||||
|
- Minor build system improvements
|
||||||
|
- Minor script improvements
|
||||||
|
- Create a full copy and not a link tree with quilt
|
||||||
|
- ZPIOS_MAJOR changed from 231 to 232
|
||||||
|
- BIO_RW_BARRIER flag removed from IO request
|
||||||
|
|
||||||
|
2008-06-30 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.3.3
|
||||||
|
|
||||||
|
* : Minor script updates and tweaks to be compatible with
|
||||||
|
the latest version of the SPL.
|
||||||
|
|
||||||
|
2008-06-13 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* vdev_disk.diff: Replace vdev_disk implementation which was
|
||||||
|
based on the kmalloc'ed logical address space with a version
|
||||||
|
which works with vmalloc'ed memory in the virtual address space.
|
||||||
|
This was done to support the new SPL slab implementation which
|
||||||
|
is based on virtual addresses to avoid the need for contigeously
|
||||||
|
allocated memory.
|
||||||
|
|
||||||
|
2008-06-05 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* arc-vm-integration.diff: Reduce maximum default arc memory
|
||||||
|
usage to 1/4 of total system memory. Because all the bulk data
|
||||||
|
is still allocated on the slab memory fragmentation is a serious
|
||||||
|
concern. To address this in the short term we simply need to
|
||||||
|
leave lots of free memory.
|
||||||
|
|
||||||
|
* fix-stack.diff: First step towards reducing stack usage so
|
||||||
|
we can run the full ZFS stack using a stock kernel.
|
||||||
|
|
||||||
|
2008-06-04 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.3.2
|
||||||
|
|
||||||
|
* : Extensive improvements to the build system to detect kernel
|
||||||
|
API changes so we can flexibly build with a wider range of kernel
|
||||||
|
versions. The code has now been testing with the 2.6.18-32chaos
|
||||||
|
and 2.6.25.3-18.fc9 kernels, however we should also be compatible
|
||||||
|
with other kernels in the range of 2.6.18-2.6.25. The only
|
||||||
|
remaining issue preventing us from running with a stock
|
||||||
|
kernel is ZFS stack usage.
|
||||||
|
|
||||||
|
2008-05-21 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.3.1
|
||||||
|
|
||||||
|
* : License headers including URCL added for release.
|
||||||
|
|
||||||
|
2008-05-21 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Tag zfs-0.3.0
|
||||||
|
|
||||||
|
* configure.ac: Improved autotools support and configurable debug.
|
||||||
|
|
||||||
|
2008-05-15 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : Updating original ZFS sources to build 89 which
|
||||||
|
includes the new write throttling changes plus support
|
||||||
|
for using ZFS as your root device. Neither of which
|
||||||
|
will work exactly right without some more work but this
|
||||||
|
gets us much closers to the latest source.
|
||||||
|
|
||||||
|
|
||||||
|
2008-02-28 Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
|
||||||
|
* : First attempt based on SPL module and zfs-lustre sources
|
|
@ -0,0 +1,8 @@
|
||||||
|
Meta: 1
|
||||||
|
Name: zfs
|
||||||
|
Branch: 1.0
|
||||||
|
Version: 0.5.0
|
||||||
|
Release: 1
|
||||||
|
Release-Tags: relext
|
||||||
|
License: CDDL
|
||||||
|
Author: Sun Microsystems/Oracle, Lawrence Livermore National Laboratory
|
|
@ -0,0 +1,56 @@
|
||||||
|
include $(top_srcdir)/config/rpm.am
|
||||||
|
include ${top_srcdir}/config/deb.am
|
||||||
|
include ${top_srcdir}/config/tgz.am
|
||||||
|
|
||||||
|
if CONFIG_USER
|
||||||
|
USER_DIR = config etc man scripts lib cmd
|
||||||
|
endif
|
||||||
|
if CONFIG_KERNEL
|
||||||
|
KERNEL_DIR = module
|
||||||
|
endif
|
||||||
|
SUBDIRS = $(USER_DIR) $(KERNEL_DIR)
|
||||||
|
|
||||||
|
AUTOMAKE_OPTIONS = foreign dist-zip
|
||||||
|
EXTRA_DIST = autogen.sh zfs.spec.in zfs-modules.spec.in
|
||||||
|
EXTRA_DIST += config/config.awk config/rpm.am config/deb.am config/tgz.am
|
||||||
|
EXTRA_DIST += META DISCLAIMER COPYRIGHT GIT README.markdown
|
||||||
|
EXTRA_DIST += OPENSOLARIS.LICENSE ZFS.RELEASE
|
||||||
|
|
||||||
|
noinst_HEADERS = zfs_config.h
|
||||||
|
|
||||||
|
distclean-local::
|
||||||
|
-$(RM) -R autom4te*.cache
|
||||||
|
-find . \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \
|
||||||
|
-o -name .pc -o -name .hg -o -name .git \) -prune -o \
|
||||||
|
\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
|
||||||
|
-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
|
||||||
|
-o -name '.*.rej' -o -name 'aclocal.m4' -o -size 0 \
|
||||||
|
-o -name '*%' -o -name '.*.cmd' -o -name 'core' \
|
||||||
|
-o -name 'Makefile' -o -name 'Module.symvers' \
|
||||||
|
-o -name '*.order' -o -name '*.markers' \
|
||||||
|
-o -name '.script-config' \) \
|
||||||
|
-type f -print | xargs $(RM)
|
||||||
|
|
||||||
|
if CONFIG_KERNEL
|
||||||
|
install-data-local:
|
||||||
|
destname=zfs-$(ZFS_META_VERSION)/$(LINUX_VERSION); \
|
||||||
|
instdest=$(DESTDIR)/usr/src/$$destname; \
|
||||||
|
echo "${ZFS_META_VERSION}" >$$instdest/zfs.release; \
|
||||||
|
for instfile in $(noinst_HEADERS) module/$(LINUX_SYMBOLS); do \
|
||||||
|
$(INSTALL) -D $$instfile $$instdest/$$instfile; \
|
||||||
|
done
|
||||||
|
endif
|
||||||
|
|
||||||
|
ctags:
|
||||||
|
$(RM) $(top_srcdir)/tags
|
||||||
|
find $(top_srcdir) -name .git -prune -o -name '*.[hc]' | xargs ctags
|
||||||
|
|
||||||
|
etags:
|
||||||
|
$(RM) $(top_srcdir)/TAGS
|
||||||
|
find $(top_srcdir) -name .pc -prune -o -name '*.[hc]' | xargs etags -a
|
||||||
|
|
||||||
|
tags: ctags etags
|
||||||
|
|
||||||
|
pkg: @DEFAULT_PACKAGE@
|
||||||
|
pkg-modules: @DEFAULT_PACKAGE@-modules
|
||||||
|
pkg-utils: @DEFAULT_PACKAGE@-utils
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
aclocal -I config &&
|
||||||
|
libtoolize --automake --copy
|
||||||
|
autoheader &&
|
||||||
|
automake --add-missing --include-deps --copy
|
||||||
|
autoconf
|
||||||
|
rm -rf autom4te.cache aclocal.m4
|
|
@ -0,0 +1 @@
|
||||||
|
SUBDIRS = zfs zpool zpool_id zpool_layout zdb zinject ztest
|
|
@ -0,0 +1,31 @@
|
||||||
|
include $(top_srcdir)/config/Rules.am
|
||||||
|
|
||||||
|
DEFAULT_INCLUDES += \
|
||||||
|
-I${top_srcdir}/lib/libspl/include \
|
||||||
|
-I${top_srcdir}/lib/libefi/include \
|
||||||
|
-I${top_srcdir}/lib/libzpool/include \
|
||||||
|
-I${top_srcdir}/lib/libnvpair/include \
|
||||||
|
-I${top_srcdir}/lib/libzfs/include \
|
||||||
|
-I${top_srcdir}/module/zfs/include \
|
||||||
|
-I${top_srcdir}/module/zcommon/include \
|
||||||
|
-I${top_srcdir}/module/nvpair/include \
|
||||||
|
-I${top_srcdir}/module/avl/include \
|
||||||
|
-I${top_srcdir}/module/unicode/include
|
||||||
|
|
||||||
|
sbin_PROGRAMS = zdb
|
||||||
|
|
||||||
|
zdb_SOURCES = \
|
||||||
|
${top_srcdir}/cmd/zdb/zdb.c \
|
||||||
|
${top_srcdir}/cmd/zdb/zdb_il.c
|
||||||
|
|
||||||
|
zdb_LDADD = \
|
||||||
|
$(top_builddir)/lib/libspl/libspl.la \
|
||||||
|
$(top_builddir)/lib/libavl/libavl.la \
|
||||||
|
$(top_builddir)/lib/libefi/libefi.la \
|
||||||
|
$(top_builddir)/lib/libnvpair/libnvpair.la \
|
||||||
|
$(top_builddir)/lib/libunicode/libunicode.la \
|
||||||
|
$(top_builddir)/lib/libuutil/libuutil.la \
|
||||||
|
$(top_builddir)/lib/libzpool/libzpool.la \
|
||||||
|
$(top_builddir)/lib/libzfs/libzfs.la
|
||||||
|
|
||||||
|
zdb_LDFLAGS = -pthread -lm $(ZLIB) -lrt $(LIBUUID) $(LIBBLKID)
|
|
@ -0,0 +1,32 @@
|
||||||
|
include $(top_srcdir)/config/Rules.am
|
||||||
|
|
||||||
|
DEFAULT_INCLUDES += \
|
||||||
|
-I${top_srcdir}/lib/libspl/include \
|
||||||
|
-I${top_srcdir}/lib/libefi/include \
|
||||||
|
-I${top_srcdir}/lib/libuutil/include \
|
||||||
|
-I${top_srcdir}/lib/libzfs/include \
|
||||||
|
-I${top_srcdir}/lib/libnvpair/include \
|
||||||
|
-I${top_srcdir}/module/zcommon/include \
|
||||||
|
-I${top_srcdir}/module/nvpair/include \
|
||||||
|
-I${top_srcdir}/module/avl/include \
|
||||||
|
-I${top_srcdir}/module/unicode/include
|
||||||
|
|
||||||
|
sbin_PROGRAMS = zfs
|
||||||
|
|
||||||
|
zfs_SOURCES = \
|
||||||
|
${top_srcdir}/cmd/zfs/zfs_iter.c \
|
||||||
|
${top_srcdir}/cmd/zfs/zfs_iter.h \
|
||||||
|
${top_srcdir}/cmd/zfs/zfs_main.c \
|
||||||
|
${top_srcdir}/cmd/zfs/zfs_util.h
|
||||||
|
|
||||||
|
zfs_LDADD = \
|
||||||
|
$(top_builddir)/lib/libspl/libspl.la \
|
||||||
|
$(top_builddir)/lib/libavl/libavl.la \
|
||||||
|
$(top_builddir)/lib/libefi/libefi.la \
|
||||||
|
$(top_builddir)/lib/libnvpair/libnvpair.la \
|
||||||
|
$(top_builddir)/lib/libunicode/libunicode.la \
|
||||||
|
$(top_builddir)/lib/libuutil/libuutil.la \
|
||||||
|
$(top_builddir)/lib/libzpool/libzpool.la \
|
||||||
|
$(top_builddir)/lib/libzfs/libzfs.la
|
||||||
|
|
||||||
|
zfs_LDFLAGS = -pthread -lm $(ZLIB) -lrt $(LIBUUID) $(LIBBLKID)
|
|
@ -0,0 +1,34 @@
|
||||||
|
include $(top_srcdir)/config/Rules.am
|
||||||
|
|
||||||
|
DEFAULT_INCLUDES += \
|
||||||
|
-I${top_srcdir}/lib/libspl/include \
|
||||||
|
-I${top_srcdir}/lib/libefi/include \
|
||||||
|
-I${top_srcdir}/lib/libzpool/include \
|
||||||
|
-I${top_srcdir}/lib/libuutil/include \
|
||||||
|
-I${top_srcdir}/lib/libzfs/include \
|
||||||
|
-I${top_srcdir}/lib/libnvpair/include \
|
||||||
|
-I${top_srcdir}/module/zfs \
|
||||||
|
-I${top_srcdir}/module/zfs/include \
|
||||||
|
-I${top_srcdir}/module/zcommon/include \
|
||||||
|
-I${top_srcdir}/module/nvpair/include \
|
||||||
|
-I${top_srcdir}/module/avl/include \
|
||||||
|
-I${top_srcdir}/module/unicode/include
|
||||||
|
|
||||||
|
sbin_PROGRAMS = zinject
|
||||||
|
|
||||||
|
zinject_SOURCES = \
|
||||||
|
${top_srcdir}/cmd/zinject/translate.c \
|
||||||
|
${top_srcdir}/cmd/zinject/zinject.c \
|
||||||
|
${top_srcdir}/cmd/zinject/zinject.h
|
||||||
|
|
||||||
|
zinject_LDADD = \
|
||||||
|
$(top_builddir)/lib/libspl/libspl.la \
|
||||||
|
$(top_builddir)/lib/libavl/libavl.la \
|
||||||
|
$(top_builddir)/lib/libefi/libefi.la \
|
||||||
|
$(top_builddir)/lib/libnvpair/libnvpair.la \
|
||||||
|
$(top_builddir)/lib/libunicode/libunicode.la \
|
||||||
|
$(top_builddir)/lib/libuutil/libuutil.la \
|
||||||
|
$(top_builddir)/lib/libzpool/libzpool.la \
|
||||||
|
$(top_builddir)/lib/libzfs/libzfs.la
|
||||||
|
|
||||||
|
zinject_LDFLAGS = -pthread -lm $(ZLIB) -lrt $(LIBUUID) $(LIBBLKID)
|
|
@ -0,0 +1,34 @@
|
||||||
|
include $(top_srcdir)/config/Rules.am
|
||||||
|
|
||||||
|
DEFAULT_INCLUDES += \
|
||||||
|
-I${top_srcdir}/lib/libspl/include \
|
||||||
|
-I${top_srcdir}/lib/libefi/include \
|
||||||
|
-I${top_srcdir}/lib/libuutil/include \
|
||||||
|
-I${top_srcdir}/lib/libzfs/include \
|
||||||
|
-I${top_srcdir}/lib/libnvpair/include \
|
||||||
|
-I${top_srcdir}/module/zcommon/include \
|
||||||
|
-I${top_srcdir}/module/zfs/include \
|
||||||
|
-I${top_srcdir}/module/nvpair/include \
|
||||||
|
-I${top_srcdir}/module/avl/include \
|
||||||
|
-I${top_srcdir}/module/unicode/include
|
||||||
|
|
||||||
|
sbin_PROGRAMS = zpool
|
||||||
|
|
||||||
|
zpool_SOURCES = \
|
||||||
|
${top_srcdir}/cmd/zpool/zpool_iter.c \
|
||||||
|
${top_srcdir}/cmd/zpool/zpool_main.c \
|
||||||
|
${top_srcdir}/cmd/zpool/zpool_util.c \
|
||||||
|
${top_srcdir}/cmd/zpool/zpool_util.h \
|
||||||
|
${top_srcdir}/cmd/zpool/zpool_vdev.c
|
||||||
|
|
||||||
|
zpool_LDADD = \
|
||||||
|
$(top_builddir)/lib/libspl/libspl.la \
|
||||||
|
$(top_builddir)/lib/libavl/libavl.la \
|
||||||
|
$(top_builddir)/lib/libefi/libefi.la \
|
||||||
|
$(top_builddir)/lib/libnvpair/libnvpair.la \
|
||||||
|
$(top_builddir)/lib/libunicode/libunicode.la \
|
||||||
|
$(top_builddir)/lib/libuutil/libuutil.la \
|
||||||
|
$(top_builddir)/lib/libzpool/libzpool.la \
|
||||||
|
$(top_builddir)/lib/libzfs/libzfs.la
|
||||||
|
|
||||||
|
zpool_LDFLAGS = -pthread -lm $(ZLIB) -lrt $(LIBUUID) $(LIBBLKID)
|
|
@ -0,0 +1 @@
|
||||||
|
dist_bin_SCRIPTS = zpool_id
|
|
@ -0,0 +1,60 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
CONFIG=${CONFIG:-/etc/zfs/zdev.conf}
|
||||||
|
PATH_ID=${PATH_ID:-/lib/udev/path_id}
|
||||||
|
AWK=${AWK:-/bin/awk}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
echo "Error: $*"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat << EOF
|
||||||
|
Usage: zpool_id [h] [-c configfile] <devpath>
|
||||||
|
-c Alternate config file [default /etc/zfs/zdev.conf]
|
||||||
|
-d Use path_id from device as the mapping key
|
||||||
|
-h Show this message
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts 'c:d:h' OPTION; do
|
||||||
|
case ${OPTION} in
|
||||||
|
c)
|
||||||
|
CONFIG=${OPTARG}
|
||||||
|
;;
|
||||||
|
d)
|
||||||
|
DEVICE=${OPTARG}
|
||||||
|
;;
|
||||||
|
h)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check that a device was requested
|
||||||
|
[ -z ${DEVICE} ] && usage
|
||||||
|
|
||||||
|
# Check for the existence of a configuration file
|
||||||
|
[ ! -f ${CONFIG} ] && die "Missing config file: ${CONFIG}"
|
||||||
|
|
||||||
|
# Use udev's path_id to generate a unique persistent key
|
||||||
|
eval `${PATH_ID} ${DEVICE}`
|
||||||
|
[ -z ${ID_PATH} ] && die "Missing ID_PATH for ${DEVICE}"
|
||||||
|
|
||||||
|
# Use the persistent key to lookup the zpool device id in the
|
||||||
|
# configuration file which is of the format <device id> <key>.
|
||||||
|
# Lines starting with #'s are treated as comments and ignored.
|
||||||
|
# Exact matches are required, wild cards are not supported,
|
||||||
|
# and only the first match is returned.
|
||||||
|
ID_ZPOOL=`${AWK} "/${ID_PATH}\>/ && !/^#/ { print \\$1; exit }" ${CONFIG}`
|
||||||
|
[ -z ${ID_ZPOOL} ] && die "Missing ID_ZPOOL for ID_PATH: ${ID_PATH}"
|
||||||
|
|
||||||
|
if [ ${ID_ZPOOL} ]; then
|
||||||
|
echo "ID_PATH=${ID_PATH}"
|
||||||
|
echo "ID_ZPOOL=${ID_ZPOOL}"
|
||||||
|
echo "ID_ZPOOL_PATH=disk/zpool/${ID_ZPOOL}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1 @@
|
||||||
|
dist_bin_SCRIPTS = zpool_layout
|
|
@ -0,0 +1,127 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Set BUSES and PORTS to match the topology of your system. As each
|
||||||
|
# port is enumerated it will be assigned the next channel name. The
|
||||||
|
# current script enumerates each port on a bus before moving on to
|
||||||
|
# enumerate the next bus.
|
||||||
|
#
|
||||||
|
# Every distribution, version of udev, and type of attached storage
|
||||||
|
# seems to result in slightly different formatting of the by-path
|
||||||
|
# name. For this reason you may need to adjust the parsing below
|
||||||
|
# to suit your needs. This is one of the reasons to use a custom
|
||||||
|
# /etc/zfs/zdev.conf file, it allows the by-path naming convertion
|
||||||
|
# to change and still keep the simple <channel><rank> naming.
|
||||||
|
#
|
||||||
|
CONFIG=${CONFIG:-/etc/zfs/zdev.conf}
|
||||||
|
BUSES=( 01 02 03 )
|
||||||
|
PORTS=( 4 0 )
|
||||||
|
CHANNELS=( A B C D E F G H I J K L M N O P Q R S T U V W X Y Z )
|
||||||
|
TRIGGER=
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat << EOF
|
||||||
|
Usage: zpool_layout [-th] [-c file] [-b buses] [-p ports] [-n channels]
|
||||||
|
-c Alternate config file [default=/etc/zfs/zdev.conf]
|
||||||
|
-b Enumerate buses [default="01 02 03"]
|
||||||
|
-p Enumerate ports [default="4 0"]
|
||||||
|
-n Channel names [default="A..Z"]
|
||||||
|
-t Trigger and wait for udev to settle [default=no]
|
||||||
|
-h Show this message
|
||||||
|
EOF
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts 'c:b:p:n:th' OPTION; do
|
||||||
|
case ${OPTION} in
|
||||||
|
c)
|
||||||
|
CONFIG=${OPTARG}
|
||||||
|
;;
|
||||||
|
b)
|
||||||
|
BUSES=(${OPTARG})
|
||||||
|
;;
|
||||||
|
p)
|
||||||
|
PORTS=(${OPTARG})
|
||||||
|
;;
|
||||||
|
n)
|
||||||
|
CHANNELS=(${OPTARG})
|
||||||
|
;;
|
||||||
|
t)
|
||||||
|
TRIGGER=1
|
||||||
|
;;
|
||||||
|
h)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Save stdout as fd #8, then redirect stdout to the config file.
|
||||||
|
exec 8>&1
|
||||||
|
exec >${CONFIG}
|
||||||
|
pushd /dev/disk/by-path >/dev/null
|
||||||
|
|
||||||
|
# Generate comment header.
|
||||||
|
echo "#"
|
||||||
|
echo "# Custom /dev/disk/by-path to /dev/disk/zpool mapping, "
|
||||||
|
echo "# based of the following physical cable layout."
|
||||||
|
echo "#"
|
||||||
|
|
||||||
|
# Generate host port layout table for comment header.
|
||||||
|
echo "# ------------------ Host Port Layout ---------------------"
|
||||||
|
echo -n "# "
|
||||||
|
for (( i=0; i<${#BUSES[*]}; i++ )); do
|
||||||
|
printf "%-8d" ${BUSES[$i]}
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
|
||||||
|
for (( i=0, k=0; i<${#PORTS[*]}; i++ )); do
|
||||||
|
printf "# Port %-2d " ${PORTS[$i]}
|
||||||
|
|
||||||
|
for (( j=0; j<${#BUSES[*]}; j++, k++ )); do
|
||||||
|
let k=$j*${#PORTS[*]}+$i
|
||||||
|
printf "%-8s" ${CHANNELS[$k]}
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
done
|
||||||
|
echo "#"
|
||||||
|
|
||||||
|
# Generate channel/disk layout table for comment header.
|
||||||
|
echo "# ----------------- Channel/Disk Layout -------------------"
|
||||||
|
echo "# Channel Disks"
|
||||||
|
for (( i=0, k=0; i<${#BUSES[*]}; i++ )); do
|
||||||
|
for (( j=0; j<${#PORTS[*]}; j++, k++ )); do
|
||||||
|
printf "# %-9s" ${CHANNELS[$k]}
|
||||||
|
ls *:${BUSES[$i]}:*:${PORTS[$j]}* 2>/dev/null | \
|
||||||
|
cut -f7 -d'-' | sort -u -n | tr '\n' ','
|
||||||
|
echo
|
||||||
|
done
|
||||||
|
done
|
||||||
|
echo "#"
|
||||||
|
|
||||||
|
# Generate mapping from <channel><rank> to by-path name.
|
||||||
|
TMP_FILE=`mktemp`
|
||||||
|
AWK=${AWK:-/bin/awk}
|
||||||
|
|
||||||
|
for (( i=0, k=0; i<${#BUSES[*]}; i++ )); do
|
||||||
|
for (( j=0; j<${#PORTS[*]}; j++, k++ )); do
|
||||||
|
ls *:${BUSES[$i]}:*:${PORTS[$j]}* 2>/dev/null | \
|
||||||
|
grep -v part | sort -n -k7 -t'-'>${TMP_FILE}
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -n "# Channel ${CHANNELS[$k]}, "
|
||||||
|
echo "Bus ${BUSES[$i]}, Port ${PORTS[$j]}"
|
||||||
|
${AWK} -F '-' -v ch="${CHANNELS[$k]}" \
|
||||||
|
'{print ch$7 "\t" $0 }' ${TMP_FILE}
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# Restore stdout from fd #8 and close fd #8.
|
||||||
|
exec 1>&8 8>&-
|
||||||
|
rm -f ${TMP_FILE}
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
if [ ${TRIGGER} ]; then
|
||||||
|
udevadm trigger
|
||||||
|
udevadm settle
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,34 @@
|
||||||
|
include $(top_srcdir)/config/Rules.am
|
||||||
|
|
||||||
|
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
|
||||||
|
|
||||||
|
DEFAULT_INCLUDES += \
|
||||||
|
-I${top_srcdir}/lib/libspl/include \
|
||||||
|
-I${top_srcdir}/lib/libefi/include \
|
||||||
|
-I${top_srcdir}/lib/libzpool/include \
|
||||||
|
-I${top_srcdir}/lib/libuutil/include \
|
||||||
|
-I${top_srcdir}/lib/libzfs/include \
|
||||||
|
-I${top_srcdir}/lib/libnvpair/include \
|
||||||
|
-I${top_srcdir}/module/zfs \
|
||||||
|
-I${top_srcdir}/module/zfs/include \
|
||||||
|
-I${top_srcdir}/module/zcommon/include \
|
||||||
|
-I${top_srcdir}/module/nvpair/include \
|
||||||
|
-I${top_srcdir}/module/avl/include \
|
||||||
|
-I${top_srcdir}/module/unicode/include
|
||||||
|
|
||||||
|
sbin_PROGRAMS = ztest
|
||||||
|
|
||||||
|
ztest_SOURCES = \
|
||||||
|
${top_srcdir}/cmd/ztest/ztest.c
|
||||||
|
|
||||||
|
ztest_LDADD = \
|
||||||
|
$(top_builddir)/lib/libspl/libspl.la \
|
||||||
|
$(top_builddir)/lib/libavl/libavl.la \
|
||||||
|
$(top_builddir)/lib/libefi/libefi.la \
|
||||||
|
$(top_builddir)/lib/libnvpair/libnvpair.la \
|
||||||
|
$(top_builddir)/lib/libunicode/libunicode.la \
|
||||||
|
$(top_builddir)/lib/libuutil/libuutil.la \
|
||||||
|
$(top_builddir)/lib/libzpool/libzpool.la \
|
||||||
|
$(top_builddir)/lib/libzfs/libzfs.la
|
||||||
|
|
||||||
|
ztest_LDFLAGS = -pthread -lm $(ZLIB) -lrt -ldl $(LIBUUID) $(LIBBLKID)
|
|
@ -0,0 +1 @@
|
||||||
|
EXTRA_DIST = *.m4 Rules.am
|
|
@ -0,0 +1,7 @@
|
||||||
|
DEFAULT_INCLUDES = -include ${top_srcdir}/zfs_config.h
|
||||||
|
|
||||||
|
AM_LIBTOOLFLAGS = --silent
|
||||||
|
AM_CFLAGS = -Wall -Wstrict-prototypes -fno-strict-aliasing ${DEBUG_CFLAGS}
|
||||||
|
AM_CFLAGS += -D_GNU_SOURCE -D__EXTENSIONS__ -D_REENTRANT
|
||||||
|
AM_CFLAGS += -D_POSIX_PTHREAD_SEMANTICS -D_FILE_OFFSET_BITS=64
|
||||||
|
AM_CFLAGS += -D_LARGEFILE64_SOURCE -DTEXT_DOMAIN=\"zfs-linux-user\"
|
|
@ -0,0 +1,15 @@
|
||||||
|
# Remove default preprocessor define's from config.h
|
||||||
|
# PACKAGE
|
||||||
|
# PACKAGE_BUGREPORT
|
||||||
|
# PACKAGE_NAME
|
||||||
|
# PACKAGE_STRING
|
||||||
|
# PACKAGE_TARNAME
|
||||||
|
# PACKAGE_VERSION
|
||||||
|
# STDC_HEADERS
|
||||||
|
# VERSION
|
||||||
|
|
||||||
|
BEGIN { RS = "" ; FS = "\n" } \
|
||||||
|
!/.#define PACKAGE./ && \
|
||||||
|
!/.#define VERSION./ && \
|
||||||
|
!/.#define STDC_HEADERS./ \
|
||||||
|
{ print $0"\n" }
|
|
@ -0,0 +1,37 @@
|
||||||
|
deb-local:
|
||||||
|
@(if test "${HAVE_DPKGBUILD}" = "no"; then \
|
||||||
|
echo -e "\n" \
|
||||||
|
"*** Required util ${DPKGBUILD} missing. Please install the\n" \
|
||||||
|
"*** package for your distribution which provides ${DPKGBUILD},\n" \
|
||||||
|
"*** re-run configure, and try again.\n"; \
|
||||||
|
exit 1; \
|
||||||
|
fi; \
|
||||||
|
if test "${HAVE_ALIEN}" = "no"; then \
|
||||||
|
echo -e "\n" \
|
||||||
|
"*** Required util ${ALIEN} missing. Please install the\n" \
|
||||||
|
"*** package for your distribution which provides ${ALIEN},\n" \
|
||||||
|
"*** re-run configure, and try again.\n"; \
|
||||||
|
exit 1; \
|
||||||
|
fi)
|
||||||
|
|
||||||
|
deb-modules: deb-local rpm-modules
|
||||||
|
name=${PACKAGE}-modules; \
|
||||||
|
version=${ZFS_META_VERSION}-${ZFS_META_RELEASE}; \
|
||||||
|
release=`echo ${LINUX_VERSION} | $(SED) -e "s/-/_/g"`; \
|
||||||
|
arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch}`; \
|
||||||
|
pkg1=$${name}-$${version}_$${release}.$${arch}.rpm; \
|
||||||
|
pkg2=$${name}-devel-$${version}_$${release}.$${arch}.rpm; \
|
||||||
|
fakeroot $(ALIEN) --scripts --to-deb $$pkg1 $$pkg2; \
|
||||||
|
$(RM) $$pkg1 $$pkg2
|
||||||
|
|
||||||
|
deb-utils: deb-local rpm-utils
|
||||||
|
name=${PACKAGE}; \
|
||||||
|
version=${ZFS_META_VERSION}-${ZFS_META_RELEASE}; \
|
||||||
|
arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch}`; \
|
||||||
|
pkg1=$${name}-$${version}.$${arch}.rpm; \
|
||||||
|
pkg2=$${name}-devel-$${version}.$${arch}.rpm; \
|
||||||
|
pkg3=$${name}-test-$${version}.$${arch}.rpm; \
|
||||||
|
fakeroot $(ALIEN) --scripts --to-deb $$pkg1 $$pkg2 $$pkg3; \
|
||||||
|
$(RM) $$pkg1 $$pkg2 $$pkg3
|
||||||
|
|
||||||
|
deb: deb-modules deb-utils
|
|
@ -0,0 +1,33 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.x API change
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_BDEV_BLOCK_DEVICE_OPERATIONS], [
|
||||||
|
AC_MSG_CHECKING([block device operation prototypes])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
],[
|
||||||
|
int (*blk_open) (struct block_device *, fmode_t) = NULL;
|
||||||
|
int (*blk_release) (struct gendisk *, fmode_t) = NULL;
|
||||||
|
int (*blk_ioctl) (struct block_device *, fmode_t,
|
||||||
|
unsigned, unsigned long) = NULL;
|
||||||
|
int (*blk_compat_ioctl) (struct block_device *, fmode_t,
|
||||||
|
unsigned, unsigned long) = NULL;
|
||||||
|
struct block_device_operations blk_ops = {
|
||||||
|
.open = blk_open,
|
||||||
|
.release = blk_release,
|
||||||
|
.ioctl = blk_ioctl,
|
||||||
|
.compat_ioctl = blk_compat_ioctl,
|
||||||
|
};
|
||||||
|
|
||||||
|
blk_ops.open(NULL, 0);
|
||||||
|
blk_ops.release(NULL, 0);
|
||||||
|
blk_ops.ioctl(NULL, 0, 0, 0);
|
||||||
|
blk_ops.compat_ioctl(NULL, 0, 0, 0);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(struct block_device)
|
||||||
|
AC_DEFINE(HAVE_BDEV_BLOCK_DEVICE_OPERATIONS, 1,
|
||||||
|
[struct block_device_operations use bdevs])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(struct inode)
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,22 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.30 API change
|
||||||
|
dnl # bdev_hardsect_size() replaced with bdev_logical_block_size(). While
|
||||||
|
dnl # it has been true for a while that there was no strict 1:1 mapping
|
||||||
|
dnl # between physical sector size and logical block size this change makes
|
||||||
|
dnl # it explicit.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_BDEV_LOGICAL_BLOCK_SIZE], [
|
||||||
|
AC_MSG_CHECKING([whether bdev_logical_block_size() is available])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
],[
|
||||||
|
struct block_device *bdev = NULL;
|
||||||
|
bdev_logical_block_size(bdev);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_BDEV_LOGICAL_BLOCK_SIZE, 1,
|
||||||
|
[bdev_logical_block_size() is available])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,20 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.24 API change
|
||||||
|
dnl # Empty write barriers are now supported and we should use them.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_BIO_EMPTY_BARRIER], [
|
||||||
|
AC_MSG_CHECKING([whether bio_empty_barrier() is defined])
|
||||||
|
EXTRA_KCFLAGS="-Werror"
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/bio.h>
|
||||||
|
],[
|
||||||
|
struct bio bio;
|
||||||
|
(void)bio_empty_barrier(&bio);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_BIO_EMPTY_BARRIER, 1,
|
||||||
|
[bio_empy_barrier() is defined])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,29 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.24 API change
|
||||||
|
dnl # Size argument dropped from bio_endio and bi_end_io, because the
|
||||||
|
dnl # bi_end_io is only called once now when the request is complete.
|
||||||
|
dnl # There is no longer any need for a size argument. This also means
|
||||||
|
dnl # that partial IO's are no longer possibe and the end_io callback
|
||||||
|
dnl # should not check bi->bi_size. Finally, the return type was updated
|
||||||
|
dnl # to void.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_BIO_END_IO_T_ARGS], [
|
||||||
|
AC_MSG_CHECKING([whether bio_end_io_t wants 2 args])
|
||||||
|
tmp_flags="$EXTRA_KCFLAGS"
|
||||||
|
EXTRA_KCFLAGS="-Werror"
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/bio.h>
|
||||||
|
],[
|
||||||
|
void (*wanted_end_io)(struct bio *, int) = NULL;
|
||||||
|
bio_end_io_t *local_end_io;
|
||||||
|
|
||||||
|
local_end_io = wanted_end_io;
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_2ARGS_BIO_END_IO_T, 1,
|
||||||
|
[bio_end_io_t wants 2 args])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
EXTRA_KCFLAGS="$tmp_flags"
|
||||||
|
])
|
|
@ -0,0 +1,19 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.29 API change
|
||||||
|
dnl # BIO_RW_SYNC renamed to BIO_RW_SYNCIO
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_BIO_RW_SYNCIO], [
|
||||||
|
AC_MSG_CHECKING([whether BIO_RW_SYNCIO is defined])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/bio.h>
|
||||||
|
],[
|
||||||
|
int flags;
|
||||||
|
flags = BIO_RW_SYNCIO;
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_BIO_RW_SYNCIO, 1,
|
||||||
|
[BIO_RW_SYNCIO is defined])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,37 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.31 API change
|
||||||
|
dnl # In 2.6.29 kernels blk_end_request() was a GPL-only symbol, this was
|
||||||
|
dnl # changed in 2.6.31 so it may be used by non-GPL modules.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_BLK_END_REQUEST], [
|
||||||
|
AC_MSG_CHECKING([whether blk_end_request() is available])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
],[
|
||||||
|
struct request *req = NULL;
|
||||||
|
(void) blk_end_request(req, 0, 0);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_BLK_END_REQUEST, 1,
|
||||||
|
[blk_end_request() is available])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether blk_end_request() is GPL-only])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
|
||||||
|
MODULE_LICENSE("CDDL");
|
||||||
|
],[
|
||||||
|
struct request *req = NULL;
|
||||||
|
(void) blk_end_request(req, 0, 0);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_BLK_END_REQUEST_GPL_ONLY, 1,
|
||||||
|
[blk_end_request() is GPL-only])
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,22 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.31 API change
|
||||||
|
dnl # Request queue peek/retrieval interface cleanup, the blk_fetch_request()
|
||||||
|
dnl # function replaces the elv_next_request() and blk_fetch_request()
|
||||||
|
dnl # functions. The updated blk_fetch_request() function returns the
|
||||||
|
dnl # next available request and removed it from the request queue.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_BLK_FETCH_REQUEST], [
|
||||||
|
AC_MSG_CHECKING([whether blk_fetch_request() is available])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
],[
|
||||||
|
struct request_queue *q = NULL;
|
||||||
|
(void) blk_fetch_request(q);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_BLK_FETCH_REQUEST, 1,
|
||||||
|
[blk_fetch_request() is available])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,22 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.31 API change
|
||||||
|
dnl # Request queue peek/retrieval interface cleanup, the
|
||||||
|
dnl # elv_requeue_request() function has been replaced with the
|
||||||
|
dnl # blk_requeue_request() function.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_BLK_REQUEUE_REQUEST], [
|
||||||
|
AC_MSG_CHECKING([whether blk_requeue_request() is available])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
],[
|
||||||
|
struct request_queue *q = NULL;
|
||||||
|
struct request *req = NULL;
|
||||||
|
blk_requeue_request(q, req);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_BLK_REQUEUE_REQUEST, 1,
|
||||||
|
[blk_requeue_request() is available])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,38 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.29 API change
|
||||||
|
dnl # In the 2.6.29 kernel blk_rq_bytes() was available as a GPL-only symbol.
|
||||||
|
dnl # So we need to check the symbol license as well. As of 2.6.31 the
|
||||||
|
dnl blk_rq_bytes() helper was changed to a static inline which we can use.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_BLK_RQ_BYTES], [
|
||||||
|
AC_MSG_CHECKING([whether blk_rq_bytes() is available])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
],[
|
||||||
|
struct request *req = NULL;
|
||||||
|
(void) blk_rq_bytes(req);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_BLK_RQ_BYTES, 1,
|
||||||
|
[blk_rq_bytes() is available])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether blk_rq_bytes() is GPL-only])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
|
||||||
|
MODULE_LICENSE("CDDL");
|
||||||
|
],[
|
||||||
|
struct request *req = NULL;
|
||||||
|
(void) blk_rq_bytes(req);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_BLK_RQ_BYTES_GPL_ONLY, 1,
|
||||||
|
[blk_rq_bytes() is GPL-only])
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,18 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.31 API change
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_BLK_RQ_POS], [
|
||||||
|
AC_MSG_CHECKING([whether blk_rq_pos() is available])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
],[
|
||||||
|
struct request *req = NULL;
|
||||||
|
(void) blk_rq_pos(req);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_BLK_RQ_POS, 1,
|
||||||
|
[blk_rq_pos() is available])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,18 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.31 API change
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_BLK_RQ_SECTORS], [
|
||||||
|
AC_MSG_CHECKING([whether blk_rq_sectors() is available])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
],[
|
||||||
|
struct request *req = NULL;
|
||||||
|
(void) blk_rq_sectors(req);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_BLK_RQ_SECTORS, 1,
|
||||||
|
[blk_rq_sectors() is available])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,18 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.28 API change,
|
||||||
|
dnl # check if fmode_t typedef is defined
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_TYPE_FMODE_T],
|
||||||
|
[AC_MSG_CHECKING([whether kernel defines fmode_t])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/types.h>
|
||||||
|
],[
|
||||||
|
fmode_t *ptr;
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
AC_DEFINE(HAVE_FMODE_T, 1,
|
||||||
|
[kernel defines fmode_t])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,18 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.x API change
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_GET_DISK_RO], [
|
||||||
|
AC_MSG_CHECKING([whether get_disk_ro() is available])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
],[
|
||||||
|
struct gendisk *disk = NULL;
|
||||||
|
(void) get_disk_ro(disk);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_GET_DISK_RO, 1,
|
||||||
|
[blk_disk_ro() is available])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,19 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.22 API change
|
||||||
|
dnl # Unused destroy_dirty_buffers arg removed from prototype.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_INVALIDATE_BDEV_ARGS], [
|
||||||
|
AC_MSG_CHECKING([whether invalidate_bdev() wants 1 arg])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/buffer_head.h>
|
||||||
|
],[
|
||||||
|
struct block_device *bdev;
|
||||||
|
invalidate_bdev(bdev);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_1ARG_INVALIDATE_BDEV, 1,
|
||||||
|
[invalidate_bdev() wants 1 arg])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,21 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.27 API change,
|
||||||
|
dnl # kobject KOBJ_NAME_LEN static limit removed. All users of this
|
||||||
|
dnl # constant were removed prior to 2.6.27, but to be on the safe
|
||||||
|
dnl # side this check ensures the constant is undefined.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_KOBJ_NAME_LEN], [
|
||||||
|
AC_MSG_CHECKING([whether kernel defines KOBJ_NAME_LEN])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/kobject.h>
|
||||||
|
],[
|
||||||
|
int val;
|
||||||
|
val = KOBJ_NAME_LEN;
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
AC_DEFINE(HAVE_KOBJ_NAME_LEN, 1,
|
||||||
|
[kernel defines KOBJ_NAME_LEN])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,12 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.28 API change
|
||||||
|
dnl # open/close_bdev_excl() renamed to open/close_bdev_exclusive()
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_OPEN_BDEV_EXCLUSIVE], [
|
||||||
|
ZFS_CHECK_SYMBOL_EXPORT(
|
||||||
|
[open_bdev_exclusive],
|
||||||
|
[fs/block_dev.c],
|
||||||
|
[AC_DEFINE(HAVE_OPEN_BDEV_EXCLUSIVE, 1,
|
||||||
|
[open_bdev_exclusive() is available])],
|
||||||
|
[])
|
||||||
|
])
|
|
@ -0,0 +1,20 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.x API change
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_RQ_FOR_EACH_SEGMENT], [
|
||||||
|
AC_MSG_CHECKING([whether rq_for_each_segment() is available])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
],[
|
||||||
|
struct bio_vec *bv;
|
||||||
|
struct req_iterator iter;
|
||||||
|
struct request *req = NULL;
|
||||||
|
rq_for_each_segment(bv, req, iter) { }
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_RQ_FOR_EACH_SEGMENT, 1,
|
||||||
|
[rq_for_each_segment() is available])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,18 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 2.6.x API change
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_RQ_IS_SYNC], [
|
||||||
|
AC_MSG_CHECKING([whether rq_is_sync() is available])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
],[
|
||||||
|
struct request *req = NULL;
|
||||||
|
(void) rq_is_sync(req);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_RQ_IS_SYNC, 1,
|
||||||
|
[rq_is_sync() is available])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,390 @@
|
||||||
|
dnl #
|
||||||
|
dnl # Default ZFS kernel configuration
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
|
||||||
|
ZFS_AC_KERNEL
|
||||||
|
ZFS_AC_SPL
|
||||||
|
ZFS_AC_KERNEL_CONFIG
|
||||||
|
ZFS_AC_KERNEL_BDEV_BLOCK_DEVICE_OPERATIONS
|
||||||
|
ZFS_AC_KERNEL_TYPE_FMODE_T
|
||||||
|
ZFS_AC_KERNEL_KOBJ_NAME_LEN
|
||||||
|
ZFS_AC_KERNEL_OPEN_BDEV_EXCLUSIVE
|
||||||
|
ZFS_AC_KERNEL_INVALIDATE_BDEV_ARGS
|
||||||
|
ZFS_AC_KERNEL_BDEV_LOGICAL_BLOCK_SIZE
|
||||||
|
ZFS_AC_KERNEL_BIO_EMPTY_BARRIER
|
||||||
|
ZFS_AC_KERNEL_BIO_END_IO_T_ARGS
|
||||||
|
ZFS_AC_KERNEL_BIO_RW_SYNCIO
|
||||||
|
ZFS_AC_KERNEL_BLK_END_REQUEST
|
||||||
|
ZFS_AC_KERNEL_BLK_FETCH_REQUEST
|
||||||
|
ZFS_AC_KERNEL_BLK_REQUEUE_REQUEST
|
||||||
|
ZFS_AC_KERNEL_BLK_RQ_BYTES
|
||||||
|
ZFS_AC_KERNEL_BLK_RQ_POS
|
||||||
|
ZFS_AC_KERNEL_BLK_RQ_SECTORS
|
||||||
|
ZFS_AC_KERNEL_GET_DISK_RO
|
||||||
|
ZFS_AC_KERNEL_RQ_IS_SYNC
|
||||||
|
ZFS_AC_KERNEL_RQ_FOR_EACH_SEGMENT
|
||||||
|
|
||||||
|
dnl # -Wall -fno-strict-aliasing -Wstrict-prototypes and other
|
||||||
|
dnl # compiler options are added by the kernel build system.
|
||||||
|
KERNELCPPFLAGS="$KERNELCPPFLAGS -DHAVE_SPL -D_KERNEL"
|
||||||
|
KERNELCPPFLAGS="$KERNELCPPFLAGS -DTEXT_DOMAIN=\\\"zfs-linux-kernel\\\""
|
||||||
|
KERNELCPPFLAGS="$KERNELCPPFLAGS -I$SPL"
|
||||||
|
KERNELCPPFLAGS="$KERNELCPPFLAGS -I$SPL/include"
|
||||||
|
KERNELCPPFLAGS="$KERNELCPPFLAGS -include $SPL/spl_config.h"
|
||||||
|
KERNELCPPFLAGS="$KERNELCPPFLAGS -include $TOPDIR/zfs_config.h"
|
||||||
|
|
||||||
|
if test "$LINUX_OBJ" != "$LINUX"; then
|
||||||
|
KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(KERNELMAKE_PARAMS)
|
||||||
|
AC_SUBST(KERNELCPPFLAGS)
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # Detect name used for Module.symvers file in kernel
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_MODULE_SYMVERS], [
|
||||||
|
modpost=$LINUX/scripts/Makefile.modpost
|
||||||
|
AC_MSG_CHECKING([kernel file name for module symbols])
|
||||||
|
if test -f "$modpost"; then
|
||||||
|
if grep -q Modules.symvers $modpost; then
|
||||||
|
LINUX_SYMBOLS=Modules.symvers
|
||||||
|
else
|
||||||
|
LINUX_SYMBOLS=Module.symvers
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
LINUX_SYMBOLS=NONE
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT($LINUX_SYMBOLS)
|
||||||
|
AC_SUBST(LINUX_SYMBOLS)
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # Detect the kernel to be built against
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL], [
|
||||||
|
AC_ARG_WITH([linux],
|
||||||
|
AS_HELP_STRING([--with-linux=PATH],
|
||||||
|
[Path to kernel source]),
|
||||||
|
[kernelsrc="$withval"])
|
||||||
|
|
||||||
|
AC_ARG_WITH(linux-obj,
|
||||||
|
AS_HELP_STRING([--with-linux-obj=PATH],
|
||||||
|
[Path to kernel build objects]),
|
||||||
|
[kernelbuild="$withval"])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([kernel source directory])
|
||||||
|
if test -z "$kernelsrc"; then
|
||||||
|
headersdir="/lib/modules/$(uname -r)/build"
|
||||||
|
if test -e "$headersdir"; then
|
||||||
|
sourcelink=$(readlink -f "$headersdir")
|
||||||
|
else
|
||||||
|
sourcelink=$(ls -1d /usr/src/kernels/* \
|
||||||
|
/usr/src/linux-* \
|
||||||
|
2>/dev/null | grep -v obj | tail -1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "$sourcelink" && test -e ${sourcelink}; then
|
||||||
|
kernelsrc=`readlink -f ${sourcelink}`
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([Not found])
|
||||||
|
AC_MSG_ERROR([
|
||||||
|
*** Please make sure the kernel devel package for your distribution
|
||||||
|
*** is installed then try again. If that fails you can specify the
|
||||||
|
*** location of the kernel source with the '--with-linux=PATH' option.])
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if test "$kernelsrc" = "NONE"; then
|
||||||
|
kernsrcver=NONE
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_RESULT([$kernelsrc])
|
||||||
|
AC_MSG_CHECKING([kernel build directory])
|
||||||
|
if test -z "$kernelbuild"; then
|
||||||
|
if test -d ${kernelsrc}-obj/${target_cpu}/${target_cpu}; then
|
||||||
|
kernelbuild=${kernelsrc}-obj/${target_cpu}/${target_cpu}
|
||||||
|
elif test -d ${kernelsrc}-obj/${target_cpu}/default; then
|
||||||
|
kernelbuild=${kernelsrc}-obj/${target_cpu}/default
|
||||||
|
elif test -d `dirname ${kernelsrc}`/build-${target_cpu}; then
|
||||||
|
kernelbuild=`dirname ${kernelsrc}`/build-${target_cpu}
|
||||||
|
else
|
||||||
|
kernelbuild=${kernelsrc}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$kernelbuild])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([kernel source version])
|
||||||
|
utsrelease1=$kernelbuild/include/linux/version.h
|
||||||
|
utsrelease2=$kernelbuild/include/linux/utsrelease.h
|
||||||
|
utsrelease3=$kernelbuild/include/generated/utsrelease.h
|
||||||
|
if test -r $utsrelease1 && fgrep -q UTS_RELEASE $utsrelease1; then
|
||||||
|
utsrelease=linux/version.h
|
||||||
|
elif test -r $utsrelease2 && fgrep -q UTS_RELEASE $utsrelease2; then
|
||||||
|
utsrelease=linux/utsrelease.h
|
||||||
|
elif test -r $utsrelease3 && fgrep -q UTS_RELEASE $utsrelease3; then
|
||||||
|
utsrelease=generated/utsrelease.h
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$utsrelease"; then
|
||||||
|
kernsrcver=`(echo "#include <$utsrelease>";
|
||||||
|
echo "kernsrcver=UTS_RELEASE") |
|
||||||
|
cpp -I $kernelbuild/include |
|
||||||
|
grep "^kernsrcver=" | cut -d \" -f 2`
|
||||||
|
|
||||||
|
if test -z "$kernsrcver"; then
|
||||||
|
AC_MSG_RESULT([Not found])
|
||||||
|
AC_MSG_ERROR([*** Cannot determine kernel version.])
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([Not found])
|
||||||
|
AC_MSG_ERROR([*** Cannot find UTS_RELEASE definition.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_RESULT([$kernsrcver])
|
||||||
|
|
||||||
|
LINUX=${kernelsrc}
|
||||||
|
LINUX_OBJ=${kernelbuild}
|
||||||
|
LINUX_VERSION=${kernsrcver}
|
||||||
|
|
||||||
|
AC_SUBST(LINUX)
|
||||||
|
AC_SUBST(LINUX_OBJ)
|
||||||
|
AC_SUBST(LINUX_VERSION)
|
||||||
|
|
||||||
|
ZFS_AC_MODULE_SYMVERS
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # Detect name used for the additional SPL Module.symvers file. If one
|
||||||
|
dnl # does not exist this is likely because the SPL has been configured
|
||||||
|
dnl # but not built. To allow recursive builds a good guess is made as to
|
||||||
|
dnl # what this file will be named based on what it is named in the kernel
|
||||||
|
dnl # build products. This file will first be used at link time so if
|
||||||
|
dnl # the guess is wrong the build will fail then. This unfortunately
|
||||||
|
dnl # means the ZFS package does not contain a reliable mechanism to
|
||||||
|
dnl # detect symbols exported by the SPL at configure time.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_SPL_MODULE_SYMVERS], [
|
||||||
|
AC_MSG_CHECKING([spl file name for module symbols])
|
||||||
|
if test -r $SPL_OBJ/Module.symvers; then
|
||||||
|
SPL_SYMBOLS=Module.symvers
|
||||||
|
elif test -r $SPL_OBJ/Modules.symvers; then
|
||||||
|
SPL_SYMBOLS=Modules.symvers
|
||||||
|
else
|
||||||
|
SPL_SYMBOLS=$LINUX_SYMBOLS
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_RESULT([$SPL_SYMBOLS])
|
||||||
|
AC_SUBST(SPL_SYMBOLS)
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # Detect the SPL module to be built against
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_SPL], [
|
||||||
|
AC_ARG_WITH([spl],
|
||||||
|
AS_HELP_STRING([--with-spl=PATH],
|
||||||
|
[Path to spl source]),
|
||||||
|
[splsrc="$withval"])
|
||||||
|
|
||||||
|
AC_ARG_WITH([spl-obj],
|
||||||
|
AS_HELP_STRING([--with-spl-obj=PATH],
|
||||||
|
[Path to spl build objects]),
|
||||||
|
[splbuild="$withval"])
|
||||||
|
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([spl source directory])
|
||||||
|
if test -z "$splsrc"; then
|
||||||
|
sourcelink=`ls -1d /usr/src/spl-*/${LINUX_VERSION} \
|
||||||
|
2>/dev/null | tail -1`
|
||||||
|
|
||||||
|
if test -z "$sourcelink" || test ! -e $sourcelink; then
|
||||||
|
sourcelink=../spl
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -e $sourcelink; then
|
||||||
|
splsrc=`readlink -f ${sourcelink}`
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([Not found])
|
||||||
|
AC_MSG_ERROR([
|
||||||
|
*** Please make sure the spl devel package for your distribution
|
||||||
|
*** is installed then try again. If that fails you can specify the
|
||||||
|
*** location of the spl source with the '--with-spl=PATH' option.])
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if test "$splsrc" = "NONE"; then
|
||||||
|
splbuild=NONE
|
||||||
|
splsrcver=NONE
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_RESULT([$splsrc])
|
||||||
|
AC_MSG_CHECKING([spl build directory])
|
||||||
|
if test -z "$splbuild"; then
|
||||||
|
if test -d ${splsrc}/module; then
|
||||||
|
splbuild=${splsrc}/module
|
||||||
|
else
|
||||||
|
splbuild=${splsrc}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$splbuild])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([spl source version])
|
||||||
|
if test -r $splsrc/spl_config.h &&
|
||||||
|
fgrep -q SPL_META_VERSION $splsrc/spl_config.h; then
|
||||||
|
|
||||||
|
splsrcver=`(echo "#include <spl_config.h>";
|
||||||
|
echo "splsrcver=SPL_META_VERSION") |
|
||||||
|
cpp -I $splsrc |
|
||||||
|
grep "^splsrcver=" | cut -d \" -f 2`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$splsrcver"; then
|
||||||
|
AC_MSG_RESULT([Not found])
|
||||||
|
AC_MSG_ERROR([
|
||||||
|
*** Cannot determine the version of the spl source.
|
||||||
|
*** Please prepare the spl source before running this script])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_RESULT([$splsrcver])
|
||||||
|
|
||||||
|
SPL=${splsrc}
|
||||||
|
SPL_OBJ=${splbuild}
|
||||||
|
SPL_VERSION=${splsrcver}
|
||||||
|
|
||||||
|
AC_SUBST(SPL)
|
||||||
|
AC_SUBST(SPL_OBJ)
|
||||||
|
AC_SUBST(SPL_VERSION)
|
||||||
|
|
||||||
|
ZFS_AC_SPL_MODULE_SYMVERS
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # There are certain kernel build options which when enabled are
|
||||||
|
dnl # completely incompatible with non GPL kernel modules. It is best
|
||||||
|
dnl # to detect these at configure time and fail with a clear error
|
||||||
|
dnl # rather than build everything and fail during linking.
|
||||||
|
dnl #
|
||||||
|
dnl # CONFIG_DEBUG_LOCK_ALLOC - Maps mutex_lock() to mutex_lock_nested()
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_CONFIG], [
|
||||||
|
|
||||||
|
if test "$ZFS_META_LICENSE" = CDDL; then
|
||||||
|
ZFS_LINUX_CONFIG([DEBUG_LOCK_ALLOC],
|
||||||
|
AC_MSG_ERROR([
|
||||||
|
*** Kernel built with CONFIG_DEBUG_LOCK_ALLOC which is
|
||||||
|
*** incompatible with the CDDL license. You must rebuild
|
||||||
|
*** your kernel without this option.]), [])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$ZFS_META_LICENSE" = GPL; then
|
||||||
|
AC_DEFINE([HAVE_GPL_ONLY_SYMBOLS], [1],
|
||||||
|
[Define to 1 if licensed under the GPL])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # ZFS_LINUX_CONFTEST
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_LINUX_CONFTEST], [
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.c
|
||||||
|
$1
|
||||||
|
_ACEOF
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # ZFS_LANG_PROGRAM(C)([PROLOGUE], [BODY])
|
||||||
|
dnl #
|
||||||
|
m4_define([ZFS_LANG_PROGRAM], [
|
||||||
|
$1
|
||||||
|
int
|
||||||
|
main (void)
|
||||||
|
{
|
||||||
|
dnl Do *not* indent the following line: there may be CPP directives.
|
||||||
|
dnl Don't move the `;' right after for the same reason.
|
||||||
|
$2
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # ZFS_LINUX_COMPILE_IFELSE / like AC_COMPILE_IFELSE
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_LINUX_COMPILE_IFELSE], [
|
||||||
|
m4_ifvaln([$1], [ZFS_LINUX_CONFTEST([$1])])
|
||||||
|
rm -Rf build && mkdir -p build
|
||||||
|
echo "obj-m := conftest.o" >build/Makefile
|
||||||
|
AS_IF(
|
||||||
|
[AC_TRY_COMMAND(cp conftest.c build && make [$2] -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
|
||||||
|
[$4],
|
||||||
|
[_AC_MSG_LOG_CONFTEST m4_ifvaln([$5],[$5])]
|
||||||
|
)
|
||||||
|
rm -Rf build
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # ZFS_LINUX_TRY_COMPILE like AC_TRY_COMPILE
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_LINUX_TRY_COMPILE],
|
||||||
|
[ZFS_LINUX_COMPILE_IFELSE(
|
||||||
|
[AC_LANG_SOURCE([ZFS_LANG_PROGRAM([[$1]], [[$2]])])],
|
||||||
|
[modules],
|
||||||
|
[test -s build/conftest.o],
|
||||||
|
[$3], [$4])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # ZFS_LINUX_CONFIG
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_LINUX_CONFIG],
|
||||||
|
[AC_MSG_CHECKING([whether Linux was built with CONFIG_$1])
|
||||||
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
|
#ifndef AUTOCONF_INCLUDED
|
||||||
|
#include <linux/config.h>
|
||||||
|
#endif
|
||||||
|
],[
|
||||||
|
#ifndef CONFIG_$1
|
||||||
|
#error CONFIG_$1 not #defined
|
||||||
|
#endif
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
$2
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
$3
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # ZFS_CHECK_SYMBOL_EXPORT
|
||||||
|
dnl # check symbol exported or not
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_CHECK_SYMBOL_EXPORT],
|
||||||
|
[AC_MSG_CHECKING([whether symbol $1 is exported])
|
||||||
|
grep -q -E '[[[:space:]]]$1[[[:space:]]]' \
|
||||||
|
$LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null
|
||||||
|
rc=$?
|
||||||
|
if test $rc -ne 0; then
|
||||||
|
export=0
|
||||||
|
for file in $2; do
|
||||||
|
grep -q -E "EXPORT_SYMBOL.*($1)" "$LINUX/$file" 2>/dev/null
|
||||||
|
rc=$?
|
||||||
|
if test $rc -eq 0; then
|
||||||
|
export=1
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if test $export -eq 0; then
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
$4
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
$3
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
$3
|
||||||
|
fi
|
||||||
|
])
|
|
@ -0,0 +1,73 @@
|
||||||
|
srpm-modules:
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-modules" srpm-common
|
||||||
|
|
||||||
|
srpm-utils:
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" srpm-common
|
||||||
|
|
||||||
|
srpm: srpm-modules srpm-utils
|
||||||
|
|
||||||
|
rpm-modules: srpm-modules
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-modules" rpm-common
|
||||||
|
|
||||||
|
rpm-utils: srpm-utils
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" rpm-common
|
||||||
|
|
||||||
|
rpm-modules: srpm-modules
|
||||||
|
|
||||||
|
rpm: rpm-modules rpm-utils
|
||||||
|
|
||||||
|
rpm-local:
|
||||||
|
@(if test "${HAVE_RPMBUILD}" = "no"; then \
|
||||||
|
echo -e "\n" \
|
||||||
|
"*** Required util ${RPMBUILD} missing. Please install the\n" \
|
||||||
|
"*** package for your distribution which provides ${RPMBUILD},\n" \
|
||||||
|
"*** re-run configure, and try again.\n"; \
|
||||||
|
exit 1; \
|
||||||
|
fi; \
|
||||||
|
mkdir -p $(rpmbuild)/TMP && \
|
||||||
|
mkdir -p $(rpmbuild)/BUILD && \
|
||||||
|
mkdir -p $(rpmbuild)/RPMS && \
|
||||||
|
mkdir -p $(rpmbuild)/SRPMS && \
|
||||||
|
mkdir -p $(rpmbuild)/SPECS && \
|
||||||
|
cp $(rpmspec) $(rpmbuild)/SPECS && \
|
||||||
|
mkdir -p $(rpmbuild)/SOURCES && \
|
||||||
|
cp $(distdir).tar.gz $(rpmbuild)/SOURCES)
|
||||||
|
|
||||||
|
srpm-common: dist
|
||||||
|
rpmpkg=$(pkg)-$(ZFS_META_VERSION)-$(ZFS_META_RELEASE).src.rpm; \
|
||||||
|
rpmspec=$(pkg).spec; \
|
||||||
|
rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) \
|
||||||
|
rpmbuild="$$rpmbuild" \
|
||||||
|
rpmspec="$$rpmspec" \
|
||||||
|
rpm-local || exit 1; \
|
||||||
|
$(RPMBUILD) \
|
||||||
|
--define "_tmppath $$rpmbuild/TMP" \
|
||||||
|
--define "_topdir $$rpmbuild" \
|
||||||
|
--define "build_src_rpm 1" \
|
||||||
|
--define "dist %{nil}" \
|
||||||
|
--nodeps -bs $$rpmbuild/SPECS/$$rpmspec || exit 1; \
|
||||||
|
cp $$rpmbuild/SRPMS/$$rpmpkg . || exit 1; \
|
||||||
|
$(RM) -R $$rpmbuild
|
||||||
|
|
||||||
|
rpm-common:
|
||||||
|
rpmpkg=$(pkg)-$(ZFS_META_VERSION)-$(ZFS_META_RELEASE).src.rpm; \
|
||||||
|
rpmspec=$(pkg).spec; \
|
||||||
|
rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) \
|
||||||
|
rpmbuild="$$rpmbuild" \
|
||||||
|
rpmspec="$$rpmspec" \
|
||||||
|
rpm-local || exit 1; \
|
||||||
|
$(RPMBUILD) \
|
||||||
|
--define "_tmppath $$rpmbuild/TMP" \
|
||||||
|
--define "_topdir $$rpmbuild" \
|
||||||
|
--define "dist %{nil}" \
|
||||||
|
--define "require_kdir $(LINUX)" \
|
||||||
|
--define "require_kobj $(LINUX_OBJ)" \
|
||||||
|
--define "require_kver $(LINUX_VERSION)" \
|
||||||
|
--define "require_spldir $(SPL)" \
|
||||||
|
--define "require_splobj $(SPL_OBJ)" \
|
||||||
|
--define "require_splver $(SPL_VERSION)" \
|
||||||
|
--nodeps --rebuild $$rpmpkg || exit 1; \
|
||||||
|
cp $$rpmbuild/RPMS/*/* . || exit 1; \
|
||||||
|
$(RM) -R $$rpmbuild
|
|
@ -0,0 +1,30 @@
|
||||||
|
tgz-local:
|
||||||
|
@(if test "${HAVE_ALIEN}" = "no"; then \
|
||||||
|
echo -e "\n" \
|
||||||
|
"*** Required util ${ALIEN} missing. Please install the\n" \
|
||||||
|
"*** package for your distribution which provides ${ALIEN},\n" \
|
||||||
|
"*** re-run configure, and try again.\n"; \
|
||||||
|
exit 1; \
|
||||||
|
fi)
|
||||||
|
|
||||||
|
tgz-modules: tgz-local rpm-modules
|
||||||
|
name=${PACKAGE}-modules; \
|
||||||
|
version=${ZFS_META_VERSION}-${ZFS_META_RELEASE}; \
|
||||||
|
release=`echo ${LINUX_VERSION} | $(SED) -e "s/-/_/g"`; \
|
||||||
|
arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch}`; \
|
||||||
|
pkg1=$${name}-$${version}_$${release}.$${arch}.rpm; \
|
||||||
|
pkg2=$${name}-devel-$${version}_$${release}.$${arch}.rpm; \
|
||||||
|
fakeroot $(ALIEN) --scripts --to-tgz $$pkg1 $$pkg2; \
|
||||||
|
$(RM) $$pkg1 $$pkg2
|
||||||
|
|
||||||
|
tgz-utils: tgz-local rpm-utils
|
||||||
|
name=${PACKAGE}; \
|
||||||
|
version=${ZFS_META_VERSION}-${ZFS_META_RELEASE}; \
|
||||||
|
arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch}`; \
|
||||||
|
pkg1=$${name}-$${version}.$${arch}.rpm; \
|
||||||
|
pkg2=$${name}-devel-$${version}.$${arch}.rpm; \
|
||||||
|
pkg3=$${name}-test-$${version}.$${arch}.rpm; \
|
||||||
|
fakeroot $(ALIEN) --scripts --to-tgz $$pkg1 $$pkg2 $$pkg3; \
|
||||||
|
$(RM) $$pkg1 $$pkg2 $$pkg3
|
||||||
|
|
||||||
|
tgz: tgz-modules tgz-utils
|
|
@ -0,0 +1,19 @@
|
||||||
|
dnl #
|
||||||
|
dnl # Set the target arch for libspl atomic implementation
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_ARCH], [
|
||||||
|
AC_MSG_CHECKING(for target asm dir)
|
||||||
|
TARGET_ARCH=`echo ${target_cpu} | sed -e s/i.86/i386/`
|
||||||
|
|
||||||
|
case $TARGET_ARCH in
|
||||||
|
i386|x86_64)
|
||||||
|
TARGET_ASM_DIR=asm-${TARGET_ARCH}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
TARGET_ASM_DIR=asm-generic
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AC_SUBST([TARGET_ASM_DIR])
|
||||||
|
AC_MSG_RESULT([$TARGET_ASM_DIR])
|
||||||
|
])
|
|
@ -0,0 +1,22 @@
|
||||||
|
dnl #
|
||||||
|
dnl # Check if gcc supports -Wframe-larger-than=<size> option.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN], [
|
||||||
|
AC_MSG_CHECKING([for -Wframe-larger-than=<size> support])
|
||||||
|
|
||||||
|
saved_flags="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS -Wframe-larger-than=1024"
|
||||||
|
|
||||||
|
AC_RUN_IFELSE(AC_LANG_PROGRAM( [], []),
|
||||||
|
[
|
||||||
|
FRAME_LARGER_THAN=-Wframe-larger-than=1024
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
],
|
||||||
|
[
|
||||||
|
FRAME_LARGER_THAN=
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
])
|
||||||
|
|
||||||
|
CFLAGS="$saved_flags"
|
||||||
|
AC_SUBST([FRAME_LARGER_THAN])
|
||||||
|
])
|
|
@ -0,0 +1,35 @@
|
||||||
|
dnl #
|
||||||
|
dnl # Check for ioctl()
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_IOCTL], [
|
||||||
|
AC_MSG_CHECKING(for ioctl())
|
||||||
|
AC_EGREP_HEADER(ioctl, unistd.h, is_unistd=yes, is_unistd=no)
|
||||||
|
AC_EGREP_HEADER(ioctl, sys/ioctl.h, is_sys_ioctl=yes, is_sys_ioctl=no)
|
||||||
|
AC_EGREP_HEADER(ioctl, stropts.h, is_stropts=yes, is_stropts=no)
|
||||||
|
|
||||||
|
if test $is_unistd = yes; then
|
||||||
|
result=unistd.h
|
||||||
|
AC_DEFINE([HAVE_IOCTL_IN_UNISTD_H], 1,
|
||||||
|
[Define to 1 if ioctl() defined in <unistd.h>])
|
||||||
|
else
|
||||||
|
|
||||||
|
if test $is_sys_ioctl = yes; then
|
||||||
|
result=sys/ioctl.h
|
||||||
|
AC_DEFINE([HAVE_IOCTL_IN_SYS_IOCTL_H], 1,
|
||||||
|
[Define to 1 if ioctl() defined in <sys/ioctl.h>])
|
||||||
|
elif test $is_stropts = yes; then
|
||||||
|
AC_DEFINE([HAVE_IOCTL_IN_STROPTS_H], 1,
|
||||||
|
result=stropts.h
|
||||||
|
[Define to 1 if ioctl() defined in <stropts.h>])
|
||||||
|
else
|
||||||
|
result=no
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test $result = no; then
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
AC_MSG_ERROR([*** Cannot locate ioctl() definition])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
fi
|
||||||
|
])
|
|
@ -0,0 +1,94 @@
|
||||||
|
dnl #
|
||||||
|
dnl # Check for ZFS support in libblkid. This test needs to check
|
||||||
|
dnl # more than if the library exists because we expect there are
|
||||||
|
dnl # at least 3 flavors of the library out in the wild:
|
||||||
|
dnl #
|
||||||
|
dnl # 1) blkid which has no ZFS support
|
||||||
|
dnl # 2) blkid with ZFS support and a flawed method of probing
|
||||||
|
dnl # 3) blkid with ZFS support and a working method of probing
|
||||||
|
dnl #
|
||||||
|
dnl # To handle this the check first validates that there is a version
|
||||||
|
dnl # of the library installed. If there is it creates a simulated
|
||||||
|
dnl # ZFS filesystem and then links a small test app which attempts
|
||||||
|
dnl # to detect the simualated filesystem type. If it correctly
|
||||||
|
dnl # identifies the filesystem as ZFS we can safely assume case 3).
|
||||||
|
dnl # Otherwise we disable blkid support and resort to manual probing.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_LIBBLKID], [
|
||||||
|
AC_ARG_WITH([blkid],
|
||||||
|
[AS_HELP_STRING([--with-blkid],
|
||||||
|
[support blkid caching @<:@default=check@:>@])],
|
||||||
|
[],
|
||||||
|
[with_blkid=check])
|
||||||
|
|
||||||
|
LIBBLKID=
|
||||||
|
AS_IF([test "x$with_blkid" != xno],
|
||||||
|
[
|
||||||
|
AC_CHECK_LIB([blkid], [blkid_get_cache],
|
||||||
|
[
|
||||||
|
AC_MSG_CHECKING([for blkid zfs support])
|
||||||
|
|
||||||
|
ZFS_DEV=`mktemp`
|
||||||
|
dd if=/dev/zero of=$ZFS_DEV bs=1024k count=8 \
|
||||||
|
>/dev/null 2>/dev/null
|
||||||
|
echo -en "\x0c\xb1\xba\0\0\0\0\0" | \
|
||||||
|
dd of=$ZFS_DEV bs=1k count=8 \
|
||||||
|
seek=132 conv=notrunc &>/dev/null \
|
||||||
|
>/dev/null 2>/dev/null
|
||||||
|
|
||||||
|
saved_LDFLAGS="$LDFLAGS"
|
||||||
|
LDFLAGS="-lblkid"
|
||||||
|
|
||||||
|
AC_RUN_IFELSE(AC_LANG_PROGRAM(
|
||||||
|
[
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <blkid/blkid.h>
|
||||||
|
],
|
||||||
|
[
|
||||||
|
blkid_cache cache;
|
||||||
|
char *value;
|
||||||
|
|
||||||
|
if (blkid_get_cache(&cache, NULL) < 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
value = blkid_get_tag_value(cache, "TYPE",
|
||||||
|
"$ZFS_DEV");
|
||||||
|
if (!value) {
|
||||||
|
blkid_put_cache(cache);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(value, "zfs")) {
|
||||||
|
free(value);
|
||||||
|
blkid_put_cache(cache);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(value);
|
||||||
|
blkid_put_cache(cache);
|
||||||
|
]),
|
||||||
|
[
|
||||||
|
rm -f $ZFS_DEV
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
AC_SUBST([LIBBLKID], ["-lblkid"])
|
||||||
|
AC_DEFINE([HAVE_LIBBLKID], 1,
|
||||||
|
[Define if you have libblkid])
|
||||||
|
],
|
||||||
|
[
|
||||||
|
rm -f $ZFS_DEV
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
AS_IF([test "x$with_blkid" != xcheck],
|
||||||
|
[AC_MSG_FAILURE(
|
||||||
|
[--with-blkid given but unavailable])])
|
||||||
|
])
|
||||||
|
|
||||||
|
LDFLAGS="$saved_LDFLAGS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
AS_IF([test "x$with_blkid" != xcheck],
|
||||||
|
[AC_MSG_FAILURE(
|
||||||
|
[--with-blkid given but unavailable])])
|
||||||
|
]
|
||||||
|
[])
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,8 @@
|
||||||
|
dnl #
|
||||||
|
dnl # Check for libshare
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_LIBSHARE], [
|
||||||
|
AC_CHECK_LIB([share], [sa_init],
|
||||||
|
[AC_DEFINE([HAVE_LIBSHARE], 1,
|
||||||
|
[Define to 1 if 'libshare' library available])])
|
||||||
|
])
|
|
@ -0,0 +1,18 @@
|
||||||
|
dnl #
|
||||||
|
dnl # Check for libuuid
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_LIBUUID], [
|
||||||
|
LIBUUID=
|
||||||
|
|
||||||
|
AC_CHECK_HEADER([uuid/uuid.h], [], [AC_MSG_FAILURE([
|
||||||
|
*** uuid/uuid.h missing, libuuid-devel package required])])
|
||||||
|
|
||||||
|
AC_CHECK_LIB([uuid], [uuid_generate], [], [AC_MSG_FAILURE([
|
||||||
|
*** uuid_generate() missing, libuuid-devel package required])])
|
||||||
|
|
||||||
|
AC_CHECK_LIB([uuid], [uuid_is_null], [], [AC_MSG_FAILURE([
|
||||||
|
*** uuid_is_null() missing, libuuid-devel package required])])
|
||||||
|
|
||||||
|
AC_SUBST([LIBUUID], ["-luuid"])
|
||||||
|
AC_DEFINE([HAVE_LIBUUID], 1, [Define if you have libuuid])
|
||||||
|
])
|
|
@ -0,0 +1,56 @@
|
||||||
|
dnl #
|
||||||
|
dnl # Check if the glibc NPTL threading implementation includes the guard area
|
||||||
|
dnl # within the stack size allocation, rather than allocating extra space at
|
||||||
|
dnl # the end of the stack, as POSIX.1 requires.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_STACK_GUARD], [
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether pthread stack includes guard])
|
||||||
|
|
||||||
|
saved_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="-fstack-check"
|
||||||
|
saved_LDFLAGS="$LDFLAGS"
|
||||||
|
LDFLAGS="-lpthread"
|
||||||
|
|
||||||
|
AC_RUN_IFELSE(AC_LANG_PROGRAM(
|
||||||
|
[
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <sys/resource.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <bits/local_lim.h>
|
||||||
|
|
||||||
|
#define PAGESIZE (sysconf(_SC_PAGESIZE))
|
||||||
|
#define STACK_SIZE 8192
|
||||||
|
#define BUFSIZE 4096
|
||||||
|
|
||||||
|
void * func(void *arg)
|
||||||
|
{
|
||||||
|
char buf[[[BUFSIZE]]];
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
pthread_t tid;
|
||||||
|
pthread_attr_t attr;
|
||||||
|
struct rlimit l;
|
||||||
|
|
||||||
|
l.rlim_cur = 0;
|
||||||
|
l.rlim_max = 0;
|
||||||
|
setrlimit(RLIMIT_CORE, &l);
|
||||||
|
pthread_attr_init(&attr);
|
||||||
|
pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN + STACK_SIZE);
|
||||||
|
pthread_attr_setguardsize(&attr, PAGESIZE);
|
||||||
|
pthread_create(&tid, &attr, func, NULL);
|
||||||
|
pthread_join(tid, NULL);
|
||||||
|
]),
|
||||||
|
[
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
],
|
||||||
|
[
|
||||||
|
AC_DEFINE([NPTL_GUARD_WITHIN_STACK], 1,
|
||||||
|
[Define to 1 if NPTL threading implementation includes
|
||||||
|
guard area in stack allocation])
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
])
|
||||||
|
CFLAGS="$saved_CFLAGS"
|
||||||
|
LDFLAGS="$saved_LDFLAGS"
|
||||||
|
])
|
|
@ -0,0 +1,21 @@
|
||||||
|
dnl #
|
||||||
|
dnl # Check for zlib
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_ZLIB], [
|
||||||
|
ZLIB=
|
||||||
|
|
||||||
|
AC_CHECK_HEADER([zlib.h], [], [AC_MSG_FAILURE([
|
||||||
|
*** zlib.h missing, zlib-devel package required])])
|
||||||
|
|
||||||
|
AC_CHECK_LIB([z], [compress2], [], [AC_MSG_FAILURE([
|
||||||
|
*** compress2() missing, zlib-devel package required])])
|
||||||
|
|
||||||
|
AC_CHECK_LIB([z], [uncompress], [], [AC_MSG_FAILURE([
|
||||||
|
*** uncompress() missing, zlib-devel package required])])
|
||||||
|
|
||||||
|
AC_CHECK_LIB([z], [crc32], [], [AC_MSG_FAILURE([
|
||||||
|
*** crc32() missing, zlib-devel package required])])
|
||||||
|
|
||||||
|
AC_SUBST([ZLIB], ["-lz"])
|
||||||
|
AC_DEFINE([HAVE_ZLIB], 1, [Define if you have zlib])
|
||||||
|
])
|
|
@ -0,0 +1,13 @@
|
||||||
|
dnl #
|
||||||
|
dnl # Default ZFS user configuration
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER], [
|
||||||
|
ZFS_AC_CONFIG_USER_ARCH
|
||||||
|
ZFS_AC_CONFIG_USER_LIBSHARE
|
||||||
|
ZFS_AC_CONFIG_USER_IOCTL
|
||||||
|
ZFS_AC_CONFIG_USER_ZLIB
|
||||||
|
ZFS_AC_CONFIG_USER_LIBUUID
|
||||||
|
ZFS_AC_CONFIG_USER_LIBBLKID
|
||||||
|
ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN
|
||||||
|
ZFS_AC_CONFIG_USER_STACK_GUARD
|
||||||
|
])
|
|
@ -0,0 +1,295 @@
|
||||||
|
AC_DEFUN([ZFS_AC_LICENSE], [
|
||||||
|
AC_MSG_CHECKING([zfs author])
|
||||||
|
AC_MSG_RESULT([$ZFS_META_AUTHOR])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([zfs license])
|
||||||
|
AC_MSG_RESULT([$ZFS_META_LICENSE])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([ZFS_AC_DEBUG], [
|
||||||
|
AC_MSG_CHECKING([whether debugging is enabled])
|
||||||
|
AC_ARG_ENABLE([debug],
|
||||||
|
[AS_HELP_STRING([--enable-debug],
|
||||||
|
[Enable generic debug support @<:@default=no@:>@])],
|
||||||
|
[],
|
||||||
|
[enable_debug=no])
|
||||||
|
|
||||||
|
AS_IF([test "x$enable_debug" = xyes],
|
||||||
|
[
|
||||||
|
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror"
|
||||||
|
HOSTCFLAGS="${HOSTCFLAGS} -DDEBUG -Werror"
|
||||||
|
DEBUG_CFLAGS="-DDEBUG -Werror"
|
||||||
|
DEBUG_STACKFLAGS="-fstack-check"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG "
|
||||||
|
HOSTCFLAGS="${HOSTCFLAGS} -DNDEBUG "
|
||||||
|
DEBUG_CFLAGS="-DNDEBUG"
|
||||||
|
DEBUG_STACKFLAGS=""
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_SUBST(DEBUG_CFLAGS)
|
||||||
|
AC_SUBST(DEBUG_STACKFLAGS)
|
||||||
|
AC_MSG_RESULT([$enable_debug])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_SCRIPT], [
|
||||||
|
cat >.script-config <<EOF
|
||||||
|
KERNELSRC=${LINUX}
|
||||||
|
KERNELBUILD=${LINUX_OBJ}
|
||||||
|
KERNELSRCVER=${LINUX_VERSION}
|
||||||
|
KERNELMOD=/lib/modules/\${KERNELSRCVER}/kernel
|
||||||
|
|
||||||
|
SPLSRC=${SPL}
|
||||||
|
SPLBUILD=${SPL_OBJ}
|
||||||
|
SPLSRCVER=${SPL_VERSION}
|
||||||
|
|
||||||
|
TOPDIR=${TOPDIR}
|
||||||
|
BUILDDIR=${BUILDDIR}
|
||||||
|
LIBDIR=${LIBDIR}
|
||||||
|
CMDDIR=${CMDDIR}
|
||||||
|
MODDIR=${MODDIR}
|
||||||
|
SCRIPTDIR=${SCRIPTDIR}
|
||||||
|
ETCDIR=\${TOPDIR}/etc
|
||||||
|
DEVDIR=\${TOPDIR}/dev
|
||||||
|
ZPOOLDIR=\${TOPDIR}/scripts/zpool-config
|
||||||
|
|
||||||
|
ZDB=\${CMDDIR}/zdb/zdb
|
||||||
|
ZFS=\${CMDDIR}/zfs/zfs
|
||||||
|
ZINJECT=\${CMDDIR}/zinject/zinject
|
||||||
|
ZPOOL=\${CMDDIR}/zpool/zpool
|
||||||
|
ZPOOL_ID=\${CMDDIR}/zpool_id/zpool_id
|
||||||
|
ZTEST=\${CMDDIR}/ztest/ztest
|
||||||
|
|
||||||
|
COMMON_SH=\${SCRIPTDIR}/common.sh
|
||||||
|
ZFS_SH=\${SCRIPTDIR}/zfs.sh
|
||||||
|
ZPOOL_CREATE_SH=\${SCRIPTDIR}/zpool-create.sh
|
||||||
|
|
||||||
|
INTREE=1
|
||||||
|
LDMOD=/sbin/insmod
|
||||||
|
|
||||||
|
KERNEL_MODULES=( \\
|
||||||
|
\${KERNELMOD}/lib/zlib_deflate/zlib_deflate.ko \\
|
||||||
|
)
|
||||||
|
|
||||||
|
SPL_MODULES=( \\
|
||||||
|
\${SPLBUILD}/spl/spl.ko \\
|
||||||
|
\${SPLBUILD}/splat/splat.ko \\
|
||||||
|
)
|
||||||
|
|
||||||
|
ZFS_MODULES=( \\
|
||||||
|
\${MODDIR}/avl/zavl.ko \\
|
||||||
|
\${MODDIR}/nvpair/znvpair.ko \\
|
||||||
|
\${MODDIR}/unicode/zunicode.ko \\
|
||||||
|
\${MODDIR}/zcommon/zcommon.ko \\
|
||||||
|
\${MODDIR}/zfs/zfs.ko \\
|
||||||
|
)
|
||||||
|
|
||||||
|
MODULES=( \\
|
||||||
|
\${KERNEL_MODULES[[*]]} \\
|
||||||
|
\${SPL_MODULES[[*]]} \\
|
||||||
|
\${ZFS_MODULES[[*]]} \\
|
||||||
|
)
|
||||||
|
EOF
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG], [
|
||||||
|
TOPDIR=`readlink -f ${srcdir}`
|
||||||
|
BUILDDIR=$TOPDIR
|
||||||
|
LIBDIR=$TOPDIR/lib
|
||||||
|
CMDDIR=$TOPDIR/cmd
|
||||||
|
MODDIR=$TOPDIR/module
|
||||||
|
SCRIPTDIR=$TOPDIR/scripts
|
||||||
|
TARGET_ASM_DIR=asm-generic
|
||||||
|
|
||||||
|
AC_SUBST(TOPDIR)
|
||||||
|
AC_SUBST(BUILDDIR)
|
||||||
|
AC_SUBST(LIBDIR)
|
||||||
|
AC_SUBST(CMDDIR)
|
||||||
|
AC_SUBST(MODDIR)
|
||||||
|
AC_SUBST(SCRIPTDIR)
|
||||||
|
AC_SUBST(TARGET_ASM_DIR)
|
||||||
|
|
||||||
|
ZFS_CONFIG=all
|
||||||
|
AC_ARG_WITH([config],
|
||||||
|
AS_HELP_STRING([--with-config=CONFIG],
|
||||||
|
[Config file 'kernel|user|all|srpm']),
|
||||||
|
[ZFS_CONFIG="$withval"])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([zfs config])
|
||||||
|
AC_MSG_RESULT([$ZFS_CONFIG]);
|
||||||
|
AC_SUBST(ZFS_CONFIG)
|
||||||
|
|
||||||
|
case "$ZFS_CONFIG" in
|
||||||
|
kernel) ZFS_AC_CONFIG_KERNEL ;;
|
||||||
|
user) ZFS_AC_CONFIG_USER ;;
|
||||||
|
all) ZFS_AC_CONFIG_KERNEL
|
||||||
|
ZFS_AC_CONFIG_USER ;;
|
||||||
|
srpm) ;;
|
||||||
|
*)
|
||||||
|
AC_MSG_RESULT([Error!])
|
||||||
|
AC_MSG_ERROR([Bad value "$ZFS_CONFIG" for --with-config,
|
||||||
|
user kernel|user|all|srpm]) ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AM_CONDITIONAL([CONFIG_USER],
|
||||||
|
[test "$ZFS_CONFIG" = user] ||
|
||||||
|
[test "$ZFS_CONFIG" = all])
|
||||||
|
AM_CONDITIONAL([CONFIG_KERNEL],
|
||||||
|
[test "$ZFS_CONFIG" = kernel] ||
|
||||||
|
[test "$ZFS_CONFIG" = all])
|
||||||
|
|
||||||
|
ZFS_AC_CONFIG_SCRIPT
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # Check for rpm+rpmbuild to build RPM packages. If these tools
|
||||||
|
dnl # are missing it is non-fatal but you will not be able to build
|
||||||
|
dnl # RPM packages and will be warned if you try too.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_RPM], [
|
||||||
|
RPM=rpm
|
||||||
|
RPMBUILD=rpmbuild
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether $RPM is available])
|
||||||
|
AS_IF([tmp=$($RPM --version 2>/dev/null)], [
|
||||||
|
RPM_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }')
|
||||||
|
HAVE_RPM=yes
|
||||||
|
AC_MSG_RESULT([$HAVE_RPM ($RPM_VERSION)])
|
||||||
|
],[
|
||||||
|
HAVE_RPM=no
|
||||||
|
AC_MSG_RESULT([$HAVE_RPM])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether $RPMBUILD is available])
|
||||||
|
AS_IF([tmp=$($RPMBUILD --version 2>/dev/null)], [
|
||||||
|
RPMBUILD_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }')
|
||||||
|
HAVE_RPMBUILD=yes
|
||||||
|
AC_MSG_RESULT([$HAVE_RPMBUILD ($RPMBUILD_VERSION)])
|
||||||
|
],[
|
||||||
|
HAVE_RPMBUILD=no
|
||||||
|
AC_MSG_RESULT([$HAVE_RPMBUILD])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_SUBST(HAVE_RPM)
|
||||||
|
AC_SUBST(RPM)
|
||||||
|
AC_SUBST(RPM_VERSION)
|
||||||
|
|
||||||
|
AC_SUBST(HAVE_RPMBUILD)
|
||||||
|
AC_SUBST(RPMBUILD)
|
||||||
|
AC_SUBST(RPMBUILD_VERSION)
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # Check for dpkg+dpkg-buildpackage to build DEB packages. If these
|
||||||
|
dnl # tools are missing it is non-fatal but you will not be able to build
|
||||||
|
dnl # DEB packages and will be warned if you try too.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_DPKG], [
|
||||||
|
DPKG=dpkg
|
||||||
|
DPKGBUILD=dpkg-buildpackage
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether $DPKG is available])
|
||||||
|
AS_IF([tmp=$($DPKG --version 2>/dev/null)], [
|
||||||
|
DPKG_VERSION=$(echo $tmp | $AWK '/Debian/ { print $[7] }')
|
||||||
|
HAVE_DPKG=yes
|
||||||
|
AC_MSG_RESULT([$HAVE_DPKG ($DPKG_VERSION)])
|
||||||
|
],[
|
||||||
|
HAVE_DPKG=no
|
||||||
|
AC_MSG_RESULT([$HAVE_DPKG])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether $DPKGBUILD is available])
|
||||||
|
AS_IF([tmp=$($DPKGBUILD --version 2>/dev/null)], [
|
||||||
|
DPKGBUILD_VERSION=$(echo $tmp | \
|
||||||
|
$AWK '/Debian/ { print $[4] }' | cut -f-4 -d'.')
|
||||||
|
HAVE_DPKGBUILD=yes
|
||||||
|
AC_MSG_RESULT([$HAVE_DPKGBUILD ($DPKGBUILD_VERSION)])
|
||||||
|
],[
|
||||||
|
HAVE_DPKGBUILD=no
|
||||||
|
AC_MSG_RESULT([$HAVE_DPKGBUILD])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_SUBST(HAVE_DPKG)
|
||||||
|
AC_SUBST(DPKG)
|
||||||
|
AC_SUBST(DPKG_VERSION)
|
||||||
|
|
||||||
|
AC_SUBST(HAVE_DPKGBUILD)
|
||||||
|
AC_SUBST(DPKGBUILD)
|
||||||
|
AC_SUBST(DPKGBUILD_VERSION)
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # Until native packaging for various different packing systems
|
||||||
|
dnl # can be added the least we can do is attempt to use alien to
|
||||||
|
dnl # convert the RPM packages to the needed package type. This is
|
||||||
|
dnl # a hack but so far it has worked reasonable well.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_ALIEN], [
|
||||||
|
ALIEN=alien
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether $ALIEN is available])
|
||||||
|
AS_IF([tmp=$($ALIEN --version 2>/dev/null)], [
|
||||||
|
ALIEN_VERSION=$(echo $tmp | $AWK '{ print $[3] }')
|
||||||
|
HAVE_ALIEN=yes
|
||||||
|
AC_MSG_RESULT([$HAVE_ALIEN ($ALIEN_VERSION)])
|
||||||
|
],[
|
||||||
|
HAVE_ALIEN=no
|
||||||
|
AC_MSG_RESULT([$HAVE_ALIEN])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_SUBST(HAVE_ALIEN)
|
||||||
|
AC_SUBST(ALIEN)
|
||||||
|
AC_SUBST(ALIEN_VERSION)
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # Using the VENDOR tag from config.guess set the default
|
||||||
|
dnl # package type for 'make pkg': (rpm | deb | tgz)
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [
|
||||||
|
AC_MSG_CHECKING([linux distribution])
|
||||||
|
if test -f /etc/redhat-release ; then
|
||||||
|
VENDOR=redhat ;
|
||||||
|
elif test -f /etc/fedora-release ; then
|
||||||
|
VENDOR=fedora ;
|
||||||
|
elif test -f /etc/debian_version ; then
|
||||||
|
VENDOR=debian ;
|
||||||
|
elif test -f /etc/lsb-release ; then
|
||||||
|
VENDOR=ubuntu ;
|
||||||
|
elif test -f /etc/SuSE-release ; then
|
||||||
|
VENDOR=sles ;
|
||||||
|
elif test -f /etc/slackware-version ; then
|
||||||
|
VENDOR=slackware ;
|
||||||
|
elif test -f /etc/gentoo-release ; then
|
||||||
|
VENDOR=gentoo ;
|
||||||
|
else
|
||||||
|
VENDOR= ;
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$VENDOR])
|
||||||
|
AC_SUBST(VENDOR)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([default package type])
|
||||||
|
case "$VENDOR" in
|
||||||
|
fedora) DEFAULT_PACKAGE=rpm ;;
|
||||||
|
redhat) DEFAULT_PACKAGE=rpm ;;
|
||||||
|
sles) DEFAULT_PACKAGE=rpm ;;
|
||||||
|
ubuntu) DEFAULT_PACKAGE=deb ;;
|
||||||
|
debian) DEFAULT_PACKAGE=deb ;;
|
||||||
|
slackware) DEFAULT_PACKAGE=tgz ;;
|
||||||
|
*) DEFAULT_PACKAGE=rpm ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AC_MSG_RESULT([$DEFAULT_PACKAGE])
|
||||||
|
AC_SUBST(DEFAULT_PACKAGE)
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # Default ZFS package configuration
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_PACKAGE], [
|
||||||
|
ZFS_AC_RPM
|
||||||
|
ZFS_AC_DPKG
|
||||||
|
ZFS_AC_ALIEN
|
||||||
|
ZFS_AC_DEFAULT_PACKAGE
|
||||||
|
])
|
|
@ -0,0 +1,131 @@
|
||||||
|
dnl #
|
||||||
|
dnl # ZFS_AC_META
|
||||||
|
dnl # Read metadata from the META file.
|
||||||
|
dnl #
|
||||||
|
dnl # AUTHOR:
|
||||||
|
dnl # Chris Dunlap <cdunlap@llnl.gov>
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_META], [
|
||||||
|
|
||||||
|
AH_BOTTOM([
|
||||||
|
#undef PACKAGE
|
||||||
|
#undef PACKAGE_BUGREPORT
|
||||||
|
#undef PACKAGE_NAME
|
||||||
|
#undef PACKAGE_STRING
|
||||||
|
#undef PACKAGE_TARNAME
|
||||||
|
#undef PACKAGE_VERSION
|
||||||
|
#undef STDC_HEADERS
|
||||||
|
#undef VERSION])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([metadata])
|
||||||
|
|
||||||
|
META="$srcdir/META"
|
||||||
|
_zfs_ac_meta_got_file=no
|
||||||
|
if test -f "$META"; then
|
||||||
|
_zfs_ac_meta_got_file=yes
|
||||||
|
|
||||||
|
ZFS_META_NAME=_ZFS_AC_META_GETVAL([(?:NAME|PROJECT|PACKAGE)]);
|
||||||
|
if test -n "$ZFS_META_NAME"; then
|
||||||
|
AC_DEFINE_UNQUOTED([ZFS_META_NAME], ["$ZFS_META_NAME"],
|
||||||
|
[Define the project name.]
|
||||||
|
)
|
||||||
|
AC_SUBST([ZFS_META_NAME])
|
||||||
|
fi
|
||||||
|
|
||||||
|
ZFS_META_VERSION=_ZFS_AC_META_GETVAL([VERSION]);
|
||||||
|
if test -n "$ZFS_META_VERSION"; then
|
||||||
|
AC_DEFINE_UNQUOTED([ZFS_META_VERSION], ["$ZFS_META_VERSION"],
|
||||||
|
[Define the project version.]
|
||||||
|
)
|
||||||
|
AC_SUBST([ZFS_META_VERSION])
|
||||||
|
fi
|
||||||
|
|
||||||
|
ZFS_META_RELEASE=_ZFS_AC_META_GETVAL([RELEASE]);
|
||||||
|
if test -n "$ZFS_META_RELEASE"; then
|
||||||
|
AC_DEFINE_UNQUOTED([ZFS_META_RELEASE], ["$ZFS_META_RELEASE"],
|
||||||
|
[Define the project release.]
|
||||||
|
)
|
||||||
|
AC_SUBST([ZFS_META_RELEASE])
|
||||||
|
fi
|
||||||
|
|
||||||
|
ZFS_META_LICENSE=_ZFS_AC_META_GETVAL([LICENSE]);
|
||||||
|
if test -n "$ZFS_META_LICENSE"; then
|
||||||
|
AC_DEFINE_UNQUOTED([ZFS_META_LICENSE], ["$ZFS_META_LICENSE"],
|
||||||
|
[Define the project license.]
|
||||||
|
)
|
||||||
|
AC_SUBST([ZFS_META_LICENSE])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "$ZFS_META_NAME" -a -n "$ZFS_META_VERSION"; then
|
||||||
|
ZFS_META_ALIAS="$ZFS_META_NAME-$ZFS_META_VERSION"
|
||||||
|
test -n "$ZFS_META_RELEASE" &&
|
||||||
|
ZFS_META_ALIAS="$ZFS_META_ALIAS-$ZFS_META_RELEASE"
|
||||||
|
AC_DEFINE_UNQUOTED([ZFS_META_ALIAS],
|
||||||
|
["$ZFS_META_ALIAS"],
|
||||||
|
[Define the project alias string.]
|
||||||
|
)
|
||||||
|
AC_SUBST([ZFS_META_ALIAS])
|
||||||
|
fi
|
||||||
|
|
||||||
|
ZFS_META_DATA=_ZFS_AC_META_GETVAL([DATE]);
|
||||||
|
if test -n "$ZFS_META_DATA"; then
|
||||||
|
AC_DEFINE_UNQUOTED([ZFS_META_DATA], ["$ZFS_META_DATA"],
|
||||||
|
[Define the project release date.]
|
||||||
|
)
|
||||||
|
AC_SUBST([ZFS_META_DATA])
|
||||||
|
fi
|
||||||
|
|
||||||
|
ZFS_META_AUTHOR=_ZFS_AC_META_GETVAL([AUTHOR]);
|
||||||
|
if test -n "$ZFS_META_AUTHOR"; then
|
||||||
|
AC_DEFINE_UNQUOTED([ZFS_META_AUTHOR], ["$ZFS_META_AUTHOR"],
|
||||||
|
[Define the project author.]
|
||||||
|
)
|
||||||
|
AC_SUBST([ZFS_META_AUTHOR])
|
||||||
|
fi
|
||||||
|
|
||||||
|
m4_pattern_allow([^LT_(CURRENT|REVISION|AGE)$])
|
||||||
|
ZFS_META_LT_CURRENT=_ZFS_AC_META_GETVAL([LT_CURRENT]);
|
||||||
|
ZFS_META_LT_REVISION=_ZFS_AC_META_GETVAL([LT_REVISION]);
|
||||||
|
ZFS_META_LT_AGE=_ZFS_AC_META_GETVAL([LT_AGE]);
|
||||||
|
if test -n "$ZFS_META_LT_CURRENT" \
|
||||||
|
-o -n "$ZFS_META_LT_REVISION" \
|
||||||
|
-o -n "$ZFS_META_LT_AGE"; then
|
||||||
|
test -n "$ZFS_META_LT_CURRENT" || ZFS_META_LT_CURRENT="0"
|
||||||
|
test -n "$ZFS_META_LT_REVISION" || ZFS_META_LT_REVISION="0"
|
||||||
|
test -n "$ZFS_META_LT_AGE" || ZFS_META_LT_AGE="0"
|
||||||
|
AC_DEFINE_UNQUOTED([ZFS_META_LT_CURRENT],
|
||||||
|
["$ZFS_META_LT_CURRENT"],
|
||||||
|
[Define the libtool library 'current'
|
||||||
|
version information.]
|
||||||
|
)
|
||||||
|
AC_DEFINE_UNQUOTED([ZFS_META_LT_REVISION],
|
||||||
|
["$ZFS_META_LT_REVISION"],
|
||||||
|
[Define the libtool library 'revision'
|
||||||
|
version information.]
|
||||||
|
)
|
||||||
|
AC_DEFINE_UNQUOTED([ZFS_META_LT_AGE], ["$ZFS_META_LT_AGE"],
|
||||||
|
[Define the libtool library 'age'
|
||||||
|
version information.]
|
||||||
|
)
|
||||||
|
AC_SUBST([ZFS_META_LT_CURRENT])
|
||||||
|
AC_SUBST([ZFS_META_LT_REVISION])
|
||||||
|
AC_SUBST([ZFS_META_LT_AGE])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_RESULT([$_zfs_ac_meta_got_file])
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_DEFUN([_ZFS_AC_META_GETVAL],
|
||||||
|
[`perl -n\
|
||||||
|
-e "BEGIN { \\$key=shift @ARGV; }"\
|
||||||
|
-e "next unless s/^\s*\\$key@<:@:=@:>@//i;"\
|
||||||
|
-e "s/^((?:@<:@^'\"#@:>@*(?:(@<:@'\"@:>@)@<:@^\2@:>@*\2)*)*)#.*/\\@S|@1/;"\
|
||||||
|
-e "s/^\s+//;"\
|
||||||
|
-e "s/\s+$//;"\
|
||||||
|
-e "s/^(@<:@'\"@:>@)(.*)\1/\\@S|@2/;"\
|
||||||
|
-e "\\$val=\\$_;"\
|
||||||
|
-e "END { print \\$val if defined \\$val; }"\
|
||||||
|
'$1' $META`]dnl
|
||||||
|
)
|
|
@ -0,0 +1,91 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the ZFS Linux port.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Lawrence Livermore National Security, LLC.
|
||||||
|
* Produced at Lawrence Livermore National Laboratory
|
||||||
|
* Written by:
|
||||||
|
* Brian Behlendorf <behlendorf1@llnl.gov>,
|
||||||
|
* Herb Wartens <wartens2@llnl.gov>,
|
||||||
|
* Jim Garlick <garlick@llnl.gov>
|
||||||
|
* LLNL-CODE-403049
|
||||||
|
*
|
||||||
|
* CDDL HEADER START
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the terms of the
|
||||||
|
* Common Development and Distribution License, Version 1.0 only
|
||||||
|
* (the "License"). You may not use this file except in compliance
|
||||||
|
* with the License.
|
||||||
|
*
|
||||||
|
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||||
|
* or http://www.opensolaris.org/os/licensing.
|
||||||
|
* See the License for the specific language governing permissions
|
||||||
|
* and limitations under the License.
|
||||||
|
*
|
||||||
|
* When distributing Covered Code, include this CDDL HEADER in each
|
||||||
|
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||||
|
* If applicable, add the following below this CDDL HEADER, with the
|
||||||
|
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||||
|
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||||
|
*
|
||||||
|
* CDDL HEADER END
|
||||||
|
*/
|
||||||
|
|
||||||
|
AC_INIT
|
||||||
|
AC_LANG(C)
|
||||||
|
ZFS_AC_META
|
||||||
|
AC_CONFIG_AUX_DIR([config])
|
||||||
|
AC_CANONICAL_SYSTEM
|
||||||
|
AM_MAINTAINER_MODE
|
||||||
|
AM_SILENT_RULES
|
||||||
|
AM_INIT_AUTOMAKE([$ZFS_META_NAME], [$ZFS_META_VERSION])
|
||||||
|
AC_CONFIG_HEADERS([zfs_config.h], [
|
||||||
|
(mv zfs_config.h zfs_config.h.tmp &&
|
||||||
|
awk -f config/config.awk zfs_config.h.tmp >zfs_config.h &&
|
||||||
|
rm zfs_config.h.tmp) || exit 1])
|
||||||
|
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_LIBTOOL
|
||||||
|
AM_PROG_AS
|
||||||
|
|
||||||
|
ZFS_AC_LICENSE
|
||||||
|
ZFS_AC_PACKAGE
|
||||||
|
ZFS_AC_CONFIG
|
||||||
|
ZFS_AC_DEBUG
|
||||||
|
|
||||||
|
AC_CONFIG_FILES([
|
||||||
|
Makefile
|
||||||
|
config/Makefile
|
||||||
|
etc/Makefile
|
||||||
|
man/Makefile
|
||||||
|
man/man8/Makefile
|
||||||
|
lib/Makefile
|
||||||
|
lib/libavl/Makefile
|
||||||
|
lib/libefi/Makefile
|
||||||
|
lib/libnvpair/Makefile
|
||||||
|
lib/libunicode/Makefile
|
||||||
|
lib/libuutil/Makefile
|
||||||
|
lib/libzpool/Makefile
|
||||||
|
lib/libzpool/include/Makefile
|
||||||
|
lib/libzfs/Makefile
|
||||||
|
cmd/Makefile
|
||||||
|
cmd/zdb/Makefile
|
||||||
|
cmd/zfs/Makefile
|
||||||
|
cmd/zinject/Makefile
|
||||||
|
cmd/zpool/Makefile
|
||||||
|
cmd/zpool_id/Makefile
|
||||||
|
cmd/zpool_layout/Makefile
|
||||||
|
cmd/ztest/Makefile
|
||||||
|
module/Makefile
|
||||||
|
module/avl/Makefile
|
||||||
|
module/nvpair/Makefile
|
||||||
|
module/unicode/Makefile
|
||||||
|
module/zcommon/Makefile
|
||||||
|
module/zfs/Makefile
|
||||||
|
scripts/Makefile
|
||||||
|
scripts/common.sh
|
||||||
|
zfs.spec
|
||||||
|
zfs-modules.spec
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_OUTPUT
|
|
@ -0,0 +1,3 @@
|
||||||
|
sysconfdir = /etc
|
||||||
|
nobase_dist_sysconf_DATA = zfs/*
|
||||||
|
nobase_dist_sysconf_DATA += udev/rules.d/*
|
|
@ -0,0 +1,8 @@
|
||||||
|
#
|
||||||
|
# /etc/udev/rules.d/99-zpool.rules
|
||||||
|
#
|
||||||
|
|
||||||
|
ENV{DEVTYPE}=="disk", IMPORT{program}="/usr/bin/zpool_id -d %p"
|
||||||
|
|
||||||
|
KERNEL=="*[!0-9]", ENV{SUBSYSTEM}=="block", ENV{ID_ZPOOL}=="?*", SYMLINK+="$env{ID_ZPOOL_PATH}"
|
||||||
|
KERNEL=="*[0-9]", ENV{SUBSYSTEM}=="block", ENV{ID_ZPOOL}=="?*", SYMLINK+="$env{ID_ZPOOL_PATH}-part%n"
|
|
@ -0,0 +1,9 @@
|
||||||
|
#
|
||||||
|
# Custom by-path mapping for large JBOD configurations
|
||||||
|
#
|
||||||
|
# Example Config: Desktop
|
||||||
|
#
|
||||||
|
|
||||||
|
#<ID> <by-path name>
|
||||||
|
#disk1 pci-0000:61:06.1-scsi-0:0:0:0
|
||||||
|
#disk2 pci-0000:61:06.1-scsi-0:0:0:1
|
|
@ -0,0 +1,176 @@
|
||||||
|
#
|
||||||
|
# Custom by-path mapping for large JBOD configurations
|
||||||
|
#
|
||||||
|
# Example Config:
|
||||||
|
# Quarter scale dragon drawer based SSU for RHEL6
|
||||||
|
#
|
||||||
|
|
||||||
|
# Channel A: PCI Bus 3, Enclosure 0x50001ff10e991000
|
||||||
|
a1 pci-0000:03:00.0-sas-0x50001ff10e991000-34
|
||||||
|
a2 pci-0000:03:00.0-sas-0x50001ff10e991000-35
|
||||||
|
a3 pci-0000:03:00.0-sas-0x50001ff10e991000-39
|
||||||
|
a4 pci-0000:03:00.0-sas-0x50001ff10e991000-40
|
||||||
|
a5 pci-0000:03:00.0-sas-0x50001ff10e991000-44
|
||||||
|
a6 pci-0000:03:00.0-sas-0x50001ff10e991000-45
|
||||||
|
a7 pci-0000:03:00.0-sas-0x50001ff10e991000-48
|
||||||
|
a8 pci-0000:03:00.0-sas-0x50001ff10e991000-49
|
||||||
|
a9 pci-0000:03:00.0-sas-0x50001ff10e991000-50
|
||||||
|
a10 pci-0000:03:00.0-sas-0x50001ff10e991000-53
|
||||||
|
a11 pci-0000:03:00.0-sas-0x50001ff10e991000-54
|
||||||
|
a12 pci-0000:03:00.0-sas-0x50001ff10e991000-55
|
||||||
|
a13 pci-0000:03:00.0-sas-0x50001ff10e991000-58
|
||||||
|
a14 pci-0000:03:00.0-sas-0x50001ff10e991000-59
|
||||||
|
a15 pci-0000:03:00.0-sas-0x50001ff10e991000-60
|
||||||
|
|
||||||
|
# Channel B: PCI Bus 3, Enclosure 0x50001ff10e9d1000
|
||||||
|
b1 pci-0000:03:00.0-sas-0x50001ff10e9d1000-34
|
||||||
|
b2 pci-0000:03:00.0-sas-0x50001ff10e9d1000-35
|
||||||
|
b3 pci-0000:03:00.0-sas-0x50001ff10e9d1000-39
|
||||||
|
b4 pci-0000:03:00.0-sas-0x50001ff10e9d1000-40
|
||||||
|
b5 pci-0000:03:00.0-sas-0x50001ff10e9d1000-44
|
||||||
|
b6 pci-0000:03:00.0-sas-0x50001ff10e9d1000-45
|
||||||
|
b7 pci-0000:03:00.0-sas-0x50001ff10e9d1000-48
|
||||||
|
b8 pci-0000:03:00.0-sas-0x50001ff10e9d1000-49
|
||||||
|
b9 pci-0000:03:00.0-sas-0x50001ff10e9d1000-50
|
||||||
|
b10 pci-0000:03:00.0-sas-0x50001ff10e9d1000-53
|
||||||
|
b11 pci-0000:03:00.0-sas-0x50001ff10e9d1000-54
|
||||||
|
b12 pci-0000:03:00.0-sas-0x50001ff10e9d1000-55
|
||||||
|
b13 pci-0000:03:00.0-sas-0x50001ff10e9d1000-58
|
||||||
|
b14 pci-0000:03:00.0-sas-0x50001ff10e9d1000-59
|
||||||
|
b15 pci-0000:03:00.0-sas-0x50001ff10e9d1000-60
|
||||||
|
|
||||||
|
# Channel C: PCI Bus 4, Enclosure 0x50001ff10e991000
|
||||||
|
c1 pci-0000:04:00.0-sas-0x50001ff10e991000-31
|
||||||
|
c2 pci-0000:04:00.0-sas-0x50001ff10e991000-32
|
||||||
|
c3 pci-0000:04:00.0-sas-0x50001ff10e991000-33
|
||||||
|
c4 pci-0000:04:00.0-sas-0x50001ff10e991000-36
|
||||||
|
c5 pci-0000:04:00.0-sas-0x50001ff10e991000-37
|
||||||
|
c6 pci-0000:04:00.0-sas-0x50001ff10e991000-38
|
||||||
|
c7 pci-0000:04:00.0-sas-0x50001ff10e991000-41
|
||||||
|
c8 pci-0000:04:00.0-sas-0x50001ff10e991000-42
|
||||||
|
c9 pci-0000:04:00.0-sas-0x50001ff10e991000-43
|
||||||
|
c10 pci-0000:04:00.0-sas-0x50001ff10e991000-46
|
||||||
|
c11 pci-0000:04:00.0-sas-0x50001ff10e991000-47
|
||||||
|
c12 pci-0000:04:00.0-sas-0x50001ff10e991000-51
|
||||||
|
c13 pci-0000:04:00.0-sas-0x50001ff10e991000-52
|
||||||
|
c14 pci-0000:04:00.0-sas-0x50001ff10e991000-56
|
||||||
|
c15 pci-0000:04:00.0-sas-0x50001ff10e991000-57
|
||||||
|
|
||||||
|
# Channel D: PCI Bus 4, Enclosure 0x50001ff10e9d1000
|
||||||
|
d1 pci-0000:04:00.0-sas-0x50001ff10e9d1000-31
|
||||||
|
d2 pci-0000:04:00.0-sas-0x50001ff10e9d1000-32
|
||||||
|
d3 pci-0000:04:00.0-sas-0x50001ff10e9d1000-33
|
||||||
|
d4 pci-0000:04:00.0-sas-0x50001ff10e9d1000-36
|
||||||
|
d5 pci-0000:04:00.0-sas-0x50001ff10e9d1000-37
|
||||||
|
d6 pci-0000:04:00.0-sas-0x50001ff10e9d1000-38
|
||||||
|
d7 pci-0000:04:00.0-sas-0x50001ff10e9d1000-41
|
||||||
|
d8 pci-0000:04:00.0-sas-0x50001ff10e9d1000-42
|
||||||
|
d9 pci-0000:04:00.0-sas-0x50001ff10e9d1000-43
|
||||||
|
d10 pci-0000:04:00.0-sas-0x50001ff10e9d1000-46
|
||||||
|
d11 pci-0000:04:00.0-sas-0x50001ff10e9d1000-47
|
||||||
|
d12 pci-0000:04:00.0-sas-0x50001ff10e9d1000-51
|
||||||
|
d13 pci-0000:04:00.0-sas-0x50001ff10e9d1000-52
|
||||||
|
d14 pci-0000:04:00.0-sas-0x50001ff10e9d1000-56
|
||||||
|
d15 pci-0000:04:00.0-sas-0x50001ff10e9d1000-57
|
||||||
|
|
||||||
|
# Channel E: PCI Bus 84, Enclosure 0x50001ff10e991000
|
||||||
|
e1 pci-0000:84:00.0-sas-0x50001ff10e991000-3
|
||||||
|
e2 pci-0000:84:00.0-sas-0x50001ff10e991000-4
|
||||||
|
e3 pci-0000:84:00.0-sas-0x50001ff10e991000-5
|
||||||
|
e4 pci-0000:84:00.0-sas-0x50001ff10e991000-8
|
||||||
|
e5 pci-0000:84:00.0-sas-0x50001ff10e991000-9
|
||||||
|
e6 pci-0000:84:00.0-sas-0x50001ff10e991000-10
|
||||||
|
e7 pci-0000:84:00.0-sas-0x50001ff10e991000-13
|
||||||
|
e8 pci-0000:84:00.0-sas-0x50001ff10e991000-14
|
||||||
|
e9 pci-0000:84:00.0-sas-0x50001ff10e991000-15
|
||||||
|
e10 pci-0000:84:00.0-sas-0x50001ff10e991000-19
|
||||||
|
e11 pci-0000:84:00.0-sas-0x50001ff10e991000-20
|
||||||
|
e12 pci-0000:84:00.0-sas-0x50001ff10e991000-24
|
||||||
|
e13 pci-0000:84:00.0-sas-0x50001ff10e991000-25
|
||||||
|
e14 pci-0000:84:00.0-sas-0x50001ff10e991000-29
|
||||||
|
e15 pci-0000:84:00.0-sas-0x50001ff10e991000-30
|
||||||
|
|
||||||
|
# Channel F: PCI Bus 84, Enclosure 0x50001ff10e9d1000
|
||||||
|
f1 pci-0000:84:00.0-sas-0x50001ff10e9d1000-3
|
||||||
|
f2 pci-0000:84:00.0-sas-0x50001ff10e9d1000-4
|
||||||
|
f3 pci-0000:84:00.0-sas-0x50001ff10e9d1000-5
|
||||||
|
f4 pci-0000:84:00.0-sas-0x50001ff10e9d1000-8
|
||||||
|
f5 pci-0000:84:00.0-sas-0x50001ff10e9d1000-9
|
||||||
|
f6 pci-0000:84:00.0-sas-0x50001ff10e9d1000-10
|
||||||
|
f7 pci-0000:84:00.0-sas-0x50001ff10e9d1000-13
|
||||||
|
f8 pci-0000:84:00.0-sas-0x50001ff10e9d1000-14
|
||||||
|
f9 pci-0000:84:00.0-sas-0x50001ff10e9d1000-15
|
||||||
|
f10 pci-0000:84:00.0-sas-0x50001ff10e9d1000-19
|
||||||
|
f11 pci-0000:84:00.0-sas-0x50001ff10e9d1000-20
|
||||||
|
f12 pci-0000:84:00.0-sas-0x50001ff10e9d1000-24
|
||||||
|
f13 pci-0000:84:00.0-sas-0x50001ff10e9d1000-25
|
||||||
|
f14 pci-0000:84:00.0-sas-0x50001ff10e9d1000-29
|
||||||
|
f15 pci-0000:84:00.0-sas-0x50001ff10e9d1000-30
|
||||||
|
|
||||||
|
# Channel G: PCI Bus 85, Enclosure 0x50001ff10e991000
|
||||||
|
g1 pci-0000:85:00.0-sas-0x50001ff10e991000-1
|
||||||
|
g2 pci-0000:85:00.0-sas-0x50001ff10e991000-2
|
||||||
|
g3 pci-0000:85:00.0-sas-0x50001ff10e991000-6
|
||||||
|
g4 pci-0000:85:00.0-sas-0x50001ff10e991000-7
|
||||||
|
g5 pci-0000:85:00.0-sas-0x50001ff10e991000-11
|
||||||
|
g6 pci-0000:85:00.0-sas-0x50001ff10e991000-12
|
||||||
|
g7 pci-0000:85:00.0-sas-0x50001ff10e991000-16
|
||||||
|
g8 pci-0000:85:00.0-sas-0x50001ff10e991000-17
|
||||||
|
g9 pci-0000:85:00.0-sas-0x50001ff10e991000-18
|
||||||
|
g10 pci-0000:85:00.0-sas-0x50001ff10e991000-21
|
||||||
|
g11 pci-0000:85:00.0-sas-0x50001ff10e991000-22
|
||||||
|
g12 pci-0000:85:00.0-sas-0x50001ff10e991000-23
|
||||||
|
g13 pci-0000:85:00.0-sas-0x50001ff10e991000-26
|
||||||
|
g14 pci-0000:85:00.0-sas-0x50001ff10e991000-27
|
||||||
|
g15 pci-0000:85:00.0-sas-0x50001ff10e991000-28
|
||||||
|
|
||||||
|
# Channel H: PCI Bus 85, Enclosure 0x50001ff10e9d1000
|
||||||
|
h1 pci-0000:85:00.0-sas-0x50001ff10e9d1000-1
|
||||||
|
h2 pci-0000:85:00.0-sas-0x50001ff10e9d1000-2
|
||||||
|
h3 pci-0000:85:00.0-sas-0x50001ff10e9d1000-6
|
||||||
|
h4 pci-0000:85:00.0-sas-0x50001ff10e9d1000-7
|
||||||
|
h5 pci-0000:85:00.0-sas-0x50001ff10e9d1000-11
|
||||||
|
h6 pci-0000:85:00.0-sas-0x50001ff10e9d1000-12
|
||||||
|
h7 pci-0000:85:00.0-sas-0x50001ff10e9d1000-16
|
||||||
|
h8 pci-0000:85:00.0-sas-0x50001ff10e9d1000-17
|
||||||
|
h9 pci-0000:85:00.0-sas-0x50001ff10e9d1000-18
|
||||||
|
h10 pci-0000:85:00.0-sas-0x50001ff10e9d1000-21
|
||||||
|
h11 pci-0000:85:00.0-sas-0x50001ff10e9d1000-22
|
||||||
|
h12 pci-0000:85:00.0-sas-0x50001ff10e9d1000-23
|
||||||
|
h13 pci-0000:85:00.0-sas-0x50001ff10e9d1000-26
|
||||||
|
h14 pci-0000:85:00.0-sas-0x50001ff10e9d1000-27
|
||||||
|
h15 pci-0000:85:00.0-sas-0x50001ff10e9d1000-28
|
||||||
|
|
||||||
|
# Channel I: PCI Bus 83, Enclosure 0x5000155359b8e33f
|
||||||
|
i1 pci-0000:83:00.0-sas-0x5000155359b8e33f-0
|
||||||
|
i2 pci-0000:83:00.0-sas-0x5000155359b8e33f-1
|
||||||
|
i3 pci-0000:83:00.0-sas-0x5000155359b8e33f-2
|
||||||
|
i4 pci-0000:83:00.0-sas-0x5000155359b8e33f-3
|
||||||
|
i5 pci-0000:83:00.0-sas-0x5000155359b8e33f-4
|
||||||
|
i6 pci-0000:83:00.0-sas-0x5000155359b8e33f-5
|
||||||
|
i7 pci-0000:83:00.0-sas-0x5000155359b8e33f-6
|
||||||
|
i8 pci-0000:83:00.0-sas-0x5000155359b8e33f-7
|
||||||
|
i9 pci-0000:83:00.0-sas-0x5000155359b8e33f-8
|
||||||
|
i10 pci-0000:83:00.0-sas-0x5000155359b8e33f-9
|
||||||
|
i11 pci-0000:83:00.0-sas-0x5000155359b8e33f-10
|
||||||
|
i12 pci-0000:83:00.0-sas-0x5000155359b8e33f-11
|
||||||
|
i13 pci-0000:83:00.0-sas-0x5000155359b8e33f-12
|
||||||
|
i14 pci-0000:83:00.0-sas-0x5000155359b8e33f-13
|
||||||
|
i15 pci-0000:83:00.0-sas-0x5000155359b8e33f-14
|
||||||
|
|
||||||
|
# Channel J: PCI Bus 83, Enclosure 0x5000155359dba33f
|
||||||
|
j1 pci-0000:83:00.0-sas-0x5000155359dba33f-0
|
||||||
|
j2 pci-0000:83:00.0-sas-0x5000155359dba33f-1
|
||||||
|
j3 pci-0000:83:00.0-sas-0x5000155359dba33f-2
|
||||||
|
j4 pci-0000:83:00.0-sas-0x5000155359dba33f-3
|
||||||
|
j5 pci-0000:83:00.0-sas-0x5000155359dba33f-4
|
||||||
|
j6 pci-0000:83:00.0-sas-0x5000155359dba33f-5
|
||||||
|
j7 pci-0000:83:00.0-sas-0x5000155359dba33f-6
|
||||||
|
j8 pci-0000:83:00.0-sas-0x5000155359dba33f-7
|
||||||
|
j9 pci-0000:83:00.0-sas-0x5000155359dba33f-8
|
||||||
|
j10 pci-0000:83:00.0-sas-0x5000155359dba33f-9
|
||||||
|
j11 pci-0000:83:00.0-sas-0x5000155359dba33f-10
|
||||||
|
j12 pci-0000:83:00.0-sas-0x5000155359dba33f-11
|
||||||
|
j13 pci-0000:83:00.0-sas-0x5000155359dba33f-12
|
||||||
|
j14 pci-0000:83:00.0-sas-0x5000155359dba33f-13
|
||||||
|
j15 pci-0000:83:00.0-sas-0x5000155359dba33f-14
|
|
@ -0,0 +1,30 @@
|
||||||
|
#
|
||||||
|
# Custom by-path mapping for large JBOD configurations
|
||||||
|
#
|
||||||
|
# Example Config:
|
||||||
|
# Single Supermicro JBOD for RHEL6
|
||||||
|
#
|
||||||
|
|
||||||
|
# Channel A: PCI Bus 7, Enclosure 0x500304800027367f
|
||||||
|
a1 pci-0000:07:00.0-sas-0x500304800027367f-0
|
||||||
|
a2 pci-0000:07:00.0-sas-0x500304800027367f-1
|
||||||
|
a3 pci-0000:07:00.0-sas-0x500304800027367f-2
|
||||||
|
a4 pci-0000:07:00.0-sas-0x500304800027367f-3
|
||||||
|
|
||||||
|
# Channel B: PCI Bus 7, Enclosure 0x500304800027367f
|
||||||
|
b1 pci-0000:07:00.0-sas-0x500304800027367f-4
|
||||||
|
b2 pci-0000:07:00.0-sas-0x500304800027367f-5
|
||||||
|
b3 pci-0000:07:00.0-sas-0x500304800027367f-6
|
||||||
|
b4 pci-0000:07:00.0-sas-0x500304800027367f-7
|
||||||
|
|
||||||
|
# Channel C: PCI Bus 7, Enclosure 0x500304800027367f
|
||||||
|
c1 pci-0000:07:00.0-sas-0x500304800027367f-8
|
||||||
|
c2 pci-0000:07:00.0-sas-0x500304800027367f-9
|
||||||
|
c3 pci-0000:07:00.0-sas-0x500304800027367f-10
|
||||||
|
c4 pci-0000:07:00.0-sas-0x500304800027367f-11
|
||||||
|
|
||||||
|
# Channel D: PCI Bus 7, Enclosure 0x500304800027367f
|
||||||
|
d1 pci-0000:07:00.0-sas-0x500304800027367f-12
|
||||||
|
d2 pci-0000:07:00.0-sas-0x500304800027367f-13
|
||||||
|
d3 pci-0000:07:00.0-sas-0x500304800027367f-14
|
||||||
|
d4 pci-0000:07:00.0-sas-0x500304800027367f-15
|
|
@ -0,0 +1,66 @@
|
||||||
|
#
|
||||||
|
# Custom by-path mapping for large JBOD configurations
|
||||||
|
#
|
||||||
|
# Example Config:
|
||||||
|
# Sun x4550 for RHEL5
|
||||||
|
#
|
||||||
|
|
||||||
|
# Channel A: PCI Bus 2
|
||||||
|
a1 pci-0000:02:00.0-sas-0x50062b0000000001:1:0-0xd6807184d601e192:0
|
||||||
|
a2 pci-0000:02:00.0-sas-0x50062b0000000002:1:1-0xd4905378e6e3d592:1
|
||||||
|
a3 pci-0000:02:00.0-sas-0x50062b0000000003:1:2-0xd3827673d806d392:2
|
||||||
|
a4 pci-0000:02:00.0-sas-0x50062b0000000004:1:3-0xd6805385d6e3e192:3
|
||||||
|
a5 pci-0000:02:00.0-sas-0x50062b0000000005:1:4-0xd680655bd6f5b792:4
|
||||||
|
a6 pci-0000:02:00.0-sas-0x50062b0000000006:1:5-0x7a967598ec06d091:5
|
||||||
|
a7 pci-0000:02:00.0-sas-0x50062b0000000007:1:6-0xd3826c60d8fcbf92:6
|
||||||
|
a8 pci-0000:02:00.0-sas-0x50062b0000000008:1:7-0xd6805271d6e2cd92:7
|
||||||
|
|
||||||
|
# Channel B: PCI Bus 3
|
||||||
|
b1 pci-0000:03:00.0-sas-0x50062b0000000002:1:0-0xd680685fd6f8bb92:0
|
||||||
|
b2 pci-0000:03:00.0-sas-0x50062b0000000003:1:1-0xd58c706de200cb92:1
|
||||||
|
b3 pci-0000:03:00.0-sas-0x50062b0000000004:1:2-0xd5897480df04de92:2
|
||||||
|
b4 pci-0000:03:00.0-sas-0x50062b0000000005:1:3-0xd6805764d6e7c092:3
|
||||||
|
b5 pci-0000:03:00.0-sas-0x50062b0000000006:1:4-0xd6806a6dd6fac992:4
|
||||||
|
b6 pci-0000:03:00.0-sas-0x50062b0000000007:1:5-0xd58c6b84e2fbe192:5
|
||||||
|
b7 pci-0000:03:00.0-sas-0x50062b0000000008:1:6-0xd58a576ee0e7cb92:6
|
||||||
|
b8 pci-0000:03:00.0-sas-0x50062b0000000009:1:7-0xd5877871dd08cf92:7
|
||||||
|
|
||||||
|
# Channel C: PCI Bus 4
|
||||||
|
c1 pci-0000:04:00.0-sas-0x50062b0000000003:1:0-0xd6806678d6f6d492:0
|
||||||
|
c2 pci-0000:04:00.0-sas-0x50062b0000000004:1:1-0xd680696fd6f9cb92:1
|
||||||
|
c3 pci-0000:04:00.0-sas-0x50062b0000000005:1:2-0xd3827182d801e292:2
|
||||||
|
c4 pci-0000:04:00.0-sas-0x50062b0000000006:1:3-0xd680666fd6f6cb92:3
|
||||||
|
c5 pci-0000:04:00.0-sas-0x50062b0000000007:1:4-0xd6806970d6f9cc92:4
|
||||||
|
c6 pci-0000:04:00.0-sas-0x50062b0000000008:1:5-0xd6806b62d6fbbe92:5
|
||||||
|
c7 pci-0000:04:00.0-sas-0x50062b0000000009:1:6-0xd58a5760e0e7bd92:6
|
||||||
|
c8 pci-0000:04:00.0-sas-0x50062b000000000a:1:7-0xd680717fd601dc92:7
|
||||||
|
|
||||||
|
# Channel D: PCI Bus 41
|
||||||
|
d1 pci-0000:41:00.0-sas-0x50062b0000000004:1:0-0xd6806572d6f5ce92:0
|
||||||
|
d2 pci-0000:41:00.0-sas-0x50062b0000000005:1:1-0xd6806983d6f9df92:1
|
||||||
|
d3 pci-0000:41:00.0-sas-0x50062b0000000006:1:2-0xd3826c69d8fcc892:2
|
||||||
|
d4 pci-0000:41:00.0-sas-0x50062b0000000007:1:3-0xd680725fd602bc92:3
|
||||||
|
d5 pci-0000:41:00.0-sas-0x50062b0000000008:1:4-0xd6806971d6f9cd92:4
|
||||||
|
d6 pci-0000:41:00.0-sas-0x50062b0000000009:1:5-0xd680726dd602ca92:5
|
||||||
|
d7 pci-0000:41:00.0-sas-0x50062b000000000a:1:6-0xd3827772d807d292:6
|
||||||
|
d8 pci-0000:41:00.0-sas-0x50062b000000000b:1:7-0xd4955584ebe5e192:7
|
||||||
|
|
||||||
|
# Channel E: PCI Bus 42
|
||||||
|
e1 pci-0000:42:00.0-sas-0x50062b0000000005:1:0-0xd4925676e8e6d392:0
|
||||||
|
e2 pci-0000:42:00.0-sas-0x50062b0000000006:1:1-0xd6806b6ed6fbca92:1
|
||||||
|
e3 pci-0000:42:00.0-sas-0x50062b0000000007:1:2-0xd382765fd806bf92:2
|
||||||
|
e4 pci-0000:42:00.0-sas-0x50062b0000000008:1:3-0xd587786cdd08ca92:3
|
||||||
|
e5 pci-0000:42:00.0-sas-0x50062b0000000009:1:4-0xd66f4e5bc5deb792:4
|
||||||
|
e6 pci-0000:42:00.0-sas-0x50062b000000000a:1:5-0xd6806879d6f8d592:5
|
||||||
|
e7 pci-0000:42:00.0-sas-0x50062b000000000b:1:6-0xd5885175dee1d292:6
|
||||||
|
e8 pci-0000:42:00.0-sas-0x50062b000000000c:1:7-0xd588515fdee1bc92:7
|
||||||
|
|
||||||
|
# Channel F: PCI Bus 43
|
||||||
|
f1 pci-0000:43:00.0-sas-0x50062b0000000006:1:0-0xd66d6978c3f9d492:0
|
||||||
|
f2 pci-0000:43:00.0-sas-0x50062b0000000007:1:1-0xd6806a5cd6fab892:1
|
||||||
|
f3 pci-0000:43:00.0-sas-0x50062b0000000008:1:2-0xd6806563d6f5bf92:2
|
||||||
|
f4 pci-0000:43:00.0-sas-0x50062b0000000009:1:3-0xd6805664d6e6c092:3
|
||||||
|
f5 pci-0000:43:00.0-sas-0x50062b000000000a:1:4-0xd58c707ee200dc92:4
|
||||||
|
f6 pci-0000:43:00.0-sas-0x50062b000000000b:1:5-0xd5885781dee7de92:5
|
||||||
|
f7 pci-0000:43:00.0-sas-0x50062b000000000c:1:6-0xd3827481d804e192:6
|
||||||
|
f8 pci-0000:43:00.0-sas-0x50062b000000000d:1:7-0xd6806863d6f8bf92:7
|
|
@ -0,0 +1 @@
|
||||||
|
SUBDIRS = libavl libefi libnvpair libunicode libuutil libzfs libzpool
|
|
@ -0,0 +1,14 @@
|
||||||
|
include $(top_srcdir)/config/Rules.am
|
||||||
|
|
||||||
|
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
|
||||||
|
|
||||||
|
DEFAULT_INCLUDES += \
|
||||||
|
-I${top_srcdir}/module/avl/include \
|
||||||
|
-I${top_srcdir}/lib/libspl/include
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = libavl.la
|
||||||
|
|
||||||
|
libavl_la_SOURCES = \
|
||||||
|
${top_srcdir}/module/avl/avl.c \
|
||||||
|
${top_srcdir}/module/avl/include/sys/avl.h \
|
||||||
|
${top_srcdir}/module/avl/include/sys/avl_impl.h
|
|
@ -0,0 +1,14 @@
|
||||||
|
include $(top_srcdir)/config/Rules.am
|
||||||
|
|
||||||
|
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
|
||||||
|
|
||||||
|
DEFAULT_INCLUDES += \
|
||||||
|
-I${top_srcdir}/lib/libefi/include \
|
||||||
|
-I${top_srcdir}/lib/libspl/include
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = libefi.la
|
||||||
|
|
||||||
|
libefi_la_SOURCES = \
|
||||||
|
${top_srcdir}/lib/libefi/rdwr_efi.c \
|
||||||
|
${top_srcdir}/lib/libefi/include/sys/efi_partition.h \
|
||||||
|
${top_srcdir}/lib/libefi/include/sys/uuid.h
|
|
@ -0,0 +1,19 @@
|
||||||
|
include $(top_srcdir)/config/Rules.am
|
||||||
|
|
||||||
|
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
|
||||||
|
|
||||||
|
DEFAULT_INCLUDES += \
|
||||||
|
-I${top_srcdir}/module/nvpair/include \
|
||||||
|
-I${top_srcdir}/lib/libnvpair/include \
|
||||||
|
-I${top_srcdir}/lib/libspl/include
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = libnvpair.la
|
||||||
|
|
||||||
|
libnvpair_la_SOURCES = \
|
||||||
|
${top_srcdir}/lib/libnvpair/libnvpair.c \
|
||||||
|
${top_srcdir}/lib/libnvpair/nvpair_alloc_system.c \
|
||||||
|
${top_srcdir}/lib/libnvpair/include/libnvpair.h \
|
||||||
|
${top_srcdir}/module/nvpair/nvpair_alloc_fixed.c \
|
||||||
|
${top_srcdir}/module/nvpair/nvpair.c \
|
||||||
|
${top_srcdir}/module/nvpair/include/sys/nvpair.h \
|
||||||
|
${top_srcdir}/module/nvpair/include/sys/nvpair_impl.h
|
|
@ -0,0 +1,15 @@
|
||||||
|
include $(top_srcdir)/config/Rules.am
|
||||||
|
|
||||||
|
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
|
||||||
|
|
||||||
|
DEFAULT_INCLUDES += \
|
||||||
|
-I${top_srcdir}/module/unicode/include \
|
||||||
|
-I${top_srcdir}/lib/libspl/include
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = libunicode.la
|
||||||
|
|
||||||
|
libunicode_la_SOURCES = \
|
||||||
|
${top_srcdir}/module/unicode/u8_textprep.c \
|
||||||
|
${top_srcdir}/module/unicode/uconv.c \
|
||||||
|
${top_srcdir}/module/unicode/include/sys/u8_textprep.h \
|
||||||
|
${top_srcdir}/module/unicode/include/sys/u8_textprep_data.h
|
|
@ -0,0 +1,27 @@
|
||||||
|
include $(top_srcdir)/config/Rules.am
|
||||||
|
|
||||||
|
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
|
||||||
|
|
||||||
|
DEFAULT_INCLUDES += \
|
||||||
|
-I${top_srcdir}/lib/libuutil/include \
|
||||||
|
-I${top_srcdir}/lib/libspl/include \
|
||||||
|
-I${top_srcdir}/module/avl/include
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = libuutil.la
|
||||||
|
|
||||||
|
libuutil_la_LIBADD = ${top_srcdir}/lib/libavl/libavl.la
|
||||||
|
|
||||||
|
libuutil_la_SOURCES = \
|
||||||
|
${top_srcdir}/lib/libuutil/uu_alloc.c \
|
||||||
|
${top_srcdir}/lib/libuutil/uu_avl.c \
|
||||||
|
${top_srcdir}/lib/libuutil/uu_dprintf.c \
|
||||||
|
${top_srcdir}/lib/libuutil/uu_ident.c \
|
||||||
|
${top_srcdir}/lib/libuutil/uu_list.c \
|
||||||
|
${top_srcdir}/lib/libuutil/uu_misc.c \
|
||||||
|
${top_srcdir}/lib/libuutil/uu_open.c \
|
||||||
|
${top_srcdir}/lib/libuutil/uu_pname.c \
|
||||||
|
${top_srcdir}/lib/libuutil/uu_string.c \
|
||||||
|
${top_srcdir}/lib/libuutil/uu_strtoint.c \
|
||||||
|
${top_srcdir}/lib/libuutil/include/libuutil.h \
|
||||||
|
${top_srcdir}/lib/libuutil/include/libuutil_common.h \
|
||||||
|
${top_srcdir}/lib/libuutil/include/libuutil_impl.h
|
|
@ -0,0 +1,39 @@
|
||||||
|
include $(top_srcdir)/config/Rules.am
|
||||||
|
|
||||||
|
DEFAULT_INCLUDES += \
|
||||||
|
-I${top_srcdir}/lib/libzfs/include \
|
||||||
|
-I${top_srcdir}/lib/libzpool/include \
|
||||||
|
-I${top_srcdir}/lib/libspl/include \
|
||||||
|
-I${top_srcdir}/lib/libnvpair/include \
|
||||||
|
-I${top_srcdir}/lib/libuutil/include \
|
||||||
|
-I${top_srcdir}/lib/libefi/include \
|
||||||
|
-I${top_srcdir}/module/zfs \
|
||||||
|
-I${top_srcdir}/module/zfs/include \
|
||||||
|
-I${top_srcdir}/module/zcommon/include \
|
||||||
|
-I${top_srcdir}/module/nvpair/include \
|
||||||
|
-I${top_srcdir}/module/avl/include \
|
||||||
|
-I${top_srcdir}/module/unicode/include
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = libzfs.la
|
||||||
|
|
||||||
|
libzfs_la_LDFLAGS = -lm
|
||||||
|
|
||||||
|
libzfs_la_LIBADD = \
|
||||||
|
${top_srcdir}/lib/libefi/libefi.la \
|
||||||
|
${top_srcdir}/lib/libuutil/libuutil.la
|
||||||
|
|
||||||
|
libzfs_la_SOURCES = \
|
||||||
|
${top_srcdir}/lib/libzfs/libzfs_changelist.c \
|
||||||
|
${top_srcdir}/lib/libzfs/libzfs_config.c \
|
||||||
|
${top_srcdir}/lib/libzfs/libzfs_dataset.c \
|
||||||
|
${top_srcdir}/lib/libzfs/libzfs_diff.c \
|
||||||
|
${top_srcdir}/lib/libzfs/libzfs_fru.c \
|
||||||
|
${top_srcdir}/lib/libzfs/libzfs_graph.c \
|
||||||
|
${top_srcdir}/lib/libzfs/libzfs_import.c \
|
||||||
|
${top_srcdir}/lib/libzfs/libzfs_mount.c \
|
||||||
|
${top_srcdir}/lib/libzfs/libzfs_pool.c \
|
||||||
|
${top_srcdir}/lib/libzfs/libzfs_sendrecv.c \
|
||||||
|
${top_srcdir}/lib/libzfs/libzfs_status.c \
|
||||||
|
${top_srcdir}/lib/libzfs/libzfs_util.c \
|
||||||
|
${top_srcdir}/lib/libzfs/include/libzfs.h \
|
||||||
|
${top_srcdir}/lib/libzfs/include/libzfs_impl.h
|
|
@ -0,0 +1,168 @@
|
||||||
|
include $(top_srcdir)/config/Rules.am
|
||||||
|
|
||||||
|
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
|
||||||
|
|
||||||
|
SUBDIRS = include
|
||||||
|
DEFAULT_INCLUDES += \
|
||||||
|
-I${top_srcdir}/lib/libzpool/include \
|
||||||
|
-I${top_srcdir}/lib/libspl/include \
|
||||||
|
-I${top_srcdir}/lib/libnvpair/include \
|
||||||
|
-I${top_srcdir}/module/zcommon/include \
|
||||||
|
-I${top_srcdir}/module/nvpair/include \
|
||||||
|
-I${top_srcdir}/module/avl/include \
|
||||||
|
-I${top_srcdir}/module/unicode/include \
|
||||||
|
-I${top_srcdir}/module/zfs/include
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = libzpool.la
|
||||||
|
|
||||||
|
libzpool_la_LIBADD = \
|
||||||
|
${top_srcdir}/lib/libunicode/libunicode.la \
|
||||||
|
${top_srcdir}/lib/libavl/libavl.la \
|
||||||
|
${top_srcdir}/lib/libspl/libspl.la
|
||||||
|
|
||||||
|
libzpool_la_SOURCES = \
|
||||||
|
${top_srcdir}/lib/libzpool/kernel.c \
|
||||||
|
${top_srcdir}/lib/libzpool/taskq.c \
|
||||||
|
${top_srcdir}/lib/libzpool/util.c \
|
||||||
|
${top_srcdir}/module/zcommon/zfs_comutil.c \
|
||||||
|
${top_srcdir}/module/zcommon/zfs_deleg.c \
|
||||||
|
${top_srcdir}/module/zcommon/zfs_fletcher.c \
|
||||||
|
${top_srcdir}/module/zcommon/zfs_namecheck.c \
|
||||||
|
${top_srcdir}/module/zcommon/zfs_prop.c \
|
||||||
|
${top_srcdir}/module/zcommon/zpool_prop.c \
|
||||||
|
${top_srcdir}/module/zcommon/zprop_common.c \
|
||||||
|
${top_srcdir}/module/zcommon/include/sys/fs \
|
||||||
|
${top_srcdir}/module/zcommon/include/sys/fs/zfs.h \
|
||||||
|
${top_srcdir}/module/zcommon/include/zfs_comutil.h \
|
||||||
|
${top_srcdir}/module/zcommon/include/zfs_deleg.h \
|
||||||
|
${top_srcdir}/module/zcommon/include/zfs_fletcher.h \
|
||||||
|
${top_srcdir}/module/zcommon/include/zfs_namecheck.h \
|
||||||
|
${top_srcdir}/module/zcommon/include/zfs_prop.h \
|
||||||
|
${top_srcdir}/module/zfs/arc.c \
|
||||||
|
${top_srcdir}/module/zfs/bplist.c \
|
||||||
|
${top_srcdir}/module/zfs/bpobj.c \
|
||||||
|
${top_srcdir}/module/zfs/dbuf.c \
|
||||||
|
${top_srcdir}/module/zfs/ddt.c \
|
||||||
|
${top_srcdir}/module/zfs/ddt_zap.c \
|
||||||
|
${top_srcdir}/module/zfs/dmu.c \
|
||||||
|
${top_srcdir}/module/zfs/dmu_diff.c \
|
||||||
|
${top_srcdir}/module/zfs/dmu_object.c \
|
||||||
|
${top_srcdir}/module/zfs/dmu_objset.c \
|
||||||
|
${top_srcdir}/module/zfs/dmu_send.c \
|
||||||
|
${top_srcdir}/module/zfs/dmu_traverse.c \
|
||||||
|
${top_srcdir}/module/zfs/dmu_tx.c \
|
||||||
|
${top_srcdir}/module/zfs/dmu_zfetch.c \
|
||||||
|
${top_srcdir}/module/zfs/dnode.c \
|
||||||
|
${top_srcdir}/module/zfs/dnode_sync.c \
|
||||||
|
${top_srcdir}/module/zfs/dsl_dataset.c \
|
||||||
|
${top_srcdir}/module/zfs/dsl_deadlist.c \
|
||||||
|
${top_srcdir}/module/zfs/dsl_deleg.c \
|
||||||
|
${top_srcdir}/module/zfs/dsl_dir.c \
|
||||||
|
${top_srcdir}/module/zfs/dsl_pool.c \
|
||||||
|
${top_srcdir}/module/zfs/dsl_prop.c \
|
||||||
|
${top_srcdir}/module/zfs/dsl_scan.c \
|
||||||
|
${top_srcdir}/module/zfs/dsl_synctask.c \
|
||||||
|
${top_srcdir}/module/zfs/fm.c \
|
||||||
|
${top_srcdir}/module/zfs/gzip.c \
|
||||||
|
${top_srcdir}/module/zfs/lzjb.c \
|
||||||
|
${top_srcdir}/module/zfs/metaslab.c \
|
||||||
|
${top_srcdir}/module/zfs/refcount.c \
|
||||||
|
${top_srcdir}/module/zfs/rrwlock.c \
|
||||||
|
${top_srcdir}/module/zfs/sa.c \
|
||||||
|
${top_srcdir}/module/zfs/sha256.c \
|
||||||
|
${top_srcdir}/module/zfs/spa.c \
|
||||||
|
${top_srcdir}/module/zfs/spa_boot.c \
|
||||||
|
${top_srcdir}/module/zfs/spa_config.c \
|
||||||
|
${top_srcdir}/module/zfs/spa_errlog.c \
|
||||||
|
${top_srcdir}/module/zfs/spa_history.c \
|
||||||
|
${top_srcdir}/module/zfs/spa_misc.c \
|
||||||
|
${top_srcdir}/module/zfs/space_map.c \
|
||||||
|
${top_srcdir}/module/zfs/txg.c \
|
||||||
|
${top_srcdir}/module/zfs/uberblock.c \
|
||||||
|
${top_srcdir}/module/zfs/unique.c \
|
||||||
|
${top_srcdir}/module/zfs/vdev.c \
|
||||||
|
${top_srcdir}/module/zfs/vdev_cache.c \
|
||||||
|
${top_srcdir}/module/zfs/vdev_file.c \
|
||||||
|
${top_srcdir}/module/zfs/vdev_label.c \
|
||||||
|
${top_srcdir}/module/zfs/vdev_mirror.c \
|
||||||
|
${top_srcdir}/module/zfs/vdev_missing.c \
|
||||||
|
${top_srcdir}/module/zfs/vdev_queue.c \
|
||||||
|
${top_srcdir}/module/zfs/vdev_raidz.c \
|
||||||
|
${top_srcdir}/module/zfs/vdev_root.c \
|
||||||
|
${top_srcdir}/module/zfs/zap.c \
|
||||||
|
${top_srcdir}/module/zfs/zap_leaf.c \
|
||||||
|
${top_srcdir}/module/zfs/zap_micro.c \
|
||||||
|
${top_srcdir}/module/zfs/zfs_byteswap.c \
|
||||||
|
${top_srcdir}/module/zfs/zfs_debug.c \
|
||||||
|
${top_srcdir}/module/zfs/zfs_fm.c \
|
||||||
|
${top_srcdir}/module/zfs/zfs_fuid.c \
|
||||||
|
${top_srcdir}/module/zfs/zfs_onexit.c \
|
||||||
|
${top_srcdir}/module/zfs/zfs_sa.c \
|
||||||
|
${top_srcdir}/module/zfs/zfs_znode.c \
|
||||||
|
${top_srcdir}/module/zfs/zil.c \
|
||||||
|
${top_srcdir}/module/zfs/zio.c \
|
||||||
|
${top_srcdir}/module/zfs/zio_checksum.c \
|
||||||
|
${top_srcdir}/module/zfs/zio_compress.c \
|
||||||
|
${top_srcdir}/module/zfs/zio_inject.c \
|
||||||
|
${top_srcdir}/module/zfs/zle.c \
|
||||||
|
${top_srcdir}/module/zfs/zrlock.c \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/arc.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/bplist.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dbuf.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dmu.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dmu_impl.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dmu_objset.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dmu_traverse.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dmu_tx.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dmu_zfetch.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dnode.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dsl_dataset.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dsl_deleg.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dsl_dir.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dsl_pool.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dsl_prop.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/dsl_synctask.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/metaslab.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/metaslab_impl.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/refcount.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/rrwlock.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/spa_boot.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/space_map.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/spa.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/spa_impl.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/txg.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/txg_impl.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/uberblock.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/uberblock_impl.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/unique.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/vdev_file.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/vdev.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/vdev_impl.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zap.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zap_impl.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zap_leaf.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zfs_acl.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zfs_context.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zfs_ctldir.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zfs_debug.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zfs_dir.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zfs_fuid.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zfs_ioctl.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zfs_onexit.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zfs_rlock.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zfs_stat.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zfs_vfsops.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zfs_znode.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zfs_zrlock.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zil.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zil_impl.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zio_checksum.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zio_compress.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zio.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zio_impl.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/zvol.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/fm/protocol.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/fm/util.h \
|
||||||
|
${top_srcdir}/module/zfs/include/sys/fm/fs/zfs.h
|
||||||
|
|
||||||
|
libzpool_la_LDFLAGS = -pthread
|
|
@ -0,0 +1 @@
|
||||||
|
nobase_pkginclude_HEADERS = sys/*.h
|
|
@ -0,0 +1 @@
|
||||||
|
SUBDIRS = man8
|
|
@ -0,0 +1,5 @@
|
||||||
|
man_MANS = zdb.8 zfs.8 zpool.8
|
||||||
|
EXTRA_DIST = $(man_MANS)
|
||||||
|
|
||||||
|
install-data-local:
|
||||||
|
$(INSTALL) -d -m 0755 "$(DESTDIR)$(mandir)/man8"
|
|
@ -0,0 +1,54 @@
|
||||||
|
subdir-m += avl
|
||||||
|
subdir-m += nvpair
|
||||||
|
subdir-m += unicode
|
||||||
|
subdir-m += zcommon
|
||||||
|
subdir-m += zfs
|
||||||
|
|
||||||
|
modules:
|
||||||
|
# Make the exported SPL symbols available to these modules.
|
||||||
|
cp @SPL_OBJ@/@SPL_SYMBOLS@ .
|
||||||
|
$(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ $@
|
||||||
|
if [ -f @SPL_SYMBOLS@ ]; then $(RM) @SPL_SYMBOLS@; fi
|
||||||
|
if [ -f @LINUX_SYMBOLS@ ]; then $(RM) @LINUX_SYMBOLS@; fi
|
||||||
|
if [ -f Module.markers ]; then $(RM) Module.markers; fi
|
||||||
|
|
||||||
|
modules_install:
|
||||||
|
# Install the kernel modules
|
||||||
|
$(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` \
|
||||||
|
INSTALL_MOD_PATH=$(DESTDIR) \
|
||||||
|
INSTALL_MOD_DIR=addon/zfs $@
|
||||||
|
find ${DESTDIR}/lib/modules/ -name 'modules.*' | xargs ${RM}
|
||||||
|
sysmap=${DESTDIR}/boot/System.map-@LINUX_VERSION@; \
|
||||||
|
if [ -f $$sysmap ]; then \
|
||||||
|
depmod -ae -F $$sysmap @LINUX_VERSION@; \
|
||||||
|
fi
|
||||||
|
# Install the required headers in to the kernel source
|
||||||
|
destname=zfs-@ZFS_META_VERSION@/@LINUX_VERSION@; \
|
||||||
|
instdest=$(DESTDIR)/usr/src/$$destname; \
|
||||||
|
(find . -mindepth 3 -name '*.h' | xargs -Ihdr sh -c \
|
||||||
|
"DEST=hdr && install -D hdr $$instdest/\$${DEST#*/*/*/}") || exit 1
|
||||||
|
|
||||||
|
modules_uninstall:
|
||||||
|
# Uninstall the kernel modules
|
||||||
|
$(RM) -R ${DESTDIR}/lib/modules/@LINUX_VERSION@/addon/zfs
|
||||||
|
# Uninstall the required headers from the kernel source
|
||||||
|
destname=zfs-@ZFS_META_VERSION@/@LINUX_VERSION@; \
|
||||||
|
instdest=$(DESTDIR)/usr/src/$$destname; \
|
||||||
|
$(RM) -R $$instdest
|
||||||
|
|
||||||
|
distdir:
|
||||||
|
distfiles=`find . -name '*.c' -o -name '*.h'`; \
|
||||||
|
for distfile in $$distfiles; do \
|
||||||
|
distpath=`dirname $$distdir/$$distfile`; \
|
||||||
|
(/bin/mkdir -p $$distpath && \
|
||||||
|
/bin/cp $$distfile $$distdir/$$distfile) || exit 1; \
|
||||||
|
done
|
||||||
|
|
||||||
|
distclean maintainer-clean: clean
|
||||||
|
install: modules_install
|
||||||
|
uninstall: modules_uninstall
|
||||||
|
all: modules
|
||||||
|
check:
|
|
@ -0,0 +1,8 @@
|
||||||
|
MODULE := zavl
|
||||||
|
|
||||||
|
EXTRA_CFLAGS = -I@MODDIR@/avl/include
|
||||||
|
EXTRA_CFLAGS += @KERNELCPPFLAGS@
|
||||||
|
|
||||||
|
obj-m := ${MODULE}.o
|
||||||
|
|
||||||
|
${MODULE}-objs += avl.o
|
|
@ -0,0 +1,10 @@
|
||||||
|
MODULE := znvpair
|
||||||
|
|
||||||
|
EXTRA_CFLAGS = -I@MODDIR@/nvpair/include
|
||||||
|
EXTRA_CFLAGS += @KERNELCPPFLAGS@
|
||||||
|
|
||||||
|
obj-m := ${MODULE}.o
|
||||||
|
|
||||||
|
${MODULE}-objs += nvpair.o
|
||||||
|
${MODULE}-objs += nvpair_alloc_spl.o
|
||||||
|
${MODULE}-objs += nvpair_alloc_fixed.o
|
|
@ -0,0 +1,9 @@
|
||||||
|
MODULE := zunicode
|
||||||
|
|
||||||
|
EXTRA_CFLAGS = -I@MODDIR@/unicode/include
|
||||||
|
EXTRA_CFLAGS += @KERNELCPPFLAGS@
|
||||||
|
|
||||||
|
obj-m := ${MODULE}.o
|
||||||
|
|
||||||
|
${MODULE}-objs += u8_textprep.o
|
||||||
|
${MODULE}-objs += uconv.o
|
|
@ -0,0 +1,18 @@
|
||||||
|
MODULE := zcommon
|
||||||
|
|
||||||
|
EXTRA_CFLAGS = -I@MODDIR@/avl/include
|
||||||
|
EXTRA_CFLAGS += -I@MODDIR@/nvpair/include
|
||||||
|
EXTRA_CFLAGS += -I@MODDIR@/unicode/include
|
||||||
|
EXTRA_CFLAGS += -I@MODDIR@/zcommon/include
|
||||||
|
EXTRA_CFLAGS += -I@MODDIR@/zfs/include
|
||||||
|
EXTRA_CFLAGS += @KERNELCPPFLAGS@
|
||||||
|
|
||||||
|
obj-m := ${MODULE}.o
|
||||||
|
|
||||||
|
${MODULE}-objs += zfs_deleg.o
|
||||||
|
${MODULE}-objs += zfs_prop.o
|
||||||
|
${MODULE}-objs += zprop_common.o
|
||||||
|
${MODULE}-objs += zfs_namecheck.o
|
||||||
|
${MODULE}-objs += zfs_comutil.o
|
||||||
|
${MODULE}-objs += zfs_fletcher.o
|
||||||
|
${MODULE}-objs += zpool_prop.o
|
|
@ -0,0 +1,89 @@
|
||||||
|
MODULE := zfs
|
||||||
|
|
||||||
|
EXTRA_CFLAGS = -I@MODDIR@/zfs/include
|
||||||
|
EXTRA_CFLAGS += -I@MODDIR@/zcommon/include
|
||||||
|
EXTRA_CFLAGS += -I@MODDIR@/avl/include
|
||||||
|
EXTRA_CFLAGS += -I@MODDIR@/nvpair/include
|
||||||
|
EXTRA_CFLAGS += -I@MODDIR@/unicode/include
|
||||||
|
EXTRA_CFLAGS += @KERNELCPPFLAGS@
|
||||||
|
|
||||||
|
obj-m := ${MODULE}.o
|
||||||
|
|
||||||
|
${MODULE}-objs += arc.o
|
||||||
|
${MODULE}-objs += bplist.o
|
||||||
|
${MODULE}-objs += bpobj.o
|
||||||
|
${MODULE}-objs += dbuf.o
|
||||||
|
${MODULE}-objs += ddt.o
|
||||||
|
${MODULE}-objs += ddt_zap.o
|
||||||
|
${MODULE}-objs += dmu.o
|
||||||
|
${MODULE}-objs += dmu_diff.o
|
||||||
|
${MODULE}-objs += dmu_object.o
|
||||||
|
${MODULE}-objs += dmu_objset.o
|
||||||
|
${MODULE}-objs += dmu_send.o
|
||||||
|
${MODULE}-objs += dmu_traverse.o
|
||||||
|
${MODULE}-objs += dmu_tx.o
|
||||||
|
${MODULE}-objs += dmu_zfetch.o
|
||||||
|
${MODULE}-objs += dnode.o
|
||||||
|
${MODULE}-objs += dnode_sync.o
|
||||||
|
${MODULE}-objs += dsl_dataset.o
|
||||||
|
${MODULE}-objs += dsl_deadlist.o
|
||||||
|
${MODULE}-objs += dsl_deleg.o
|
||||||
|
${MODULE}-objs += dsl_dir.o
|
||||||
|
${MODULE}-objs += dsl_pool.o
|
||||||
|
${MODULE}-objs += dsl_prop.o
|
||||||
|
${MODULE}-objs += dsl_scan.o
|
||||||
|
${MODULE}-objs += dsl_synctask.o
|
||||||
|
${MODULE}-objs += fm.o
|
||||||
|
${MODULE}-objs += gzip.o
|
||||||
|
${MODULE}-objs += lzjb.o
|
||||||
|
${MODULE}-objs += metaslab.o
|
||||||
|
${MODULE}-objs += refcount.o
|
||||||
|
${MODULE}-objs += rrwlock.o
|
||||||
|
${MODULE}-objs += sa.o
|
||||||
|
${MODULE}-objs += sha256.o
|
||||||
|
${MODULE}-objs += spa.o
|
||||||
|
${MODULE}-objs += spa_boot.o
|
||||||
|
${MODULE}-objs += spa_config.o
|
||||||
|
${MODULE}-objs += spa_errlog.o
|
||||||
|
${MODULE}-objs += spa_history.o
|
||||||
|
${MODULE}-objs += spa_misc.o
|
||||||
|
${MODULE}-objs += space_map.o
|
||||||
|
${MODULE}-objs += txg.o
|
||||||
|
${MODULE}-objs += uberblock.o
|
||||||
|
${MODULE}-objs += unique.o
|
||||||
|
${MODULE}-objs += vdev.o
|
||||||
|
${MODULE}-objs += vdev_cache.o
|
||||||
|
${MODULE}-objs += vdev_file.o
|
||||||
|
${MODULE}-objs += vdev_label.o
|
||||||
|
${MODULE}-objs += vdev_mirror.o
|
||||||
|
${MODULE}-objs += vdev_missing.o
|
||||||
|
${MODULE}-objs += vdev_queue.o
|
||||||
|
${MODULE}-objs += vdev_raidz.o
|
||||||
|
${MODULE}-objs += vdev_root.o
|
||||||
|
${MODULE}-objs += zap.o
|
||||||
|
${MODULE}-objs += zap_leaf.o
|
||||||
|
${MODULE}-objs += zap_micro.o
|
||||||
|
${MODULE}-objs += zfs_acl.o
|
||||||
|
${MODULE}-objs += zfs_byteswap.o
|
||||||
|
${MODULE}-objs += zfs_ctldir.o
|
||||||
|
${MODULE}-objs += zfs_debug.o
|
||||||
|
${MODULE}-objs += zfs_dir.o
|
||||||
|
${MODULE}-objs += zfs_fm.o
|
||||||
|
${MODULE}-objs += zfs_fuid.o
|
||||||
|
${MODULE}-objs += zfs_ioctl.o
|
||||||
|
${MODULE}-objs += zfs_log.o
|
||||||
|
${MODULE}-objs += zfs_onexit.o
|
||||||
|
${MODULE}-objs += zfs_replay.o
|
||||||
|
${MODULE}-objs += zfs_rlock.o
|
||||||
|
${MODULE}-objs += zfs_sa.o
|
||||||
|
${MODULE}-objs += zfs_vfsops.o
|
||||||
|
${MODULE}-objs += zfs_vnops.o
|
||||||
|
${MODULE}-objs += zfs_znode.o
|
||||||
|
${MODULE}-objs += zil.o
|
||||||
|
${MODULE}-objs += zio.o
|
||||||
|
${MODULE}-objs += zio_checksum.o
|
||||||
|
${MODULE}-objs += zio_compress.o
|
||||||
|
${MODULE}-objs += zio_inject.o
|
||||||
|
${MODULE}-objs += zle.o
|
||||||
|
${MODULE}-objs += zrlock.o
|
||||||
|
${MODULE}-objs += zvol.o
|
|
@ -0,0 +1,32 @@
|
||||||
|
Detect a ZFS filesystem by looking for valid uberblocks.
|
||||||
|
|
||||||
|
This support will appear in an upstream version of e2fsprogs. For the
|
||||||
|
moment however you will still need to locally patch you e2fsprogs packages.
|
||||||
|
This patch applies cleanly to fc11's e2fsprogs-*-1.41.4-10 and should
|
||||||
|
apply easily enough to the e2fsprogs from other distros.
|
||||||
|
|
||||||
|
--- e2fsprogs.orig/lib/blkid/probe.c 2009-01-20 09:06:31.000000000 -0800
|
||||||
|
+++ e2fsprogs/lib/blkid/probe.c 2009-10-06 10:16:37.000000000 -0700
|
||||||
|
@@ -1359,10 +1361,18 @@
|
||||||
|
{ "iso9660", 32, 1, 5, "CD001", probe_iso9660 },
|
||||||
|
{ "iso9660", 32, 9, 5, "CDROM", probe_iso9660 },
|
||||||
|
{ "jfs", 32, 0, 4, "JFS1", probe_jfs },
|
||||||
|
- { "zfs", 8, 0, 8, "\0\0\x02\xf5\xb0\x07\xb1\x0c", probe_zfs },
|
||||||
|
- { "zfs", 8, 0, 8, "\x0c\xb1\x07\xb0\xf5\x02\0\0", probe_zfs },
|
||||||
|
- { "zfs", 264, 0, 8, "\0\0\x02\xf5\xb0\x07\xb1\x0c", probe_zfs },
|
||||||
|
- { "zfs", 264, 0, 8, "\x0c\xb1\x07\xb0\xf5\x02\0\0", probe_zfs },
|
||||||
|
+ { "zfs", 128, 0, 8, "\0\0\0\0\0\xba\xb1\x0c", probe_zfs },
|
||||||
|
+ { "zfs", 132, 0, 8, "\0\0\0\0\0\xba\xb1\x0c", probe_zfs },
|
||||||
|
+ { "zfs", 136, 0, 8, "\0\0\0\0\0\xba\xb1\x0c", probe_zfs },
|
||||||
|
+ { "zfs", 128, 0, 8, "\x0c\xb1\xba\0\0\0\0\0", probe_zfs },
|
||||||
|
+ { "zfs", 132, 0, 8, "\x0c\xb1\xba\0\0\0\0\0", probe_zfs },
|
||||||
|
+ { "zfs", 136, 0, 8, "\x0c\xb1\xba\0\0\0\0\0", probe_zfs },
|
||||||
|
+ { "zfs", 384, 0, 8, "\0\0\0\0\0\xba\xb1\x0c", probe_zfs },
|
||||||
|
+ { "zfs", 388, 0, 8, "\0\0\0\0\0\xba\xb1\x0c", probe_zfs },
|
||||||
|
+ { "zfs", 392, 0, 8, "\0\0\0\0\0\xba\xb1\x0c", probe_zfs },
|
||||||
|
+ { "zfs", 384, 0, 8, "\x0c\xb1\xba\0\0\0\0\0", probe_zfs },
|
||||||
|
+ { "zfs", 388, 0, 8, "\x0c\xb1\xba\0\0\0\0\0", probe_zfs },
|
||||||
|
+ { "zfs", 392, 0, 8, "\x0c\xb1\xba\0\0\0\0\0", probe_zfs },
|
||||||
|
{ "hfsplus", 1, 0, 2, "BD", probe_hfsplus },
|
||||||
|
{ "hfsplus", 1, 0, 2, "H+", probe_hfsplus },
|
||||||
|
{ "hfsplus", 1, 0, 2, "HX", probe_hfsplus },
|
|
@ -0,0 +1,29 @@
|
||||||
|
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||||
|
nobase_pkglibexec_SCRIPTS = common.sh
|
||||||
|
nobase_pkglibexec_SCRIPTS += zconfig.sh
|
||||||
|
nobase_pkglibexec_SCRIPTS += zfs.sh
|
||||||
|
nobase_pkglibexec_SCRIPTS += zpool-create.sh
|
||||||
|
nobase_pkglibexec_SCRIPTS += zpool-config/*
|
||||||
|
EXTRA_DIST = zfs-update.sh $(nobase_pkglibexec_SCRIPTS)
|
||||||
|
|
||||||
|
ZFS=${top_srcdir}/scripts/zfs.sh
|
||||||
|
ZCONFIG=${top_srcdir}/scripts/zconfig.sh
|
||||||
|
ZTEST=${top_builddir}/cmd/ztest/ztest
|
||||||
|
|
||||||
|
check:
|
||||||
|
@echo
|
||||||
|
@echo -n "===================================="
|
||||||
|
@echo -n " ZTEST "
|
||||||
|
@echo "===================================="
|
||||||
|
@echo
|
||||||
|
@$(ZFS)
|
||||||
|
@$(ZTEST) -V
|
||||||
|
@$(ZFS) -u
|
||||||
|
@echo
|
||||||
|
@echo
|
||||||
|
@echo -n "==================================="
|
||||||
|
@echo -n " ZCONFIG "
|
||||||
|
@echo "==================================="
|
||||||
|
@echo
|
||||||
|
@$(ZCONFIG)
|
||||||
|
@echo
|
|
@ -0,0 +1,373 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Common support functions for testing scripts. If a .script-config
|
||||||
|
# files is available it will be sourced so in-tree kernel modules and
|
||||||
|
# utilities will be used. If no .script-config can be found then the
|
||||||
|
# installed kernel modules and utilities will be used.
|
||||||
|
|
||||||
|
basedir="$(dirname $0)"
|
||||||
|
|
||||||
|
SCRIPT_CONFIG=.script-config
|
||||||
|
if [ -f "${basedir}/../${SCRIPT_CONFIG}" ]; then
|
||||||
|
. "${basedir}/../${SCRIPT_CONFIG}"
|
||||||
|
else
|
||||||
|
MODULES=(zlib_deflate spl splat zavl znvpair zunicode zcommon zfs)
|
||||||
|
fi
|
||||||
|
|
||||||
|
PROG="<define PROG>"
|
||||||
|
CLEANUP=
|
||||||
|
VERBOSE=
|
||||||
|
VERBOSE_FLAG=
|
||||||
|
FORCE=
|
||||||
|
FORCE_FLAG=
|
||||||
|
DUMP_LOG=
|
||||||
|
ERROR=
|
||||||
|
RAID0S=()
|
||||||
|
RAID10S=()
|
||||||
|
RAIDZS=()
|
||||||
|
RAIDZ2S=()
|
||||||
|
|
||||||
|
prefix=@prefix@
|
||||||
|
exec_prefix=@exec_prefix@
|
||||||
|
libexecdir=@libexecdir@
|
||||||
|
pkglibexecdir=${libexecdir}/@PACKAGE@
|
||||||
|
bindir=@bindir@
|
||||||
|
sbindir=@sbindir@
|
||||||
|
|
||||||
|
ETCDIR=${ETCDIR:-/etc}
|
||||||
|
DEVDIR=${DEVDIR:-/dev/disk/zpool}
|
||||||
|
ZPOOLDIR=${ZPOOLDIR:-${pkglibexecdir}/zpool-config}
|
||||||
|
|
||||||
|
ZDB=${ZDB:-${sbindir}/zdb}
|
||||||
|
ZFS=${ZFS:-${sbindir}/zfs}
|
||||||
|
ZINJECT=${ZINJECT:-${sbindir}/zinject}
|
||||||
|
ZPOOL=${ZPOOL:-${sbindir}/zpool}
|
||||||
|
ZPOOL_ID=${ZPOOL_ID:-${bindir}/zpool_id}
|
||||||
|
ZTEST=${ZTEST:-${sbindir}/ztest}
|
||||||
|
|
||||||
|
COMMON_SH=${COMMON_SH:-${pkglibexecdir}/common.sh}
|
||||||
|
ZFS_SH=${ZFS_SH:-${pkglibexecdir}/zfs.sh}
|
||||||
|
ZPOOL_CREATE_SH=${ZPOOL_CREATE_SH:-${pkglibexecdir}/zpool-create.sh}
|
||||||
|
|
||||||
|
LDMOD=${LDMOD:-/sbin/modprobe}
|
||||||
|
LSMOD=${LSMOD:-/sbin/lsmod}
|
||||||
|
RMMOD=${RMMOD:-/sbin/rmmod}
|
||||||
|
INFOMOD=${INFOMOD:-/sbin/modinfo}
|
||||||
|
LOSETUP=${LOSETUP:-/sbin/losetup}
|
||||||
|
SYSCTL=${SYSCTL:-/sbin/sysctl}
|
||||||
|
UDEVADM=${UDEVADM:-/sbin/udevadm}
|
||||||
|
AWK=${AWK:-/usr/bin/awk}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
echo -e "${PROG}: $1" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
msg() {
|
||||||
|
if [ ${VERBOSE} ]; then
|
||||||
|
echo "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
pass() {
|
||||||
|
echo "PASS"
|
||||||
|
}
|
||||||
|
|
||||||
|
fail() {
|
||||||
|
echo "FAIL ($1)"
|
||||||
|
exit $1
|
||||||
|
}
|
||||||
|
|
||||||
|
spl_dump_log() {
|
||||||
|
${SYSCTL} -w kernel.spl.debug.dump=1 &>/dev/null
|
||||||
|
local NAME=`dmesg | tail -n 1 | cut -f5 -d' '`
|
||||||
|
${SPLBUILD}/cmd/spl ${NAME} >${NAME}.log
|
||||||
|
echo
|
||||||
|
echo "Dumped debug log: ${NAME}.log"
|
||||||
|
tail -n1 ${NAME}.log
|
||||||
|
echo
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
check_modules() {
|
||||||
|
local LOADED_MODULES=()
|
||||||
|
local MISSING_MODULES=()
|
||||||
|
|
||||||
|
for MOD in ${MODULES[*]}; do
|
||||||
|
local NAME=`basename $MOD .ko`
|
||||||
|
|
||||||
|
if ${LSMOD} | egrep -q "^${NAME}"; then
|
||||||
|
LOADED_MODULES=(${NAME} ${LOADED_MODULES[*]})
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ${INFOMOD} ${MOD} 2>/dev/null ]; then
|
||||||
|
MISSING_MODULES=("\t${MOD}\n" ${MISSING_MODULES[*]})
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ${#LOADED_MODULES[*]} -gt 0 ]; then
|
||||||
|
ERROR="Unload these modules with '${PROG} -u':\n"
|
||||||
|
ERROR="${ERROR}${LOADED_MODULES[*]}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ${#MISSING_MODULES[*]} -gt 0 ]; then
|
||||||
|
ERROR="The following modules can not be found,"
|
||||||
|
ERROR="${ERROR} ensure your source trees are built:\n"
|
||||||
|
ERROR="${ERROR}${MISSING_MODULES[*]}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
load_module() {
|
||||||
|
local NAME=`basename $1 .ko`
|
||||||
|
|
||||||
|
if [ ${VERBOSE} ]; then
|
||||||
|
echo "Loading ${NAME} ($@)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
${LDMOD} $* || ERROR="Failed to load $1" return 1
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
load_modules() {
|
||||||
|
mkdir -p /etc/zfs
|
||||||
|
|
||||||
|
for MOD in ${MODULES[*]}; do
|
||||||
|
local NAME=`basename ${MOD} .ko`
|
||||||
|
local VALUE=
|
||||||
|
|
||||||
|
for OPT in "$@"; do
|
||||||
|
OPT_NAME=`echo ${OPT} | cut -f1 -d'='`
|
||||||
|
|
||||||
|
if [ ${NAME} = "${OPT_NAME}" ]; then
|
||||||
|
VALUE=`echo ${OPT} | cut -f2- -d'='`
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
load_module ${MOD} ${VALUE} || return 1
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ${VERBOSE} ]; then
|
||||||
|
echo "Successfully loaded ZFS module stack"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
unload_module() {
|
||||||
|
local NAME=`basename $1 .ko`
|
||||||
|
|
||||||
|
if [ ${VERBOSE} ]; then
|
||||||
|
echo "Unloading ${NAME} ($@)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
${RMMOD} ${NAME} || ERROR="Failed to unload ${NAME}" return 1
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
unload_modules() {
|
||||||
|
local MODULES_REVERSE=( $(echo ${MODULES[@]} |
|
||||||
|
${AWK} '{for (i=NF;i>=1;i--) printf $i" "} END{print ""}') )
|
||||||
|
|
||||||
|
for MOD in ${MODULES_REVERSE[*]}; do
|
||||||
|
local NAME=`basename ${MOD} .ko`
|
||||||
|
local USE_COUNT=`${LSMOD} |
|
||||||
|
egrep "^${NAME} "| ${AWK} '{print $3}'`
|
||||||
|
|
||||||
|
if [ "${USE_COUNT}" = 0 ] ; then
|
||||||
|
|
||||||
|
if [ "${DUMP_LOG}" -a ${NAME} = "spl" ]; then
|
||||||
|
spl_dump_log
|
||||||
|
fi
|
||||||
|
|
||||||
|
unload_module ${MOD} || return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ${VERBOSE} ]; then
|
||||||
|
echo "Successfully unloaded ZFS module stack"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
unused_loop_device() {
|
||||||
|
for DEVICE in `ls -1 /dev/loop*`; do
|
||||||
|
${LOSETUP} ${DEVICE} &>/dev/null
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo ${DEVICE}
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
die "Error: Unable to find unused loopback device"
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# This can be slightly dangerous because the loop devices we are
|
||||||
|
# cleanup up may not be ours. However, if the devices are currently
|
||||||
|
# in use we will not be able to remove them, and we only remove
|
||||||
|
# devices which include 'zpool' in the name. So any damage we might
|
||||||
|
# do should be limited to other zfs related testing.
|
||||||
|
#
|
||||||
|
cleanup_loop_devices() {
|
||||||
|
local TMP_FILE=`mktemp`
|
||||||
|
|
||||||
|
${LOSETUP} -a | tr -d '()' >${TMP_FILE}
|
||||||
|
${AWK} -F":" -v losetup="$LOSETUP" \
|
||||||
|
'/zpool/ { system("losetup -d "$1) }' ${TMP_FILE}
|
||||||
|
${AWK} -F" " '/zpool/ { system("rm -f "$3) }' ${TMP_FILE}
|
||||||
|
|
||||||
|
rm -f ${TMP_FILE}
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# The following udev helper functions assume that the provided
|
||||||
|
# udev rules file will create a /dev/disk/zpool/<CHANNEL><RANK>
|
||||||
|
# disk mapping. In this mapping each CHANNEL is represented by
|
||||||
|
# the letters a-z, and the RANK is represented by the numbers
|
||||||
|
# 1-n. A CHANNEL should identify a group of RANKS which are all
|
||||||
|
# attached to a single controller, each RANK represents a disk.
|
||||||
|
# This provides a simply mechanism to locate a specific drive
|
||||||
|
# given a known hardware configuration.
|
||||||
|
#
|
||||||
|
udev_setup() {
|
||||||
|
local SRC_PATH=$1
|
||||||
|
|
||||||
|
# When running in tree manually contruct symlinks in tree to
|
||||||
|
# the proper devices. Symlinks are installed for all entires
|
||||||
|
# in the config file regardless of if that device actually
|
||||||
|
# exists. When installed as a package udev can be relied on for
|
||||||
|
# this and it will only create links for devices which exist.
|
||||||
|
if [ ${INTREE} ]; then
|
||||||
|
PWD=`pwd`
|
||||||
|
mkdir -p ${DEVDIR}/
|
||||||
|
cd ${DEVDIR}/
|
||||||
|
${AWK} '!/^#/ && /./ { system( \
|
||||||
|
"ln -f -s /dev/disk/by-path/"$2" "$1";" \
|
||||||
|
"ln -f -s /dev/disk/by-path/"$2"-part1 "$1"p1;" \
|
||||||
|
"ln -f -s /dev/disk/by-path/"$2"-part9 "$1"p9;" \
|
||||||
|
) }' $SRC_PATH
|
||||||
|
cd ${PWD}
|
||||||
|
else
|
||||||
|
DST_FILE=`basename ${SRC_PATH} | cut -f1-2 -d'.'`
|
||||||
|
DST_PATH=/etc/zfs/${DST_FILE}
|
||||||
|
|
||||||
|
if [ -e ${DST_PATH} ]; then
|
||||||
|
die "Error: Config ${DST_PATH} already exists"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp ${SRC_PATH} ${DST_PATH}
|
||||||
|
|
||||||
|
if [ -f ${UDEVADM} ]; then
|
||||||
|
${UDEVADM} trigger
|
||||||
|
${UDEVADM} settle
|
||||||
|
else
|
||||||
|
/sbin/udevtrigger
|
||||||
|
/sbin/udevsettle
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
udev_cleanup() {
|
||||||
|
local SRC_PATH=$1
|
||||||
|
|
||||||
|
if [ ${INTREE} ]; then
|
||||||
|
PWD=`pwd`
|
||||||
|
cd ${DEVDIR}/
|
||||||
|
${AWK} '!/^#/ && /./ { system( \
|
||||||
|
"rm -f "$1" "$1"p1 "$1"p9") }' $SRC_PATH
|
||||||
|
cd ${PWD}
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
udev_cr2d() {
|
||||||
|
local CHANNEL=`echo "obase=16; $1+96" | bc`
|
||||||
|
local RANK=$2
|
||||||
|
|
||||||
|
printf "\x${CHANNEL}${RANK}"
|
||||||
|
}
|
||||||
|
|
||||||
|
udev_raid0_setup() {
|
||||||
|
local RANKS=$1
|
||||||
|
local CHANNELS=$2
|
||||||
|
local IDX=0
|
||||||
|
|
||||||
|
RAID0S=()
|
||||||
|
for RANK in `seq 1 ${RANKS}`; do
|
||||||
|
for CHANNEL in `seq 1 ${CHANNELS}`; do
|
||||||
|
DISK=`udev_cr2d ${CHANNEL} ${RANK}`
|
||||||
|
RAID0S[${IDX}]="${DEVDIR}/${DISK}"
|
||||||
|
let IDX=IDX+1
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
udev_raid10_setup() {
|
||||||
|
local RANKS=$1
|
||||||
|
local CHANNELS=$2
|
||||||
|
local IDX=0
|
||||||
|
|
||||||
|
RAID10S=()
|
||||||
|
for RANK in `seq 1 ${RANKS}`; do
|
||||||
|
for CHANNEL1 in `seq 1 2 ${CHANNELS}`; do
|
||||||
|
let CHANNEL2=CHANNEL1+1
|
||||||
|
DISK1=`udev_cr2d ${CHANNEL1} ${RANK}`
|
||||||
|
DISK2=`udev_cr2d ${CHANNEL2} ${RANK}`
|
||||||
|
GROUP="${DEVDIR}/${DISK1} ${DEVDIR}/${DISK2}"
|
||||||
|
RAID10S[${IDX}]="mirror ${GROUP}"
|
||||||
|
let IDX=IDX+1
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
udev_raidz_setup() {
|
||||||
|
local RANKS=$1
|
||||||
|
local CHANNELS=$2
|
||||||
|
|
||||||
|
RAIDZS=()
|
||||||
|
for RANK in `seq 1 ${RANKS}`; do
|
||||||
|
RAIDZ=("raidz")
|
||||||
|
|
||||||
|
for CHANNEL in `seq 1 ${CHANNELS}`; do
|
||||||
|
DISK=`udev_cr2d ${CHANNEL} ${RANK}`
|
||||||
|
RAIDZ[${CHANNEL}]="${DEVDIR}/${DISK}"
|
||||||
|
done
|
||||||
|
|
||||||
|
RAIDZS[${RANK}]="${RAIDZ[*]}"
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
udev_raidz2_setup() {
|
||||||
|
local RANKS=$1
|
||||||
|
local CHANNELS=$2
|
||||||
|
|
||||||
|
RAIDZ2S=()
|
||||||
|
for RANK in `seq 1 ${RANKS}`; do
|
||||||
|
RAIDZ2=("raidz2")
|
||||||
|
|
||||||
|
for CHANNEL in `seq 1 ${CHANNELS}`; do
|
||||||
|
DISK=`udev_cr2d ${CHANNEL} ${RANK}`
|
||||||
|
RAIDZ2[${CHANNEL}]="${DEVDIR}/${DISK}"
|
||||||
|
done
|
||||||
|
|
||||||
|
RAIDZ2S[${RANK}]="${RAIDZ2[*]}"
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
|
@ -0,0 +1,572 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# ZFS/ZPOOL configuration test script.
|
||||||
|
|
||||||
|
basedir="$(dirname $0)"
|
||||||
|
|
||||||
|
SCRIPT_COMMON=common.sh
|
||||||
|
if [ -f "${basedir}/${SCRIPT_COMMON}" ]; then
|
||||||
|
. "${basedir}/${SCRIPT_COMMON}"
|
||||||
|
else
|
||||||
|
echo "Missing helper script ${SCRIPT_COMMON}" && exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
PROG=zconfig.sh
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat << EOF
|
||||||
|
USAGE:
|
||||||
|
$0 [hvc]
|
||||||
|
|
||||||
|
DESCRIPTION:
|
||||||
|
ZFS/ZPOOL configuration tests
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
-h Show this message
|
||||||
|
-v Verbose
|
||||||
|
-c Cleanup lo+file devices at start
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts 'hvc?' OPTION; do
|
||||||
|
case $OPTION in
|
||||||
|
h)
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
v)
|
||||||
|
VERBOSE=1
|
||||||
|
;;
|
||||||
|
c)
|
||||||
|
CLEANUP=1
|
||||||
|
;;
|
||||||
|
?)
|
||||||
|
usage
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $(id -u) != 0 ]; then
|
||||||
|
die "Must run as root"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Perform pre-cleanup is requested
|
||||||
|
if [ ${CLEANUP} ]; then
|
||||||
|
cleanup_loop_devices
|
||||||
|
rm -f /tmp/zpool.cache.*
|
||||||
|
fi
|
||||||
|
|
||||||
|
zconfig_partition() {
|
||||||
|
local DEVICE=$1
|
||||||
|
local START=$2
|
||||||
|
local END=$3
|
||||||
|
local TMP_FILE=`mktemp`
|
||||||
|
|
||||||
|
/sbin/sfdisk -q ${DEVICE} << EOF &>${TMP_FILE} || fail 4
|
||||||
|
${START},${END}
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;
|
||||||
|
EOF
|
||||||
|
|
||||||
|
rm ${TMP_FILE}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Validate persistent zpool.cache configuration.
|
||||||
|
zconfig_test1() {
|
||||||
|
local POOL_NAME=test1
|
||||||
|
local TMP_FILE1=`mktemp`
|
||||||
|
local TMP_FILE2=`mktemp`
|
||||||
|
local TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX`
|
||||||
|
|
||||||
|
echo -n "test 1 - persistent zpool.cache: "
|
||||||
|
|
||||||
|
# Create a pool save its status for comparison.
|
||||||
|
${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 1
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail 2
|
||||||
|
${ZPOOL} status ${POOL_NAME} >${TMP_FILE1} || fail 3
|
||||||
|
|
||||||
|
# Unload/load the module stack and verify the pool persists.
|
||||||
|
${ZFS_SH} -u || fail 4
|
||||||
|
${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 5
|
||||||
|
${ZPOOL} status ${POOL_NAME} >${TMP_FILE2} || fail 6
|
||||||
|
cmp ${TMP_FILE1} ${TMP_FILE2} || fail 7
|
||||||
|
|
||||||
|
# Cleanup the test pool and temporary files
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 -d || fail 8
|
||||||
|
rm -f ${TMP_FILE1} ${TMP_FILE2} ${TMP_CACHE} || fail 9
|
||||||
|
${ZFS_SH} -u || fail 10
|
||||||
|
|
||||||
|
pass
|
||||||
|
}
|
||||||
|
zconfig_test1
|
||||||
|
|
||||||
|
# Validate ZFS disk scanning and import w/out zpool.cache configuration.
|
||||||
|
zconfig_test2() {
|
||||||
|
local POOL_NAME=test2
|
||||||
|
local TMP_FILE1=`mktemp`
|
||||||
|
local TMP_FILE2=`mktemp`
|
||||||
|
local TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX`
|
||||||
|
|
||||||
|
echo -n "test 2 - scan disks for pools to import: "
|
||||||
|
|
||||||
|
# Create a pool save its status for comparison.
|
||||||
|
${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 1
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail 2
|
||||||
|
${ZPOOL} status ${POOL_NAME} >${TMP_FILE1} || fail 3
|
||||||
|
|
||||||
|
# Unload the module stack, remove the cache file, load the module
|
||||||
|
# stack and attempt to probe the disks to import the pool. As
|
||||||
|
# a cross check verify the old pool state against the imported.
|
||||||
|
${ZFS_SH} -u || fail 4
|
||||||
|
rm -f ${TMP_CACHE} || fail 5
|
||||||
|
${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 6
|
||||||
|
${ZPOOL} import | grep ${POOL_NAME} >/dev/null || fail 7
|
||||||
|
${ZPOOL} import ${POOL_NAME} || fail 8
|
||||||
|
${ZPOOL} status ${POOL_NAME} >${TMP_FILE2} || fail 9
|
||||||
|
cmp ${TMP_FILE1} ${TMP_FILE2} || fail 10
|
||||||
|
|
||||||
|
# Cleanup the test pool and temporary files
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 -d || fail 11
|
||||||
|
rm -f ${TMP_FILE1} ${TMP_FILE2} || fail 12
|
||||||
|
${ZFS_SH} -u || fail 13
|
||||||
|
|
||||||
|
pass
|
||||||
|
}
|
||||||
|
zconfig_test2
|
||||||
|
|
||||||
|
zconfig_zvol_device_stat() {
|
||||||
|
local EXPECT=$1
|
||||||
|
local POOL_NAME=/dev/$2
|
||||||
|
local ZVOL_NAME=/dev/$3
|
||||||
|
local SNAP_NAME=/dev/$4
|
||||||
|
local CLONE_NAME=/dev/$5
|
||||||
|
local COUNT=0
|
||||||
|
|
||||||
|
# Briefly delay for udev
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
# Pool exists
|
||||||
|
stat ${POOL_NAME} &>/dev/null && let COUNT=$COUNT+1
|
||||||
|
|
||||||
|
# Volume and partitions
|
||||||
|
stat ${ZVOL_NAME} &>/dev/null && let COUNT=$COUNT+1
|
||||||
|
stat ${ZVOL_NAME}1 &>/dev/null && let COUNT=$COUNT+1
|
||||||
|
stat ${ZVOL_NAME}2 &>/dev/null && let COUNT=$COUNT+1
|
||||||
|
|
||||||
|
# Snapshot with partitions
|
||||||
|
stat ${SNAP_NAME} &>/dev/null && let COUNT=$COUNT+1
|
||||||
|
stat ${SNAP_NAME}1 &>/dev/null && let COUNT=$COUNT+1
|
||||||
|
stat ${SNAP_NAME}2 &>/dev/null && let COUNT=$COUNT+1
|
||||||
|
|
||||||
|
# Clone with partitions
|
||||||
|
stat ${CLONE_NAME} &>/dev/null && let COUNT=$COUNT+1
|
||||||
|
stat ${CLONE_NAME}1 &>/dev/null && let COUNT=$COUNT+1
|
||||||
|
stat ${CLONE_NAME}2 &>/dev/null && let COUNT=$COUNT+1
|
||||||
|
|
||||||
|
if [ $EXPECT -ne $COUNT ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# zpool import/export device check
|
||||||
|
# (1 volume, 2 partitions, 1 snapshot, 1 clone)
|
||||||
|
zconfig_test3() {
|
||||||
|
local POOL_NAME=tank
|
||||||
|
local ZVOL_NAME=volume
|
||||||
|
local SNAP_NAME=snap
|
||||||
|
local CLONE_NAME=clone
|
||||||
|
local FULL_ZVOL_NAME=${POOL_NAME}/${ZVOL_NAME}
|
||||||
|
local FULL_SNAP_NAME=${POOL_NAME}/${ZVOL_NAME}@${SNAP_NAME}
|
||||||
|
local FULL_CLONE_NAME=${POOL_NAME}/${CLONE_NAME}
|
||||||
|
local TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX`
|
||||||
|
|
||||||
|
echo -n "test 3 - zpool import/export device: "
|
||||||
|
|
||||||
|
# Create a pool, volume, partition, snapshot, and clone.
|
||||||
|
${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 1
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail 2
|
||||||
|
${ZFS} create -V 100M ${FULL_ZVOL_NAME} || fail 3
|
||||||
|
zconfig_partition /dev/${FULL_ZVOL_NAME} 0 64 || fail 4
|
||||||
|
${ZFS} snapshot ${FULL_SNAP_NAME} || fail 5
|
||||||
|
${ZFS} clone ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 6
|
||||||
|
|
||||||
|
# Verify the devices were created
|
||||||
|
zconfig_zvol_device_stat 10 ${POOL_NAME} ${FULL_ZVOL_NAME} \
|
||||||
|
${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 7
|
||||||
|
|
||||||
|
# Export the pool
|
||||||
|
${ZPOOL} export ${POOL_NAME} || fail 8
|
||||||
|
|
||||||
|
# verify the devices were removed
|
||||||
|
zconfig_zvol_device_stat 0 ${POOL_NAME} ${FULL_ZVOL_NAME} \
|
||||||
|
${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 9
|
||||||
|
|
||||||
|
# Import the pool, wait 1 second for udev
|
||||||
|
${ZPOOL} import ${POOL_NAME} || fail 10
|
||||||
|
|
||||||
|
# Verify the devices were created
|
||||||
|
zconfig_zvol_device_stat 10 ${POOL_NAME} ${FULL_ZVOL_NAME} \
|
||||||
|
${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 11
|
||||||
|
|
||||||
|
# Destroy the pool and consequently the devices
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 -d || fail 12
|
||||||
|
|
||||||
|
# verify the devices were removed
|
||||||
|
zconfig_zvol_device_stat 0 ${POOL_NAME} ${FULL_ZVOL_NAME} \
|
||||||
|
${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 13
|
||||||
|
|
||||||
|
${ZFS_SH} -u || fail 14
|
||||||
|
rm -f ${TMP_CACHE} || fail 15
|
||||||
|
|
||||||
|
pass
|
||||||
|
}
|
||||||
|
zconfig_test3
|
||||||
|
|
||||||
|
# zpool insmod/rmmod device check (1 volume, 1 snapshot, 1 clone)
|
||||||
|
zconfig_test4() {
|
||||||
|
POOL_NAME=tank
|
||||||
|
ZVOL_NAME=volume
|
||||||
|
SNAP_NAME=snap
|
||||||
|
CLONE_NAME=clone
|
||||||
|
FULL_ZVOL_NAME=${POOL_NAME}/${ZVOL_NAME}
|
||||||
|
FULL_SNAP_NAME=${POOL_NAME}/${ZVOL_NAME}@${SNAP_NAME}
|
||||||
|
FULL_CLONE_NAME=${POOL_NAME}/${CLONE_NAME}
|
||||||
|
TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX`
|
||||||
|
|
||||||
|
echo -n "test 4 - zpool insmod/rmmod device: "
|
||||||
|
|
||||||
|
# Create a pool, volume, snapshot, and clone
|
||||||
|
${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 1
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail 2
|
||||||
|
${ZFS} create -V 100M ${FULL_ZVOL_NAME} || fail 3
|
||||||
|
zconfig_partition /dev/${FULL_ZVOL_NAME} 0 64 || fail 4
|
||||||
|
${ZFS} snapshot ${FULL_SNAP_NAME} || fail 5
|
||||||
|
${ZFS} clone ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 6
|
||||||
|
|
||||||
|
# Verify the devices were created
|
||||||
|
zconfig_zvol_device_stat 10 ${POOL_NAME} ${FULL_ZVOL_NAME} \
|
||||||
|
${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 7
|
||||||
|
|
||||||
|
# Unload the modules
|
||||||
|
${ZFS_SH} -u || fail 8
|
||||||
|
|
||||||
|
# Verify the devices were removed
|
||||||
|
zconfig_zvol_device_stat 0 ${POOL_NAME} ${FULL_ZVOL_NAME} \
|
||||||
|
${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 9
|
||||||
|
|
||||||
|
# Load the modules, wait 1 second for udev
|
||||||
|
${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 10
|
||||||
|
|
||||||
|
# Verify the devices were created
|
||||||
|
zconfig_zvol_device_stat 10 ${POOL_NAME} ${FULL_ZVOL_NAME} \
|
||||||
|
${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 11
|
||||||
|
|
||||||
|
# Destroy the pool and consequently the devices
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 -d || fail 12
|
||||||
|
|
||||||
|
# Verify the devices were removed
|
||||||
|
zconfig_zvol_device_stat 0 ${POOL_NAME} ${FULL_ZVOL_NAME} \
|
||||||
|
${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 13
|
||||||
|
|
||||||
|
${ZFS_SH} -u || fail 14
|
||||||
|
rm -f ${TMP_CACHE} || fail 15
|
||||||
|
|
||||||
|
pass
|
||||||
|
}
|
||||||
|
zconfig_test4
|
||||||
|
|
||||||
|
# ZVOL volume sanity check
|
||||||
|
zconfig_test5() {
|
||||||
|
local POOL_NAME=tank
|
||||||
|
local ZVOL_NAME=fish
|
||||||
|
local FULL_NAME=${POOL_NAME}/${ZVOL_NAME}
|
||||||
|
local SRC_DIR=/bin/
|
||||||
|
local TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX`
|
||||||
|
|
||||||
|
echo -n "test 5 - zvol+ext3 volume: "
|
||||||
|
|
||||||
|
# Create a pool and volume.
|
||||||
|
${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 1
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail 2
|
||||||
|
${ZFS} create -V 400M ${FULL_NAME} || fail 3
|
||||||
|
|
||||||
|
# Partition the volume, for a 400M volume there will be
|
||||||
|
# 812 cylinders, 16 heads, and 63 sectors per track.
|
||||||
|
zconfig_partition /dev/${FULL_NAME} 0 812
|
||||||
|
|
||||||
|
# Format the partition with ext3.
|
||||||
|
/sbin/mkfs.ext3 -q /dev/${FULL_NAME}1 || fail 5
|
||||||
|
|
||||||
|
# Mount the ext3 filesystem and copy some data to it.
|
||||||
|
mkdir -p /tmp/${ZVOL_NAME}1 || fail 6
|
||||||
|
mount /dev/${FULL_NAME}1 /tmp/${ZVOL_NAME}1 || fail 7
|
||||||
|
cp -RL ${SRC_DIR} /tmp/${ZVOL_NAME}1 || fail 8
|
||||||
|
sync
|
||||||
|
|
||||||
|
# Verify the copied files match the original files.
|
||||||
|
diff -ur ${SRC_DIR} /tmp/${ZVOL_NAME}1${SRC_DIR} &>/dev/null || fail 9
|
||||||
|
|
||||||
|
# Remove the files, umount, destroy the volume and pool.
|
||||||
|
rm -Rf /tmp/${ZVOL_NAME}1${SRC_DIR}* || fail 10
|
||||||
|
umount /tmp/${ZVOL_NAME}1 || fail 11
|
||||||
|
rmdir /tmp/${ZVOL_NAME}1 || fail 12
|
||||||
|
|
||||||
|
${ZFS} destroy ${FULL_NAME} || fail 13
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 -d || fail 14
|
||||||
|
${ZFS_SH} -u || fail 15
|
||||||
|
rm -f ${TMP_CACHE} || fail 16
|
||||||
|
|
||||||
|
pass
|
||||||
|
}
|
||||||
|
zconfig_test5
|
||||||
|
|
||||||
|
# ZVOL snapshot sanity check
|
||||||
|
zconfig_test6() {
|
||||||
|
local POOL_NAME=tank
|
||||||
|
local ZVOL_NAME=fish
|
||||||
|
local SNAP_NAME=pristine
|
||||||
|
local FULL_ZVOL_NAME=${POOL_NAME}/${ZVOL_NAME}
|
||||||
|
local FULL_SNAP_NAME=${POOL_NAME}/${ZVOL_NAME}@${SNAP_NAME}
|
||||||
|
local SRC_DIR=/bin/
|
||||||
|
local TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX`
|
||||||
|
|
||||||
|
echo -n "test 6 - zvol+ext2 snapshot: "
|
||||||
|
|
||||||
|
# Create a pool and volume.
|
||||||
|
${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 1
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail 2
|
||||||
|
${ZFS} create -V 400M ${FULL_ZVOL_NAME} || fail 3
|
||||||
|
|
||||||
|
# Partition the volume, for a 400M volume there will be
|
||||||
|
# 812 cylinders, 16 heads, and 63 sectors per track.
|
||||||
|
zconfig_partition /dev/${FULL_ZVOL_NAME} 0 812
|
||||||
|
|
||||||
|
# Format the partition with ext2 (no journal).
|
||||||
|
/sbin/mkfs.ext2 -q /dev/${FULL_ZVOL_NAME}1 || fail 5
|
||||||
|
|
||||||
|
# Mount the ext3 filesystem and copy some data to it.
|
||||||
|
mkdir -p /tmp/${ZVOL_NAME}1 || fail 6
|
||||||
|
mount /dev/${FULL_ZVOL_NAME}1 /tmp/${ZVOL_NAME}1 || fail 7
|
||||||
|
|
||||||
|
# Snapshot the pristine ext2 filesystem and mount it read-only.
|
||||||
|
${ZFS} snapshot ${FULL_SNAP_NAME} && sleep 1 || fail 8
|
||||||
|
mkdir -p /tmp/${SNAP_NAME}1 || fail 9
|
||||||
|
mount /dev/${FULL_SNAP_NAME}1 /tmp/${SNAP_NAME}1 &>/dev/null || fail 10
|
||||||
|
|
||||||
|
# Copy to original volume
|
||||||
|
cp -RL ${SRC_DIR} /tmp/${ZVOL_NAME}1 || fail 11
|
||||||
|
sync
|
||||||
|
|
||||||
|
# Verify the copied files match the original files,
|
||||||
|
# and the copied files do NOT appear in the snapshot.
|
||||||
|
diff -ur ${SRC_DIR} /tmp/${ZVOL_NAME}1${SRC_DIR} &>/dev/null || fail 12
|
||||||
|
diff -ur ${SRC_DIR} /tmp/${SNAP_NAME}1${SRC_DIR} &>/dev/null && fail 13
|
||||||
|
|
||||||
|
# umount, destroy the snapshot, volume, and pool.
|
||||||
|
umount /tmp/${SNAP_NAME}1 || fail 14
|
||||||
|
rmdir /tmp/${SNAP_NAME}1 || fail 15
|
||||||
|
${ZFS} destroy ${FULL_SNAP_NAME} || fail 16
|
||||||
|
|
||||||
|
umount /tmp/${ZVOL_NAME}1 || fail 17
|
||||||
|
rmdir /tmp/${ZVOL_NAME}1 || fail 18
|
||||||
|
${ZFS} destroy ${FULL_ZVOL_NAME} || fail 19
|
||||||
|
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 -d || fail 20
|
||||||
|
${ZFS_SH} -u || fail 21
|
||||||
|
rm -f ${TMP_CACHE} || fail 22
|
||||||
|
|
||||||
|
pass
|
||||||
|
}
|
||||||
|
zconfig_test6
|
||||||
|
|
||||||
|
# ZVOL clone sanity check
|
||||||
|
zconfig_test7() {
|
||||||
|
local POOL_NAME=tank
|
||||||
|
local ZVOL_NAME=fish
|
||||||
|
local SNAP_NAME=pristine
|
||||||
|
local CLONE_NAME=clone
|
||||||
|
local FULL_ZVOL_NAME=${POOL_NAME}/${ZVOL_NAME}
|
||||||
|
local FULL_SNAP_NAME=${POOL_NAME}/${ZVOL_NAME}@${SNAP_NAME}
|
||||||
|
local FULL_CLONE_NAME=${POOL_NAME}/${CLONE_NAME}
|
||||||
|
local SRC_DIR=/bin/
|
||||||
|
local TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX`
|
||||||
|
|
||||||
|
echo -n "test 7 - zvol+ext2 clone: "
|
||||||
|
|
||||||
|
# Create a pool and volume.
|
||||||
|
${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 1
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail 2
|
||||||
|
${ZFS} create -V 400M ${FULL_ZVOL_NAME} || fail 3
|
||||||
|
|
||||||
|
# Partition the volume, for a 400M volume there will be
|
||||||
|
# 812 cylinders, 16 heads, and 63 sectors per track.
|
||||||
|
zconfig_partition /dev/${FULL_ZVOL_NAME} 0 812
|
||||||
|
|
||||||
|
# Format the partition with ext2 (no journal).
|
||||||
|
/sbin/mkfs.ext2 -q /dev/${FULL_ZVOL_NAME}1 || fail 5
|
||||||
|
|
||||||
|
# Mount the ext3 filesystem and copy some data to it.
|
||||||
|
mkdir -p /tmp/${ZVOL_NAME}1 || fail 6
|
||||||
|
mount /dev/${FULL_ZVOL_NAME}1 /tmp/${ZVOL_NAME}1 || fail 7
|
||||||
|
|
||||||
|
# Snapshot the pristine ext2 filesystem and mount it read-only.
|
||||||
|
${ZFS} snapshot ${FULL_SNAP_NAME} && sleep 1 || fail 8
|
||||||
|
mkdir -p /tmp/${SNAP_NAME}1 || fail 9
|
||||||
|
mount /dev/${FULL_SNAP_NAME}1 /tmp/${SNAP_NAME}1 &>/dev/null || fail 10
|
||||||
|
|
||||||
|
# Copy to original volume.
|
||||||
|
cp -RL ${SRC_DIR} /tmp/${ZVOL_NAME}1 || fail 11
|
||||||
|
sync
|
||||||
|
|
||||||
|
# Verify the copied files match the original files,
|
||||||
|
# and the copied files do NOT appear in the snapshot.
|
||||||
|
diff -ur ${SRC_DIR} /tmp/${ZVOL_NAME}1${SRC_DIR} &>/dev/null || fail 12
|
||||||
|
diff -ur ${SRC_DIR} /tmp/${SNAP_NAME}1${SRC_DIR} &>/dev/null && fail 13
|
||||||
|
|
||||||
|
# Clone from the original pristine snapshot
|
||||||
|
${ZFS} clone ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} && sleep 1 || fail 14
|
||||||
|
mkdir -p /tmp/${CLONE_NAME}1 || fail 15
|
||||||
|
mount /dev/${FULL_CLONE_NAME}1 /tmp/${CLONE_NAME}1 || fail 16
|
||||||
|
|
||||||
|
# Verify the clone matches the pristine snapshot,
|
||||||
|
# and the files copied to the original volume are NOT there.
|
||||||
|
diff -ur /tmp/${SNAP_NAME}1 /tmp/${CLONE_NAME}1 &>/dev/null || fail 17
|
||||||
|
diff -ur /tmp/${ZVOL_NAME}1 /tmp/${CLONE_NAME}1 &>/dev/null && fail 18
|
||||||
|
|
||||||
|
# Copy to cloned volume.
|
||||||
|
cp -RL ${SRC_DIR} /tmp/${CLONE_NAME}1 || fail 19
|
||||||
|
sync
|
||||||
|
|
||||||
|
# Verify the clone matches the modified original volume.
|
||||||
|
diff -ur /tmp/${ZVOL_NAME}1 /tmp/${CLONE_NAME}1 &>/dev/null || fail 20
|
||||||
|
|
||||||
|
# umount, destroy the snapshot, volume, and pool.
|
||||||
|
umount /tmp/${CLONE_NAME}1 || fail 21
|
||||||
|
rmdir /tmp/${CLONE_NAME}1 || fail 22
|
||||||
|
${ZFS} destroy ${FULL_CLONE_NAME} || fail 23
|
||||||
|
|
||||||
|
umount /tmp/${SNAP_NAME}1 || fail 24
|
||||||
|
rmdir /tmp/${SNAP_NAME}1 || fail 25
|
||||||
|
${ZFS} destroy ${FULL_SNAP_NAME} || fail 26
|
||||||
|
|
||||||
|
umount /tmp/${ZVOL_NAME}1 || fail 27
|
||||||
|
rmdir /tmp/${ZVOL_NAME}1 || fail 28
|
||||||
|
${ZFS} destroy ${FULL_ZVOL_NAME} || fail 29
|
||||||
|
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 -d || fail 30
|
||||||
|
${ZFS_SH} -u || fail 31
|
||||||
|
rm -f ${TMP_CACHE} || fail 32
|
||||||
|
|
||||||
|
pass
|
||||||
|
}
|
||||||
|
zconfig_test7
|
||||||
|
|
||||||
|
# Send/Receive sanity check
|
||||||
|
test_8() {
|
||||||
|
local POOL_NAME1=tank1
|
||||||
|
local POOL_NAME2=tank2
|
||||||
|
local ZVOL_NAME=fish
|
||||||
|
local SNAP_NAME=snap
|
||||||
|
local FULL_ZVOL_NAME1=${POOL_NAME1}/${ZVOL_NAME}
|
||||||
|
local FULL_ZVOL_NAME2=${POOL_NAME2}/${ZVOL_NAME}
|
||||||
|
local FULL_SNAP_NAME1=${POOL_NAME1}/${ZVOL_NAME}@${SNAP_NAME}
|
||||||
|
local FULL_SNAP_NAME2=${POOL_NAME2}/${ZVOL_NAME}@${SNAP_NAME}
|
||||||
|
local SRC_DIR=/bin/
|
||||||
|
local TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX`
|
||||||
|
|
||||||
|
# Create two pools and a volume
|
||||||
|
${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 1
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME1} -c lo-raidz2 || fail 2
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME2} -c lo-raidz2 || fail 3
|
||||||
|
${ZFS} create -V 400M ${FULL_ZVOL_NAME1} || fail 4
|
||||||
|
|
||||||
|
# Partition the volume, for a 400M volume there will be
|
||||||
|
# 812 cylinders, 16 heads, and 63 sectors per track.
|
||||||
|
zconfig_partition /dev/${FULL_ZVOL_NAME1} 0 812
|
||||||
|
|
||||||
|
# Format the partition with ext2.
|
||||||
|
/sbin/mkfs.ext2 -q /dev/${FULL_ZVOL_NAME1}1 || fail 5
|
||||||
|
|
||||||
|
# Mount the ext3 filesystem and copy some data to it.
|
||||||
|
mkdir -p /tmp/${FULL_ZVOL_NAME1}1 || fail 6
|
||||||
|
mount /dev/${FULL_ZVOL_NAME1}1 /tmp/${FULL_ZVOL_NAME1}1 || fail 7
|
||||||
|
cp -RL ${SRC_DIR} /tmp/${FULL_ZVOL_NAME1}1 || fail 8
|
||||||
|
sync || fail 9
|
||||||
|
|
||||||
|
# Snapshot the ext3 filesystem so it may be sent.
|
||||||
|
${ZFS} snapshot ${FULL_SNAP_NAME1} && sleep 1 || fail 11
|
||||||
|
|
||||||
|
# Send/receive the snapshot from POOL_NAME1 to POOL_NAME2
|
||||||
|
(${ZFS} send ${FULL_SNAP_NAME1} | \
|
||||||
|
${ZFS} receive ${FULL_ZVOL_NAME2}) && sleep 1 || fail 12
|
||||||
|
|
||||||
|
# Mount the sent ext3 filesystem.
|
||||||
|
mkdir -p /tmp/${FULL_ZVOL_NAME2}1 || fail 13
|
||||||
|
mount /dev/${FULL_ZVOL_NAME2}1 /tmp/${FULL_ZVOL_NAME2}1 || fail 14
|
||||||
|
|
||||||
|
# Verify the contents of the volumes match
|
||||||
|
diff -ur /tmp/${FULL_ZVOL_NAME1}1 /tmp/${FULL_ZVOL_NAME2}1 \
|
||||||
|
&>/dev/null || fail 15
|
||||||
|
|
||||||
|
# Umount, destroy the volume and pool.
|
||||||
|
umount /tmp/${FULL_ZVOL_NAME1}1 || fail 16
|
||||||
|
umount /tmp/${FULL_ZVOL_NAME2}1 || fail 17
|
||||||
|
rmdir /tmp/${FULL_ZVOL_NAME1}1 || fail 18
|
||||||
|
rmdir /tmp/${FULL_ZVOL_NAME2}1 || fail 19
|
||||||
|
rmdir /tmp/${POOL_NAME1} || fail 20
|
||||||
|
rmdir /tmp/${POOL_NAME2} || fail 21
|
||||||
|
|
||||||
|
${ZFS} destroy ${FULL_SNAP_NAME1} || fail 22
|
||||||
|
${ZFS} destroy ${FULL_SNAP_NAME2} || fail 23
|
||||||
|
${ZFS} destroy ${FULL_ZVOL_NAME1} || fail 24
|
||||||
|
${ZFS} destroy ${FULL_ZVOL_NAME2} || fail 25
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME1} -c lo-raidz2 -d || fail 26
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME2} -c lo-raidz2 -d || fail 27
|
||||||
|
${ZFS_SH} -u || fail 28
|
||||||
|
rm -f ${TMP_CACHE} || fail 29
|
||||||
|
|
||||||
|
pass
|
||||||
|
}
|
||||||
|
run_test 8 "zfs send/receive"
|
||||||
|
|
||||||
|
# zpool event sanity check
|
||||||
|
test_9() {
|
||||||
|
local POOL_NAME=tank
|
||||||
|
local ZVOL_NAME=fish
|
||||||
|
local FULL_NAME=${POOL_NAME}/${ZVOL_NAME}
|
||||||
|
local TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX`
|
||||||
|
local TMP_EVENTS=`mktemp -p /tmp zpool.events.XXXXXXXX`
|
||||||
|
|
||||||
|
# Create a pool and volume.
|
||||||
|
${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 1
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail 2
|
||||||
|
${ZFS} create -V 400M ${FULL_NAME} || fail 3
|
||||||
|
|
||||||
|
# Dump the events, there should be at least 5 lines.
|
||||||
|
${ZPOOL} events >${TMP_EVENTS} || fail 4
|
||||||
|
EVENTS=`wc -l ${TMP_EVENTS} | cut -f1 -d' '`
|
||||||
|
[ $EVENTS -lt 5 ] && fail 5
|
||||||
|
|
||||||
|
# Clear the events and ensure there are none.
|
||||||
|
${ZPOOL} events -c >/dev/null || fail 6
|
||||||
|
${ZPOOL} events >${TMP_EVENTS} || fail 7
|
||||||
|
EVENTS=`wc -l ${TMP_EVENTS} | cut -f1 -d' '`
|
||||||
|
[ $EVENTS -gt 1 ] && fail 8
|
||||||
|
|
||||||
|
${ZFS} destroy ${FULL_NAME} || fail 9
|
||||||
|
${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 -d || fail 10
|
||||||
|
${ZFS_SH} -u || fail 11
|
||||||
|
rm -f ${TMP_CACHE} || fail 12
|
||||||
|
rm -f ${TMP_EVENTS} || fail 13
|
||||||
|
|
||||||
|
pass
|
||||||
|
}
|
||||||
|
run_test 9 "zpool events"
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# A simple script to simply the loading/unloading the ZFS module stack.
|
||||||
|
|
||||||
|
basedir="$(dirname $0)"
|
||||||
|
|
||||||
|
SCRIPT_COMMON=common.sh
|
||||||
|
if [ -f "${basedir}/${SCRIPT_COMMON}" ]; then
|
||||||
|
. "${basedir}/${SCRIPT_COMMON}"
|
||||||
|
else
|
||||||
|
echo "Missing helper script ${SCRIPT_COMMON}" && exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
PROG=zfs.sh
|
||||||
|
UNLOAD=
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat << EOF
|
||||||
|
USAGE:
|
||||||
|
$0 [hvud] [module-options]
|
||||||
|
|
||||||
|
DESCRIPTION:
|
||||||
|
Load/unload the ZFS module stack.
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
-h Show this message
|
||||||
|
-v Verbose
|
||||||
|
-u Unload modules
|
||||||
|
-d Save debug log on unload
|
||||||
|
|
||||||
|
MODULE-OPTIONS:
|
||||||
|
Must be of the from module="options", for example:
|
||||||
|
|
||||||
|
$0 zfs="zfs_prefetch_disable=1"
|
||||||
|
$0 zfs="zfs_prefetch_disable=1 zfs_mdcomp_disable=1"
|
||||||
|
$0 spl="spl_debug_mask=0"
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts 'hvud' OPTION; do
|
||||||
|
case $OPTION in
|
||||||
|
h)
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
v)
|
||||||
|
VERBOSE=1
|
||||||
|
;;
|
||||||
|
u)
|
||||||
|
UNLOAD=1
|
||||||
|
;;
|
||||||
|
d)
|
||||||
|
DUMP_LOG=1
|
||||||
|
;;
|
||||||
|
?)
|
||||||
|
usage
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $(id -u) != 0 ]; then
|
||||||
|
die "Must run as root"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ${UNLOAD} ]; then
|
||||||
|
unload_modules
|
||||||
|
else
|
||||||
|
check_modules || die "${ERROR}"
|
||||||
|
load_modules "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,60 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Four disk Raid-0 DM in a single Raid-0 Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
PVCREATE=${PVCREATE:-/sbin/pvcreate}
|
||||||
|
PVREMOVE=${PVREMOVE:-/sbin/pvremove}
|
||||||
|
PVDEVICES=${PVDEVICES:-"/dev/sd[abcd]"}
|
||||||
|
|
||||||
|
VGCREATE=${VGCREATE:-/sbin/vgcreate}
|
||||||
|
VGREMOVE=${VGREMOVE:-/sbin/vgremove}
|
||||||
|
VGNAME=${VGNAME:-"vg_tank"}
|
||||||
|
|
||||||
|
LVCREATE=${LVCREATE:-/sbin/lvcreate}
|
||||||
|
LVREMOVE=${LVREMOVE:-/sbin/lvremove}
|
||||||
|
LVNAME=${LVNAME:-"lv_tank"}
|
||||||
|
LVSTRIPES=${LVSTRIPES:-4}
|
||||||
|
LVSIZE=${LVSIZE:-32G}
|
||||||
|
|
||||||
|
DEVICES="/dev/${VGNAME}/${LVNAME}"
|
||||||
|
|
||||||
|
zpool_dm_destroy() {
|
||||||
|
msg ${LVREMOVE} -f ${VGNAME}/${LVNAME}
|
||||||
|
${LVREMOVE} -f ${VGNAME}/${LVNAME} >/dev/null
|
||||||
|
|
||||||
|
msg ${VGREMOVE} -f ${VGNAME}
|
||||||
|
${VGREMOVE} -f ${VGNAME} >/dev/null
|
||||||
|
|
||||||
|
msg ${PVREMOVE} ${PVDEVICES}
|
||||||
|
${PVREMOVE} ${PVDEVICES} >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
# Remove EFI labels which cause pvcreate failure
|
||||||
|
for DEVICE in ${PVDEVICES}; do
|
||||||
|
dd if=/dev/urandom of=${DEVICE} bs=1k count=32 &>/dev/null
|
||||||
|
done
|
||||||
|
|
||||||
|
msg ${PVCREATE} -f ${PVDEVICES}
|
||||||
|
${PVCREATE} -f ${PVDEVICES} >/dev/null || exit 1
|
||||||
|
|
||||||
|
msg ${VGCREATE} ${VGNAME} ${PVDEVICES}
|
||||||
|
${VGCREATE} ${VGNAME} ${PVDEVICES} >/dev/null || exit 2
|
||||||
|
|
||||||
|
msg ${LVCREATE} --size=${LVSIZE} --stripes=${LVSTRIPES} \
|
||||||
|
--name=${LVNAME} ${VGNAME}
|
||||||
|
${LVCREATE} --size=${LVSIZE} --stripes=${LVSTRIPES} \
|
||||||
|
--name=${LVNAME} ${VGNAME} >/dev/null || exit 3
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${DEVICES}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} \
|
||||||
|
${DEVICES} || (zpool_dm_destroy && exit 4)
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
|
||||||
|
zpool_dm_destroy
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Dragon (White Box) Raid-0 Configuration (1x70)
|
||||||
|
#
|
||||||
|
|
||||||
|
RANKS=7
|
||||||
|
CHANNELS=10
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
udev_setup ${ETCDIR}/zfs/zdev.conf.dragon.example
|
||||||
|
udev_raid0_setup ${RANKS} ${CHANNELS}
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAID0S[*]}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAID0S[*]} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
udev_cleanup ${ETCDIR}/zfs/zdev.conf.dragon.example
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Dragon (White Box) Raid-10 Configuration (35x2(1+1))
|
||||||
|
#
|
||||||
|
|
||||||
|
RANKS=7
|
||||||
|
CHANNELS=10
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
udev_setup ${ETCDIR}/zfs/zdev.conf.dragon.example
|
||||||
|
udev_raid10_setup ${RANKS} ${CHANNELS}
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAID10S[*]}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAID10S[*]} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
udev_cleanup ${ETCDIR}/zfs/zdev.conf.dragon.example
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Dragon (White Box) Raid-Z Configuration (7x10(9+1))
|
||||||
|
#
|
||||||
|
|
||||||
|
RANKS=7
|
||||||
|
CHANNELS=10
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
udev_setup ${ETCDIR}/zfs/zdev.conf.dragon.example
|
||||||
|
udev_raidz_setup ${RANKS} ${CHANNELS}
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAIDZS[*]}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAIDZS[*]} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
udev_cleanup ${ETCDIR}/zfs/zdev.conf.dragon.example
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Dragon (White Box) Raid-Z2 Configuration (7x10(8+2))
|
||||||
|
#
|
||||||
|
|
||||||
|
RANKS=7
|
||||||
|
CHANNELS=10
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
udev_setup ${ETCDIR}/zfs/zdev.conf.dragon.example
|
||||||
|
udev_raidz2_setup ${RANKS} ${CHANNELS}
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAIDZ2S[*]}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAIDZ2S[*]} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
udev_cleanup ${ETCDIR}/zfs/zdev.conf.dragon.example
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# 4 File Raid-0 Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
FILES="/tmp/zpool-vdev0 \
|
||||||
|
/tmp/zpool-vdev1 \
|
||||||
|
/tmp/zpool-vdev2 \
|
||||||
|
/tmp/zpool-vdev3"
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
msg "Creating ${FILE}"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \
|
||||||
|
&>/dev/null || die "Error $? creating ${FILE}"
|
||||||
|
done
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${FILES}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${FILES} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
msg "Removing ${FILE}"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
done
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# 4 File Raid-10 Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
FILES_M1="/tmp/zpool-vdev0 \
|
||||||
|
/tmp/zpool-vdev1"
|
||||||
|
FILES_M2="/tmp/zpool-vdev2 \
|
||||||
|
/tmp/zpool-vdev3"
|
||||||
|
FILES="${FILES_M1} ${FILES_M2}"
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
msg "Creating ${FILE}"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \
|
||||||
|
&>/dev/null || die "Error $? creating ${FILE}"
|
||||||
|
done
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} \
|
||||||
|
mirror ${FILES_M1} mirror ${FILES_M2}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} \
|
||||||
|
mirror ${FILES_M1} mirror ${FILES_M2} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
msg "Removing ${FILE}"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
done
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# 4 File Raid-Z Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
FILES="/tmp/zpool-vdev0 \
|
||||||
|
/tmp/zpool-vdev1 \
|
||||||
|
/tmp/zpool-vdev2 \
|
||||||
|
/tmp/zpool-vdev3"
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
msg "Creating ${FILE}"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \
|
||||||
|
&>/dev/null || die "Error $? creating ${FILE}"
|
||||||
|
done
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz ${FILES}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz ${FILES} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
msg "Removing ${FILE}"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
done
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# 4 File Raid-Z2 Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
FILES="/tmp/zpool-vdev0 \
|
||||||
|
/tmp/zpool-vdev1 \
|
||||||
|
/tmp/zpool-vdev2 \
|
||||||
|
/tmp/zpool-vdev3"
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
msg "Creating ${FILE}"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \
|
||||||
|
&>/dev/null || die "Error $? creating ${FILE}"
|
||||||
|
done
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz2 ${FILES}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz2 ${FILES} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
msg "Removing ${FILE}"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
done
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Single disk /dev/hda Raid-0 Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
DEVICES="/dev/hda"
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${DEVICES}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${DEVICES} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME} || exit 1
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# 4 Device Loopback Raid-0 Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
FILES="/tmp/zpool-vdev0 \
|
||||||
|
/tmp/zpool-vdev1 \
|
||||||
|
/tmp/zpool-vdev2 \
|
||||||
|
/tmp/zpool-vdev3"
|
||||||
|
DEVICES=""
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
DEVICE=`unused_loop_device`
|
||||||
|
msg "Creating ${FILE} using loopback device ${DEVICE}"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \
|
||||||
|
&>/dev/null || die "Error $? creating ${FILE}"
|
||||||
|
${LOSETUP} ${DEVICE} ${FILE} ||
|
||||||
|
die "Error $? creating ${FILE} -> ${DEVICE} loopback"
|
||||||
|
DEVICES="${DEVICES} ${DEVICE}"
|
||||||
|
done
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${DEVICES}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${DEVICES} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
DEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:`
|
||||||
|
msg "Removing ${FILE} using loopback device ${DEVICE}"
|
||||||
|
${LOSETUP} -d ${DEVICE} ||
|
||||||
|
die "Error $? destroying ${FILE} -> ${DEVICE} loopback"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
done
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# 4 Device Loopback Raid-0 Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
FILES_M1="/tmp/zpool-vdev0 \
|
||||||
|
/tmp/zpool-vdev1"
|
||||||
|
FILES_M2="/tmp/zpool-vdev2 \
|
||||||
|
/tmp/zpool-vdev3"
|
||||||
|
FILES="${FILES_M1} ${FILES_M2}"
|
||||||
|
DEVICES_M1=""
|
||||||
|
DEVICES_M2=""
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
for FILE in ${FILES_M1}; do
|
||||||
|
DEVICE=`unused_loop_device`
|
||||||
|
msg "Creating ${FILE} using loopback device ${DEVICE}"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \
|
||||||
|
&>/dev/null || die "Error $? creating ${FILE}"
|
||||||
|
${LOSETUP} ${DEVICE} ${FILE} ||
|
||||||
|
die "Error $? creating ${FILE} -> ${DEVICE} loopback"
|
||||||
|
DEVICES_M1="${DEVICES_M1} ${DEVICE}"
|
||||||
|
done
|
||||||
|
|
||||||
|
for FILE in ${FILES_M2}; do
|
||||||
|
DEVICE=`unused_loop_device`
|
||||||
|
msg "Creating ${FILE} using loopback device ${DEVICE}"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \
|
||||||
|
&>/dev/null || die "Error $? creating ${FILE}"
|
||||||
|
${LOSETUP} ${DEVICE} ${FILE} ||
|
||||||
|
die "Error $? creating ${FILE} -> ${DEVICE} loopback"
|
||||||
|
DEVICES_M2="${DEVICES_M2} ${DEVICE}"
|
||||||
|
done
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} \
|
||||||
|
mirror ${DEVICES_M1} mirror ${DEVICES_M2}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} \
|
||||||
|
mirror ${DEVICES_M1} mirror ${DEVICES_M2}
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
DEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:`
|
||||||
|
msg "Removing ${FILE} using loopback device ${DEVICE}"
|
||||||
|
${LOSETUP} -d ${DEVICE} ||
|
||||||
|
die "Error $? destroying ${FILE} -> ${DEVICE} loopback"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
done
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# 4 Device Loopback Raid-0 Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
FILES="/tmp/zpool-vdev0 \
|
||||||
|
/tmp/zpool-vdev1 \
|
||||||
|
/tmp/zpool-vdev2 \
|
||||||
|
/tmp/zpool-vdev3"
|
||||||
|
DEVICES=""
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
DEVICE=`unused_loop_device`
|
||||||
|
msg "Creating ${FILE} using loopback device ${DEVICE}"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \
|
||||||
|
&>/dev/null || die "Error $? creating ${FILE}"
|
||||||
|
${LOSETUP} ${DEVICE} ${FILE} ||
|
||||||
|
die "Error $? creating ${FILE} -> ${DEVICE} loopback"
|
||||||
|
DEVICES="${DEVICES} ${DEVICE}"
|
||||||
|
done
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz ${DEVICES}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz ${DEVICES} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
DEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:`
|
||||||
|
msg "Removing ${FILE} using loopback device ${DEVICE}"
|
||||||
|
${LOSETUP} -d ${DEVICE} ||
|
||||||
|
die "Error $? destroying ${FILE} -> ${DEVICE} loopback"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
done
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# 4 Device Loopback Raid-0 Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
FILES="/tmp/zpool-vdev0 \
|
||||||
|
/tmp/zpool-vdev1 \
|
||||||
|
/tmp/zpool-vdev2 \
|
||||||
|
/tmp/zpool-vdev3"
|
||||||
|
DEVICES=""
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
DEVICE=`unused_loop_device`
|
||||||
|
msg "Creating ${FILE} using loopback device ${DEVICE}"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \
|
||||||
|
&>/dev/null || die "Error $? creating ${FILE}"
|
||||||
|
${LOSETUP} ${DEVICE} ${FILE} ||
|
||||||
|
die "Error $? creating ${FILE} -> ${DEVICE} loopback"
|
||||||
|
DEVICES="${DEVICES} ${DEVICE}"
|
||||||
|
done
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz2 ${DEVICES}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz2 ${DEVICES} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
|
||||||
|
for FILE in ${FILES}; do
|
||||||
|
DEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:`
|
||||||
|
msg "Removing ${FILE} using loopback device ${DEVICE}"
|
||||||
|
${LOSETUP} -d ${DEVICE} ||
|
||||||
|
die "Error $? destroying ${FILE} -> ${DEVICE} loopback"
|
||||||
|
rm -f ${FILE} || exit 1
|
||||||
|
done
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Four disk Raid-10 in a single Raid-0 Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
MDADM=${MDADM:-/sbin/mdadm}
|
||||||
|
MDDEVICES=${MDDEVICES:-"/dev/sd[abcd]"}
|
||||||
|
MDCOUNT=${MDCOUNT:-4}
|
||||||
|
MDRAID=${MDRAID:-10}
|
||||||
|
|
||||||
|
DEVICES="/dev/md0"
|
||||||
|
|
||||||
|
zpool_md_destroy() {
|
||||||
|
msg ${MDADM} --manage --stop ${DEVICES}
|
||||||
|
${MDADM} --manage --stop ${DEVICES} &>/dev/null
|
||||||
|
|
||||||
|
msg ${MDADM} --zero-superblock ${MDDEVICES}
|
||||||
|
${MDADM} --zero-superblock ${MDDEVICES} >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
msg ${MDADM} --create ${DEVICES} --level=${MDRAID} \
|
||||||
|
--raid-devices=${MDCOUNT} ${MDDEVICES}
|
||||||
|
${MDADM} --create ${DEVICES} --level=${MDRAID} \
|
||||||
|
--raid-devices=${MDCOUNT} ${MDDEVICES} \
|
||||||
|
&>/dev/null || (zpool_md_destroy && exit 1)
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${DEVICES}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} \
|
||||||
|
${DEVICES} || (zpool_md_destroy && exit 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
|
||||||
|
zpool_md_destroy
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Four disk Raid-5 in a single Raid-0 Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
MDADM=${MDADM:-/sbin/mdadm}
|
||||||
|
MDDEVICES=${MDDEVICES:-"/dev/sd[abcd]"}
|
||||||
|
MDCOUNT=${MDCOUNT:-4}
|
||||||
|
MDRAID=${MDRAID:-5}
|
||||||
|
|
||||||
|
DEVICES="/dev/md0"
|
||||||
|
|
||||||
|
zpool_md_destroy() {
|
||||||
|
msg ${MDADM} --manage --stop ${DEVICES}
|
||||||
|
${MDADM} --manage --stop ${DEVICES} &>/dev/null
|
||||||
|
|
||||||
|
msg ${MDADM} --zero-superblock ${MDDEVICES}
|
||||||
|
${MDADM} --zero-superblock ${MDDEVICES} >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
msg ${MDADM} --create ${DEVICES} --level=${MDRAID} \
|
||||||
|
--raid-devices=${MDCOUNT} ${MDDEVICES}
|
||||||
|
${MDADM} --create ${DEVICES} --level=${MDRAID} \
|
||||||
|
--raid-devices=${MDCOUNT} ${MDDEVICES} \
|
||||||
|
&>/dev/null || (zpool_md_destroy && exit 1)
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${DEVICES}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} \
|
||||||
|
${DEVICES} || (zpool_md_destroy && exit 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
|
||||||
|
zpool_md_destroy
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Single ram disk /dev/ram0 Raid-0 Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
DEVICES="/dev/ram0"
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${DEVICES}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${DEVICES} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME} || exit 1
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Single disk /dev/sda Raid-0 Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
DEVICES="/dev/sda"
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${DEVICES}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${DEVICES} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME} || exit 1
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Supermicro (White Box) Raid-0 Configuration (1x16)
|
||||||
|
#
|
||||||
|
|
||||||
|
RANKS=4
|
||||||
|
CHANNELS=4
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
udev_setup ${ETCDIR}/zfs/zdev.conf.supermicro.example
|
||||||
|
udev_raid0_setup ${RANKS} ${CHANNELS}
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAID0S[*]}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAID0S[*]} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
udev_cleanup ${ETCDIR}/zfs/zdev.conf.supermicro.example
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Supermicro (White Box) Raid-10 Configuration (8x2(1+1))
|
||||||
|
#
|
||||||
|
|
||||||
|
RANKS=4
|
||||||
|
CHANNELS=4
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
udev_setup ${ETCDIR}/zfs/zdev.conf.supermicro.example
|
||||||
|
udev_raid10_setup ${RANKS} ${CHANNELS}
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAID10S[*]}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAID10S[*]} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
udev_cleanup ${ETCDIR}/zfs/zdev.conf.supermicro.example
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Supermicro (White Box) Raid-Z Configuration (4x4(3+1))
|
||||||
|
#
|
||||||
|
|
||||||
|
RANKS=4
|
||||||
|
CHANNELS=4
|
||||||
|
|
||||||
|
zpool_create() {
|
||||||
|
udev_setup ${ETCDIR}/zfs/zdev.conf.supermicro.example
|
||||||
|
udev_raidz_setup ${RANKS} ${CHANNELS}
|
||||||
|
|
||||||
|
msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAIDZS[*]}
|
||||||
|
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${RAIDZS[*]} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
zpool_destroy() {
|
||||||
|
msg ${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
${ZPOOL} destroy ${ZPOOL_NAME}
|
||||||
|
udev_cleanup ${ETCDIR}/zfs/zdev.conf.supermicro.example
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue