freebsd-dev/module/zfs
Matthew Ahrens 4b20a6f509 Illumos 5150 - zfs clone of a defer_destroy snapshot causes strangeness
When a clone is created of a snapshot that has been marked for
deferred destroy (with "zfs destroy -d"), the clone "inherits" the
defer_destroy flag from the origin, and any snapshots of the clone
"inherit" the defer_destroy flag from the clone. This causes a strange
situation where the clone's snapshots are marked for defer_destroy but
they have no holds or clones. If the clone's snapshot gets a hold or
clone, which is then deleted, we will honor the incorrectly-set
defer_destroy flag and delete the snapshot!

Steps to reproduce:

  * zpool create test c1t1d0
  * zfs create test/fs
  * zfs snapshot test/fs@a
  * zfs clone test/fs@a test/clone
  * zfs destroy -d test/fs@a
  * zfs clone test/fs@a test/clone2
  * zfs snapshot test/clone2@a
  * zfs hold hld test/clone2@a
  * zfs release hld test/clone2@a
  * zfs list -r -t all test

  <test/clone2@a has been destroyed>

We noticed that this causes dcenter to get very confused, because it
treats snapshots that are marked defer_destroy as not existing. So it
won't see any snapshots of the clone that's marked defer_destroy.

5150 - zfs clone of a defer_destroy snapshot causes strangeness
Reviewed by: Christopher Siden <christopher.siden@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Max Grossman <max.grossman@delphix.com>
Reviewed by: Saso Kiselkov <skiselkov.ml@gmail.com>
Reviewed by: Richard Elling <richard.elling@gmail.com>
Approved by: Robert Mustacchi <rm@joyent.com>

References:
  https://www.illumos.org/projects/illumos-gate//issues/5150
  https://github.com/illumos/illumos-gate/commit/42fcb65

