zfs/scripts
Matt Ahrens 5d43cc9a59 OpenZFS 9689 - zfs range lock code should not be zpl-specific
The ZFS range locking code in zfs_rlock.c/h depends on ZPL-specific
data structures, specifically znode_t.  However, it's also used by
the ZVOL code, which uses a "dummy" znode_t to pass to the range
locking code.

We should clean this up so that the range locking code is generic
and can be used equally by ZPL and ZVOL, and also can be used by
future consumers that may need to run in userland (libzpool) as
well as the kernel.

Porting notes:
* Added missing sys/avl.h include to sys/zfs_rlock.h.
* Removed 'dbuf is within the locked range' ASSERTs from dmu_sync().
  This was needed because ztest does not yet use a locked_range_t.
* Removed "Approved by:" tag requirement from OpenZFS commit
  check to prevent needless warnings when integrating changes
  which has not been merged to illumos.
* Reverted free_list range lock changes which were originally
  needed to defer the cv_destroy() which was called immediately
  after cv_broadcast().  With d2733258 this should be safe but
  if not we may need to reintroduce this logic.
* Reverts: The following two commits were reverted and squashed in
  to this change in order to make it easier to apply OpenZFS 9689.
  - d88895a0, which removed the dummy znode from zvol_state
  - e3a07cd0, which updated ztest to use range locks
* Preserved optimized rangelock comparison function.  Preserved the
  rangelock free list.  The cv_destroy() function will block waiting
  for all processes in cv_wait() to be scheduled and drop their
  reference.  This is done to ensure it's safe to free the condition
  variable.  However, blocking while holding the rl->rl_lock mutex
  can result in a deadlock on Linux.  A free list is introduced to
  defer the cv_destroy() and kmem_free() until after the mutex is
  released.

Authored by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed by: Serapheim Dimitropoulos <serapheim.dimitro@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Brad Lewis <brad.lewis@delphix.com>
Ported-by: Brian Behlendorf <behlendorf1@llnl.gov>

OpenZFS-issue: https://illumos.org/issues/9689
OpenZFS-commit: https://github.com/openzfs/openzfs/pull/680
External-issue: DLPX-58662
Closes #7980
2018-10-11 10:19:33 -07:00
..
zfs-images@3331601f6d Add zimport.sh compatibility test script 2014-02-21 12:10:31 -08:00
.gitignore Remove autotools products 2012-08-27 11:47:44 -07:00
Makefile.am Create /proc/sys/kernel/spl/gitrev with git hash 2018-10-08 21:57:02 -07:00
commitcheck.sh OpenZFS 9689 - zfs range lock code should not be zpl-specific 2018-10-11 10:19:33 -07:00
common.sh.in ZTS: Adopt OpenZFS test analysis script 2018-06-20 14:03:13 -07:00
cstyle.pl OpenZFS 8794 - cstyle generates warnings with recent perl 2017-12-19 12:54:08 -08:00
dkms.mkconf Update build system and packaging 2018-05-29 16:00:33 -07:00
dkms.postbuild Retire legacy test infrastructure 2017-08-15 17:26:38 -07:00
enum-extract.pl Fix free memory calculation on v3.14+ 2018-02-23 08:50:06 -08:00
kmodtool Update build system and packaging 2018-05-29 16:00:33 -07:00
make_gitrev.sh Create /proc/sys/kernel/spl/gitrev with git hash 2018-10-08 21:57:02 -07:00
paxcheck.sh Enable shellcheck to run for select scripts 2017-03-09 10:20:15 -08:00
zfs-helpers.sh Adopt pyzfs from ClusterHQ 2018-05-01 10:33:35 -07:00
zfs-tests.sh ZTS: Adopt OpenZFS test analysis script 2018-06-20 14:03:13 -07:00
zfs.sh OpenZFS 9330 - stack overflow when creating a deeply nested dataset 2018-07-09 13:02:50 -07:00
zfs2zol-patch.sed Add libtpool (thread pools) 2017-08-09 15:31:08 -07:00
zimport.sh Update build system and packaging 2018-05-29 16:00:33 -07:00
zloop.sh Extend zloop.sh for automated testing 2018-01-25 13:42:34 -08:00
zol2zfs-patch.sed Add a script to change file names when upstreaming to OpenZFS/illumos 2016-09-29 21:01:50 -07:00