Commit Graph

1849 Commits

Author SHA1 Message Date
Brian Behlendorf
b4b599d250 Fix rpm dependencies
This change updates the rpm spec files to have strictly correct
package dependencies.  That means a few things:

* The zfs-modules package is now tied to a specific build of
  the spl-modules packages based on the kernel version.  This
  ensures that the correct spl-modules packages will always get
  installed and not just the newest.

* The zfs package now requires both the zfs-modules and spl
  packages.  Thus a 'yum install zfs' will pull in the minimal
  set of packages required for a functional system.

* The zfs-devel packages now require the zfs package to be
  installed which is normal behavior for -devel packages.

* Remove the redundant distribution release extension.  This
  is already added once because it is part of the kernel package
  release name.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2012-01-18 12:19:52 -08:00
Brian Behlendorf
b40a77aefc Add the release component to headers
When the original build system code was added the release
component was accidentally omited from the development header
install path.  This patch adds the missing path component so
it's always clear exactly what release your compiling against.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2012-01-18 12:19:47 -08:00
Darik Horn
9500108540 PPA 0.6.0.46-0ubuntu1 release. 2012-01-18 14:02:44 -06:00
Darik Horn
85e0f8f83c Merge branch 'upstream' 2012-01-18 13:56:47 -06:00
Darik Horn
f044301bac Disable zfs-dracut packaging.
The dracut/ component broke deb systems when it first added to the
upstream ZoL repository, had a near-zero download count when it was
fixed, seems to be unmaintained, and is incompatible with the
dracut-005 package that is currently published in Debian and Ubuntu.
2012-01-18 13:56:41 -06:00
Darik Horn
dbdad2502e Move debian/patches into a separate branch.
Using git to automatically rediff the patches is easier than using
`quilt refresh` and manually resolving conflicts, especially because
most submissions for this project come from git remotes.

It is also faster to pull and later discard experimental topic branches.

This also keeps the packaging master history clean and concise, and avoids
accidentally conflating the upstream master. Reverting a commit that changed
something outside of the debian/ overlay is ugly.
2012-01-18 13:55:58 -06:00
Darik Horn
f783130a1f Allow GPT+EFI vdev replacement in boot pools.
Commit zfsonlinux/zfs@57a4eddc4d
allows the bootfs property to be set on any pool, but does not
accommodate subsequent vdev changes. For example:

	# zpool replace rpool /dev/sda /dev/sdb
	operation not supported on this type of pool
	property 'bootfs' is not supported on EFI labeled devices

For non-Solaris builds, disable the check that emits this error.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2012-01-18 11:05:24 -08:00
Darik Horn
750562833f Combine libraries: spl, avl, efi, share, unicode.
These libraries, which are an artifact of the ZoL development
process, conflict with packages that are already in distribution:

  * libspl: SPL Programming Language
  * libavl: AVL for Linux
  * libefi: GRUB

And these libraries are potential conflicts:

  * libshare: the Linux Mount Manager
  * libunicode: Perl and Python

Recompose these five ZoL components into the four libraries that are
conventionally provided by Solaris and FreeBSD systems:

  + libnvpair
  + libuutil
  + libzpool
  + libzfs

This change resolves the name conflict, makes ZoL more compatible
with existing software that uses autotools to detect ZFS, and allows
pkg-zfs to better reflect the official Debian kFreeBSD packaging.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes: #430
2012-01-17 15:19:50 -08:00
Richard Laager
57a4eddc4d Allow setting bootfs on any pool
The vdev_is_bootable() restrictions are no longer necessary
with recent GRUB2 code.  FreeBSD has implemented the same
change, except that I moved the Solaris comment to be inside
the #ifdef __sun__ block.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #317
2012-01-17 13:49:07 -08:00
Darik Horn
2a9c6adc4f Run autogen for packaged builds.
Add to autoconf, automake, and autogen to the Build-Depends
field in the debian/control file, and run `./autogen.sh`
before `./configure` in the debian/rules file.
2012-01-17 11:37:05 -06:00
Ned Bass
08d08ebba2 Reduce number of zio free threads
As described in Issue #458 and #258, unlinking large amounts of data
can cause the threads in the zio free wait queue to start spinning.
Reducing the number of z_fr_iss threads from a fixed value of 100 to 1
per cpu signficantly reduces contention on the taskq spinlock and
improves throughput.