Ported by: Turbo Fredriksson <turbo@bayour.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2690
2014-10-21 15:26:58 -07:00
..
arc.c Illumos 5034 - ARC's buf_hash_table is too small 2014-08-26 16:14:49 -07:00
blkptr.c Illumos 4757, 4913 2014-08-01 14:28:05 -07:00
bplist.c
bpobj.c Illumos 4757, 4913 2014-08-01 14:28:05 -07:00
bptree.c Illumos 4914 - zfs on-disk bookmark structure should be named *_phys_t 2014-08-06 14:48:41 -07:00
dbuf_stats.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
dbuf.c Illumos 5174 - add sdt probe for blocked read in dbuf_read() 2014-09-22 14:20:25 -07:00
ddt_zap.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
ddt.c Change the default 'zfs_dedup_prefetch' value to '0' 2014-09-04 09:50:45 -07:00
dmu_diff.c Illumos 4914 - zfs on-disk bookmark structure should be named *_phys_t 2014-08-06 14:48:41 -07:00
dmu_object.c Illumos 3693 - restore_object uses at least two transactions to restore an object 2014-10-21 15:26:50 -07:00
dmu_objset.c Illumos 4914 - zfs on-disk bookmark structure should be named *_phys_t 2014-08-06 14:48:41 -07:00
dmu_send.c Illumos 3693 - restore_object uses at least two transactions to restore an object 2014-10-21 15:26:50 -07:00
dmu_traverse.c Illumos 4914 - zfs on-disk bookmark structure should be named *_phys_t 2014-08-06 14:48:41 -07:00
dmu_tx.c Improve reporting of tx assignment wait times 2014-03-04 12:22:24 -08:00
dmu_zfetch.c Use enum type(zfetch_dirn_t) instead 2014-01-23 12:56:33 -08:00
dmu.c Illumos 3693 - restore_object uses at least two transactions to restore an object 2014-10-21 15:26:50 -07:00
dnode_sync.c Illumos 5117 - spacemap reallocation can cause corruption 2014-09-08 09:42:39 -07:00
dnode.c Illumos 5139 - SEEK_HOLE failed to report a hole at end of file 2014-09-23 10:38:45 -07:00
dsl_bookmark.c Illumos 4368, 4369. 2014-07-29 10:55:29 -07:00
dsl_dataset.c Illumos 5150 - zfs clone of a defer_destroy snapshot causes strangeness 2014-10-21 15:26:58 -07:00
dsl_deadlist.c
dsl_deleg.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
dsl_destroy.c Illumos 4914 - zfs on-disk bookmark structure should be named *_phys_t 2014-08-06 14:48:41 -07:00
dsl_dir.c Illumos 4171, 4172 2014-07-25 16:40:07 -07:00
dsl_pool.c Illumos 4390 - I/O errors can corrupt space map when deleting fs/vol 2014-08-04 11:50:52 -07:00
dsl_prop.c Check the dataset type more rigorously when fetching properties. 2014-05-06 10:41:46 -07:00
dsl_scan.c Illumos 5138 - add tunable for maximum number of blocks freed in one txg 2014-09-23 14:26:34 -07:00
dsl_synctask.c Export symbols dsl_sync_task{_nowait} 2014-03-07 10:01:36 -08:00
dsl_userhold.c Illumos 4757, 4913 2014-08-01 14:28:05 -07:00
fm.c Fixed memory leaks in zevent handling 2014-08-20 10:45:16 -07:00
gzip.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
lz4.c Illumos #4936 fix potential overflow in lz4 2014-07-01 14:10:47 -07:00
lzjb.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
Makefile.in Illumos 4757, 4913 2014-08-01 14:28:05 -07:00
metaslab.c Don't upgrade a metaslab when the pool is not writable 2014-08-18 08:47:19 -07:00
range_tree.c Illumos 4976-4984 - metaslab improvements 2014-08-18 08:40:49 -07:00
refcount.c
rrwlock.c
sa.c Calculate header size correctly in sa_find_sizes() 2014-05-19 11:55:50 -07:00
sha256.c
spa_boot.c
spa_config.c Update utsname support 2014-10-17 14:58:57 -07:00
spa_errlog.c Illumos 4914 - zfs on-disk bookmark structure should be named *_phys_t 2014-08-06 14:48:41 -07:00
spa_history.c Update utsname support 2014-10-17 14:58:57 -07:00
spa_misc.c Illumos 4753 - increase number of outstanding async writes when sync task is waiting 2014-09-23 13:50:55 -07:00
spa_stats.c Illumos 4914 - zfs on-disk bookmark structure should be named *_phys_t 2014-08-06 14:48:41 -07:00
spa.c Illumos 4924 - LZ4 Compression for metadata 2014-10-20 16:17:49 -07:00
space_map.c Illumos 4976-4984 - metaslab improvements 2014-08-18 08:40:49 -07:00
space_reftree.c Illumos #4101, #4102, #4103, #4105, #4106 2014-07-22 09:39:16 -07:00
txg.c Illumos 4753 - increase number of outstanding async writes when sync task is waiting 2014-09-23 13:50:55 -07:00
uberblock.c
unique.c
vdev_cache.c Illumos 4370, 4371 2014-07-28 14:29:58 -07:00
vdev_disk.c Illumos #4374 2014-07-30 09:20:35 -07:00
vdev_file.c Honor zfs_nocacheflush for file vdevs 2014-05-19 13:30:48 -07:00
vdev_label.c Fix function call with uninitialized value in vdev_inuse 2014-09-23 10:32:45 -07:00
vdev_mirror.c Handle NULL mirror child vdev 2014-10-17 14:59:05 -07:00
vdev_missing.c
vdev_queue.c Illumos 4753 - increase number of outstanding async writes when sync task is waiting 2014-09-23 13:50:55 -07:00
vdev_raidz.c Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
vdev_root.c
vdev.c Illumos 5161 - add tunable for number of metaslabs per vdev 2014-09-23 10:00:02 -07:00
zap_leaf.c Illumos #4374 2014-07-30 09:20:35 -07:00
zap_micro.c Add object type checking to zap_lockdir() 2014-09-08 09:15:38 -07:00
zap.c Illumos #4374 2014-07-30 09:20:35 -07:00
zfeature_common.c Illumos 4924 - LZ4 Compression for metadata 2014-10-20 16:17:49 -07:00
zfeature.c Illumos 4370, 4371 2014-07-28 14:29:58 -07:00
zfs_acl.c Don't perform ACL-to-mode translation on empty ACL 2014-10-21 09:23:27 -07:00
zfs_byteswap.c
zfs_ctldir.c Illumos 4368, 4369. 2014-07-29 10:55:29 -07:00
zfs_debug.c Illumos 4390 - I/O errors can corrupt space map when deleting fs/vol 2014-08-04 11:50:52 -07:00
zfs_dir.c Revert "Revert "Revert "Fix unlink/xattr deadlock""" 2014-08-11 16:12:36 -07:00
zfs_fm.c Fixed memory leaks in zevent handling 2014-08-20 10:45:16 -07:00
zfs_fuid.c
zfs_ioctl.c Illumos 4924 - LZ4 Compression for metadata 2014-10-20 16:17:49 -07:00
zfs_log.c Only commit the ZIL once in zpl_writepages() (msync() case). 2013-11-23 15:08:29 -08:00
zfs_onexit.c
zfs_replay.c Linux AIO Support 2014-09-05 15:11:43 -07:00
zfs_rlock.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zfs_sa.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zfs_vfsops.c Improve handling of filesystem versions 2014-09-03 09:17:14 -07:00
zfs_vnops.c Illumos 5139 - SEEK_HOLE failed to report a hole at end of file 2014-09-23 10:38:45 -07:00
zfs_znode.c Perform whole-page page truncation for hole-punching under a range lock 2014-09-29 09:22:03 -07:00
zil.c Illumos 5140 - message about "%recv could not be opened" is printed when booting after crash 2014-09-18 15:04:59 -07:00
zio_checksum.c Illumos 4757, 4913 2014-08-01 14:28:05 -07:00
zio_compress.c Illumos 4757, 4913 2014-08-01 14:28:05 -07:00
zio_inject.c Illumos 4914 - zfs on-disk bookmark structure should be named *_phys_t 2014-08-06 14:48:41 -07:00
zio.c Fix CPU_SEQID use in preemptible context 2014-10-07 16:40:29 -07:00
zle.c
zpl_ctldir.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zpl_export.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zpl_file.c Suppress AIO kmem warnings 2014-10-20 16:10:25 -07:00
zpl_inode.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zpl_super.c Remove shrink_dcache_memory() and shrink_icache_memory() 2014-10-17 14:58:50 -07:00
zpl_xattr.c Linux AIO Support 2014-09-05 15:11:43 -07:00
zrlock.c
zvol.c Use long holds in zvol_set_volsize() 2014-01-14 14:46:12 -08:00