tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: zfs questions



hi,

On Sun, Feb 22, 2026 at 7:41 PM Taylor R Campbell <riastradh%netbsd.org@localhost> wrote:
>
> > Date: Fri, 20 Feb 2026 17:09:59 +0900
> > From: Takashi YAMAMOTO <yamt9999%gmail.com@localhost>
> >
> > recently i have used netbsd zfs and have a few questions.
> >
> > * what's the purpose of zfs_zget_cleaner/VN_RELE_CLEANER?
> >   i have read the explanation in
> > https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=59885 .
> >   but i don't understand why we want to avoid the normal zfs_zget in
> > the first place.
> >   for me, it seems working w/o these special versions of functions:
> >   https://github.com/yamt/netbsd-src/commit/438ec29437465e0b7e2b831d4452159f83cad0cf
> >   (i will attach the same patch to this mail for those who don't like github.)
>
> If I recall correctly, a vnode with pending writes queued up for the
> zil may become inactive and marked for reclamation _before_
> zfs_get_data runs to issue those writes to the zil.
>
> At that point, the NetBSD vnode life cycle forbids acquiring a new
> reference, so instead of returning the old vnode, vcache_get will wait
> for concurrent references to the vnode to drain and then create a new
> vnode initialized with VFS_LOADVNODE.
>
> I'm fuzzy on what happens at that point (hannken@ or chs@ may remember
> better than I can), but I suspect it will be one of:
>
> 1. data associated with the old vnode (via the old v_data, the znode)
>    will be silently lost; or

what data?

>
> 2. the existence of two znode identities for the same object leads zfs
>    to trip over its own shoelaces, corrupting data and/or crashing; or

it doesn't happen because reclaim frees the in-core znode.

>
> 3. reclamation also blocks until the zil is committed, which is
>    waiting in vcache_get for reclamation to finish, so it deadlocks.

i agree reclaim should not commit zil.
that's why i removed it in my patch.

>
> Using zfs_zget_cleaner bypasses vcache_get to obtain the znode for the
> purpose of zfs_get_data, provided that the caller guarantees it is
> safe to hold the znode.  And the caller can only guarantee it is safe
> if zfs_get_data runs before the vnode is reclaimed.

i understand what it does.
but i don't understand why it was necessary.

>
> > * is anyone using zfs in netbsd seriously? :-)
>
> I have been using it exclusively on my personal laptop and for my
> NetBSD builds and pkgsrc bulk builds since 2020.  Last time I hit
> issues that appeared to be related to zfs was around 2022 when I had
> bad RAM in my laptop.
>
> > * does anyone have a plan to update the codebase to recent openzfs?
>
> Well, `plan' may be too strong a word, but yes, we absolutely should.



Home | Main Index | Thread Index | Old Index