Instrumenting the taskq code showed that __taskq_dispatch() can spend
a long time holding tq->tq_lock if there are a large number of threads
in the queue.  It turns out the time spent in wake_up() scales
linearly with the number of threads in the queue.  When a large number
of short work items are dispatched, as seems to be the case with
unlink, the worker threads drain the queue faster than the dispatcher
can fill it.  They then all pile into the work wait queue to wait for
new work items.  So if 100 threads are in the queue, wake_up() takes
about 100 times as long, and the woken threads have to spin until the
dispatcher releases the lock.

Reducing the number of threads helps with the symptoms, but doesn't
get to the root of the problem.  It would seem that wake_up()
shouldn't scale linearly in time with queue depth, particularly if we
are only trying to wake up one thread.  In that vein, I tried making
all of the waiting processes exclusive to prevent the scheduler from
iterating over the entire list, but I still saw the linear time
scaling.  So further investigation is needed, but in the meantime
reducing the thread count is an easy workaround.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #258
Issue #458
2012-01-17 08:54:00 -08:00
Darik Horn
a0cb258cf6 PPA 0.6.0.45-0ubuntu1 release. 2012-01-15 18:44:50 -06:00
Darik Horn
b3b94689e9 Merge branch 'fhs'
Conflicts:
	debian/zfs-dkms.dkms
2012-01-15 18:30:27 -06:00
Darik Horn
478fe5defa Add Allow-setting-bootfs-on-any-pool.patch
From 884959bab92d18139e40b30daa53fd6a713c995e Mon Sep 17 00:00:00 2001
From: Richard Laager <rlaager@wiktel.com>
Date: Fri, 13 Jan 2012 16:24:15 -0600
Subject: [PATCH] Allow setting bootfs on any pool

The vdev_is_bootable() restrictions are no longer necessary with recent
GRUB2 code.  FreeBSD has implemented the same change, except that I
moved the Solaris comment to be inside the #ifdef __sun__ block.
2012-01-15 18:27:47 -06:00
Darik Horn
99ce095dde Merge branch 'upstream' 2012-01-15 18:22:14 -06:00
Darik Horn
b2260a0c87 FHS conformance and DKMS multiarch, ZFS interface.
Improve FHS conformance by installing intermediary build products --
currently the zfs_config.h and Module.symvers files -- into the
/var/lib/dkms area instead of /usr/src.

This has the beneficial side-effect of enabling DKMS multiarch
support for ZFS because the autoconf templates and `make install`
rules are not aware of the target architecture.

Mitigates: zfsonlinux/zfs#511
2012-01-14 00:48:07 -06:00
Darik Horn
a5f9f30704 Wrap long lines in the dkms.conf file. 2012-01-14 00:03:11 -06:00
Brian Behlendorf
a8783adf24 Increase link count limit to 2^31-1
Originally, the per-file link limit was set to 65536 because the
exact Linux VFS limit was unclear.  Internally ZFS is able to
support 64-bit link counts.  After a more careful investigation
the limit can be safely raised to 2^31-1.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #514
2012-01-13 11:43:59 -08:00
Prakash Surya
58d956b085 Run ZFS_AC_PACMAN only if $VENDOR is "arch"
Unfortunately, Arch's package manager `pacman` shares it's name with a
popular arcade video game. Thus, in order to refrain from executing the
video game when we mean to execute the package manager, ZFS_AC_PACMAN is
now only run when $VENDOR is determined to be "arch".

