[Bug 282169] zfs rename deadlock with mountd, df & fstat (and possibly others)

From: <bugzilla-noreply_at_freebsd.org>
Date: Sun, 20 Oct 2024 15:12:43 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=282169

Mark Johnston <markj@FreeBSD.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |markj@FreeBSD.org
             Status|New                         |Open

--- Comment #1 from Mark Johnston <markj@FreeBSD.org> ---
Many threads are blocked on the ZFS "teardown" lock.  I guess a writer holds
the lock, or a reader leaked one.  I looked through uses of ZFS_ENTER and
couldn't find any leaks.

I'm confused by the locking in zfsvfs_teardown().  That function
unconditionally acquires the teardown write lock, but there exist cases later
in the function where it won't be released.  Specifically, if `!unmounting &&
!zfsvfs->z_unmounted && zfsvfs->z_ops != NULL` is true, the write lock seems to
be leaked.  I'm not sure if that condition is possible in practice, but it
looks rather odd.

That code path could potentially be triggered by zfs_suspend_fs(), which is
invoked by a couple of dataset operations, rollback and recv specifically, but
as far as I can see renaming a dataset won't trigger suspension.

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