Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Jul 2020 13:44:44 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 248105] Some zfs snapshots are busy within the ZCP domain but can still be destroyed from userland
Message-ID:  <bug-248105-227@https.bugs.freebsd.org/bugzilla/>

index | next in thread | raw e-mail

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=248105

            Bug ID: 248105
           Summary: Some zfs snapshots are busy within the ZCP domain but
                    can still be destroyed from userland
           Product: Base System
           Version: 12.1-STABLE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: kern
          Assignee: bugs@FreeBSD.org
          Reporter: bsdpr@phoe.frmug.org

On a host running 12-STABLE (rev 360207) I observe an inconsistent behavior
from zfs when attempting to destroy snapshots. From a zfs channel program, a
call to zfs.sync.destroy() fails and return EBUSY. That is extremely strange as
the affected snapshot is not a clone source and can be destroyed without error
with the 'zfs destroy' command.

I observed that the ZCP I'm using stopped functioning correctly due to this bug
after I accessed the contents of another (more recent) snapshot via the
.zfs/snapshot facility. Snapshots created after accessing .zfs/snapshot are not
deemed busy while all snapshots created before the access are busy from the ZCP
domain. By accessing .zfs/snapshot I mean listing the contents of
.zfs/snapshot, listing the contents of a given snapshot, and eventually copying
a file from that same snapshot.

As a summary, please consider the following layout:

pool/fs@snapA
pool/fs@snapB
pool/fs@snapC
pool/fs@snapD

on which the following actions are applied (with their outcome):

zfs.sync.destroy("pool/fs@snapA")  -- will succeed
$ ls pool/fs/.zfs/snapC
$ ls pool/fs/.zfs/snapC/
$ cp pool/fs/.zfs/snapC/file /tmp/discard
zfs.sync.destroy("pool/fs@snapB")  -- will fail
$ zfs destroy pool/fs@snapB        #  will succeed
$ zfs snapshot pool/fs@snapE
zfs.sync.destroy("pool/fs@snapE")  -- will succeed
zfs.sync.destroy("pool/fs@snapD")  -- will fail
$ zfs destroy pool/fs@snapD        #  will succeed

-- 
You are receiving this mail because:
You are the assignee for the bug.

help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-248105-227>