Signed-off-by: Prakash Surya <surya1@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #517
2012-01-13 09:03:11 -08:00
Darik Horn
2d69f2952c PPA 0.6.0.44-0ubuntu1 release. 2012-01-12 19:37:58 -06:00
Darik Horn
539a825257 Refresh debian/patches after upstream merge. 2012-01-12 19:34:06 -06:00
Darik Horn
06b03523a0 Revert "Add security_inode_init_security.patch"
This reverts commit 071df06b6a.
2012-01-12 19:31:38 -06:00
Darik Horn
c59a561391 Merge branch 'upstream' 2012-01-12 19:30:46 -06:00
Suman Chakravartula
e18be9a637 Add overlay(-O) mount option support
Linux supports mounting over non-empty directories by default.
In Solaris this is not the case and -O option is required for
zfs mount to mount a zfs filesystem over a non-empty directory.

For compatibility, I've added support for -O option to mount
zfs filesystems over non-empty directories if the user wants
to, just like in Solaris.

I've defined MS_OVERLAY to record it in the flags variable if
the -O option is supplied.  The flags variable passes through
a few functions and its checked before performing the empty
directory check in zfs_mount function.  If -O is given, the
check is not performed.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #473
2012-01-12 15:49:38 -08:00
Darik Horn
96b91ef0d6 Apply the ZoL coding standard to zpl_xattr.c
Make the indenting in the zpl_xattr.c file consistent with the Sun
coding standard by removing soft tabs.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2012-01-12 15:12:03 -08:00
Brian Behlendorf
166dd49de0 Linux 3.2 compat, security_inode_init_security()
The security_inode_init_security() API has been changed to include
a filesystem specific callback to write security extended attributes.
This was done to support the initialization of multiple LSM xattrs
and the EVM xattr.

This change updates the code to use the new API when it's available.
Otherwise it falls back to the previous implementation.

In addition, the ZFS_AC_KERNEL_6ARGS_SECURITY_INODE_INIT_SECURITY
autoconf test has been made more rigerous by passing the expected
types.  This is done to ensure we always properly the detect the
correct form for the security_inode_init_security() API.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #516
2012-01-12 15:06:39 -08:00
Richard Laager
2932b6a800 Treat /dev/vd* as whole disks
Correctly detect /dev/vd devices as whole disks and attempt to
create an EFI partition table.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2012-01-11 16:44:54 -08:00
Darik Horn
b97f368d04 Avoid using awk in the zpool_id script.
Some implementations of `awk` incorrectly parse the \< and \> regex
symbols, so use a `while read` loop and regular globbing instead.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes: #259
2012-01-11 11:56:56 -08:00
Brian Behlendorf
ab26409db7 Linux 3.1 compat, super_block->s_shrink
The Linux 3.1 kernel has introduced the concept of per-filesystem
shrinkers which are directly assoicated with a super block.  Prior
to this change there was one shared global shrinker.

The zfs code relied on being able to call the global shrinker when
the arc_meta_limit was exceeded.  This would cause the VFS to drop
references on a fraction of the dentries in the dcache.  The ARC
could then safely reclaim the memory used by these entries and
honor the arc_meta_limit.  Unfortunately, when per-filesystem
shrinkers were added the old interfaces were made unavailable.

This change adds support to use the new per-filesystem shrinker
interface so we can continue to honor the arc_meta_limit.  The
major benefit of the new interface is that we can now target
only the zfs filesystem for dentry and inode pruning.  Thus we
can minimize any impact on the caching of other filesystems.

In the context of making this change several other important
issues related to managing the ARC were addressed, they include:

* The dnlc_reduce_cache() function which was called by the ARC
to drop dentries for the Posix layer was replaced with a generic
zfs_prune_t callback.  The ZPL layer now registers a callback to
drop these dentries removing a layering violation which dates
back to the Solaris code.  This callback can also be used by
other ARC consumers such as Lustre.

  arc_add_prune_callback()
  arc_remove_prune_callback()

* The arc_reduce_dnlc_percent module option has been changed to
arc_meta_prune for clarity.  The dnlc functions are specific to
Solaris's VFS and have already been largely eliminated already.
The replacement tunable now represents the number of bytes the
prune callback will request when invoked.

