HomeFreeBSD

Illumos 5150 - zfs clone of a defer_destroy snapshot causes strangeness

Description

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

Details

Provenance
mahrensAuthored on Sep 12 2014, 3:45 AM
Brian Behlendorf <behlendorf1@llnl.gov>Committed on Oct 21 2014, 10:26 PM
Parents
rG6c59307a3c52: Illumos 3693 - restore_object uses at least two transactions to restore an…
Branches
Unknown
Tags
Unknown