mirror_zfs/include/sys
Tim Chase 3937ab20f3 Allow for lock-free reading zfsdev_state_list.
Restructure the zfsdev_state_list to allow for lock-free reading by
converting to a simple singly-linked list from which items are never
deleted and over which only forward iterations are performed.  It depends
on, among other things, the atomicity of accessing the zs_minor integer
and zs_next pointer.

This fixes a lock inversion in which the zfsdev_state_lock is used by
both the sync task (txg_sync) and indirectly by any user program which
uses /dev/zfs; the zfsdev_release method uses the same lock and then
blocks on the sync task.

The most typical failure scenerio occurs when the sync task is cleaning
up a user hold while various concurrent "zfs" commands are in progress.

Neither Illumos nor Solaris are affected by this issue because they use
DDI interface which provides lock-free reading of device state via the
ddi_get_soft_state() function.

Signed-off-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2301
2014-05-19 11:45:11 -07:00
..
fm Add automatic hot spare functionality 2014-04-02 13:10:08 -07:00
fs Check the dataset type more rigorously when fetching properties. 2014-05-06 10:41:46 -07:00
arc.h Split "data_size" into "meta" and "data" 2014-02-21 16:10:49 -08:00
avl_impl.h
avl.h
bplist.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
bpobj.h
bptree.h Illumos #2619 and #2747 2013-01-08 10:35:35 -08:00
dbuf.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
ddt.h Add ddt, ddt_entry, and l2arc_hdr caches 2014-01-07 10:33:11 -08:00
dmu_impl.h
dmu_objset.h
dmu_send.h
dmu_traverse.h
dmu_tx.h dmu_tx kstat cleanup 2014-03-04 12:22:24 -08:00
dmu_zfetch.h Fix zstream_t incorrect type 2013-12-10 10:09:27 -08:00
dmu.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
dnode.h
dsl_dataset.h
dsl_deadlist.h
dsl_deleg.h
dsl_destroy.h
dsl_dir.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
dsl_pool.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
dsl_prop.h
dsl_scan.h Add erratum for issue #2094 2014-02-21 12:10:40 -08:00
dsl_synctask.h
dsl_userhold.h
efi_partition.h
Makefile.am Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
metaslab_impl.h
metaslab.h
nvpair_impl.h
nvpair.h Illumos #3464 2013-09-04 16:01:24 -07:00
refcount.h
rrwlock.h Illumos #3464 2013-09-04 16:01:24 -07:00
sa_impl.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
sa.h
spa_boot.h
spa_impl.h Add generic errata infrastructure 2014-02-21 12:10:40 -08:00
spa.h replace nreserved with ndirty in txgs kstat 2014-03-04 12:22:24 -08:00
space_map.h
txg_impl.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
txg.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
u8_textprep_data.h
u8_textprep.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
uberblock_impl.h
uberblock.h
uio_impl.h
unique.h Illumos #3742 2013-11-04 10:55:25 -08:00
uuid.h
vdev_disk.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
vdev_file.h Use a dedicated taskq for vdev_file 2014-05-14 16:20:21 -07:00
vdev_impl.h Use ddi_time_after and friends to compare time 2014-04-14 13:27:56 -07:00
vdev.h
xvattr.h Add xvattr support 2011-03-02 11:43:50 -08:00
zap_impl.h
zap_leaf.h
zap.h
zfeature.h
zfs_acl.h Illumos #3742 2013-11-04 10:55:25 -08:00
zfs_context.h libspl: Implement LWP rwlock interface 2014-05-01 15:53:52 -07:00
zfs_ctldir.h
zfs_debug.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zfs_delay.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zfs_dir.h Prototype/structure update for Linux 2011-02-10 09:27:21 -08:00
zfs_fuid.h Prototype/structure update for Linux 2011-02-10 09:27:21 -08:00
zfs_ioctl.h Allow for lock-free reading zfsdev_state_list. 2014-05-19 11:45:11 -07:00
zfs_onexit.h
zfs_rlock.h
zfs_sa.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zfs_stat.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
zfs_vfsops.h Implement relatime. 2014-01-29 15:50:44 -08:00
zfs_vnops.h
zfs_znode.h Use local variable to read zp->z_mode 2014-01-09 15:50:11 -08:00
zil_impl.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zil.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zio_checksum.h
zio_compress.h
zio_impl.h
zio.h Revert changes to zbookmark_t 2014-02-21 12:10:39 -08:00
zpl.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zrlock.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
zvol.h Remove ZFC_IOC_*_MINOR ioctl()s 2013-12-16 09:15:57 -08:00