* Less aggressively invoke the prune callback.  We used to call
this whenever we exceeded the arc_meta_limit however that's not
strictly correct since it results in over zeleous reclaim of
dentries and inodes.  It is now only called once the arc_meta_limit
is exceeded and every effort has been made to evict other data from
the ARC cache.

* More promptly manage exceeding the arc_meta_limit.  When reading
meta data in to the cache if a buffer was unable to be recycled
notify the arc_reclaim thread to invoke the required prune.

* Added arcstat_prune kstat which is incremented when the ARC
is forced to request that a consumer prune its cache.  Remember
this will only occur when the ARC has no other choice.  If it
can evict buffers safely without invoking the prune callback
it will.

* This change is also expected to resolve the unexpect collapses
of the ARC cache.  This would occur because when exceeded just the
arc_meta_limit reclaim presure would be excerted on the arc_c
value via arc_shrink().  This effectively shrunk the entire cache
when really we just needed to reclaim meta data.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #466
Closes #292
2012-01-11 11:46:02 -08:00
Darik Horn
972caf4b22 Add /sbin/blkid to the initramfs manifest.
If the root pool contains a zvol, then udev tries /sbin/blkid and
emits a warning, which is usually invisible because it happens
after GRUB changes the console mode for Plymouth.

Adding /sbin/blkid to the initramfs manifest satisfies the udev
warning and results in a small boot time improvement.
2012-01-08 11:23:57 -06:00
Darik Horn
48d9267a6a Merge branch 'issue9' 2012-01-07 13:47:58 -06:00
Darik Horn
5048a01b13 PPA 0.6.0.43-0ubuntu1 release. 2012-01-07 11:16:30 -06:00
Darik Horn
dc27178aca Add precise to the PPA build list.
Begin building packages for the Ubuntu 12.04 LTS Precise Pangolin
alpha release.

The linux-image-3.2.0-8-generic kernel package is the first Ubuntu
P-series release that is compatible and somewhat stable with ZFS.
2012-01-07 11:16:30 -06:00
Darik Horn
071df06b6a Add security_inode_init_security.patch
Add an interim fix for issue #516, which is required for running ZoL
on a Linux 3.2 kernel.
2012-01-07 11:16:23 -06:00
Darik Horn
36af17fb7a Add bash command completion to zfsutils. 2012-01-05 12:55:05 -06:00
Seth Heeren
cf86ea5371 added contrib/zfs_completion.bash
received from Aneurin Price
http://groups.google.com/group/zfs-fuse/browse_thread/thread/fd17ab76e5bddc35
2012-01-05 11:55:29 -06:00
Darik Horn
38a16c4326 Add libselinux1-dev to build-depends.
The /sbin/zfs utility can be selinux aware if the libselinux1-dev
package is installed at build time.

The libselinux1 package is in the Debian base system.

This change is enabled by upstream commit
  SHA afd7da0ce7
2011-12-31 21:34:14 -06:00
Darik Horn
598b4be564 Wrap long lines in the debian/control file. 2011-12-31 21:28:17 -06:00
Darik Horn
ef6fcd1ec9 Remove the mountall dependency from zfs-initramfs.
The mountall utility is not in the regular initrd manifest for Ubuntu,
and it is not used to start a native ZFS root filesystem.

Depending on mountall unnecessarily prevents zfs-initramfs from being
installed on vanilla Debian systems.

Closes: dajhorn/pkg-zfs#9
2011-12-31 21:16:58 -06:00
Darik Horn
0246731eda PPA 0.6.0.42-0ubuntu1 release. 2011-12-23 09:10:30 -06:00
Darik Horn
0be46ac782 Refresh debian/patches after upstream merge. 2011-12-23 07:26:09 -06:00
Darik Horn
30a65f18c3 Merge branch 'upstream' 2011-12-23 07:25:29 -06:00
Prakash Surya
8eaa020b46 Move Arch Linux's VENDOR check above Ubuntu's
If the lsb-release package is installed on an Arch Linux distribution,
the configure step will incorrectly detect the running distribution as
Ubuntu. This is a result of both distributions providing an
/etc/lsb-release file, and the Ubuntu VENDOR check being performed
first.

Since the Arch Linux test check's for a file more specific to the Arch
Linux distribution, moving Arch Linux's VENDOR check above Unbuntu's
check provides a quick and easy solution.

Signed-off-by: Prakash Surya <surya1@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2011-12-19 12:05:10 -08:00
Darik Horn
afd7da0ce7 Add LIBSELINUX to mount_zfs_LDFLAGS.
Regenerating the autotools configuration on Debian and Ubuntu systems
causes compilation to fail with this error message:

  cmd/mount_zfs/../../cmd/mount_zfs/mount_zfs.c:403:
    undefined reference to `is_selinux_enabled'

In the automake template, set "mount_zfs_LDFLAGS = ... $(LIBSELINUX)"
so that the /sbin/mount.zfs utility is linked to libselinux.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2011-12-16 20:04:42 -08:00
Darik Horn
28eb9213d8 Linux 3.2 compat: set_nlink()
Directly changing inode->i_nlink is deprecated in Linux 3.2 by commit

  SHA: bfe8684869601dacfcb2cd69ef8cfd9045f62170

Use the new set_nlink() kernel function instead.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes: #462
2011-12-16 20:02:52 -08:00
Darik Horn
e6101ea87f Update the character class in the zpool man page.
ZoL and all Solaris derivatives allow pool names to contain the colon
and space characters. Update the man page to reflect current behavior.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes: #438
2011-12-16 14:00:38 -08:00
Darik Horn
37b66e6088 PPA 0.6.0.41-0ubuntu1 release. 2011-12-15 10:12:57 -06:00
Darik Horn
d90712b428 Merge branch 'upstream' 2011-12-15 10:11:49 -06:00
Prakash Surya
6ba3b44614 Add make rule for building Arch Linux packages
Added the necessary build infrastructure for building packages
compatible with the Arch Linux distribution. As such, one can now run:

    $ ./configure
    $ make pkg     # Alternatively, one can run 'make arch' as well

on the Arch Linux machine to create two binary packages compatible with
the pacman package manager, one for the zfs userland utilities and
another for the zfs kernel modules. The new packages can then be
installed by running:

    # pacman -U $package.pkg.tar.xz

In addition, source-only packages suitable for an Arch Linux chroot
environment or remote builder can also be build using the 'sarch' make
rule.

NOTE: Since the source dist tarball is created on the fly from the head
of the build tree, it's MD5 hash signature will be continually influx.
As a result, the md5sum variable was intentionally omitted from the
PKGBUILD files, and the '--skipinteg' makepkg option is used. This may
or may not have any serious security implications, as the source tarball
is not being downloaded from an outside source.

Signed-off-by: Prakash Surya <surya1@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #491
2011-12-14 19:14:23 -08:00
Garrett D'Amore
a38718a63d Illumos #734: Use taskq_dispatch_ent() interface
It has been observed that some of the hottest locks are those
of the zio taskqs.  Contention on these locks can limit the
rate at which zios are dispatched which limits performance.

This upstream change from Illumos uses new interface to the
taskqs which allow them to utilize a prealloc'ed taskq_ent_t.
This removes the need to perform an allocation at dispatch
time while holding the contended lock.  This has the effect
of improving system performance.

Reviewed by: Albert Lee <trisk@nexenta.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Reviewed by: Alexey Zaytsev <alexey.zaytsev@nexenta.com>
Reviewed by: Jason Brian King <jason.brian.king@gmail.com>
Reviewed by: George Wilson <gwilson@zfsmail.com>
Reviewed by: Adam Leventhal <ahl@delphix.com>
Approved by: Gordon Ross <gwr@nexenta.com>

References to Illumos issue:
  https://www.illumos.org/issues/734

Ported-by: Prakash Surya <surya1@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #482
2011-12-14 09:19:30 -08:00