Re: Panic: cache_vop_rename: lingering negative entry

From: Jan Martin Mikkelsen <janm_at_transactionware.com>
Date: Mon, 13 Apr 2026 17:12:32 UTC
> On 7 Apr 2026, at 20:20, Jan Martin Mikkelsen <janm@transactionware.com> wrote:
> 
> On 7 Apr 2026, at 18:53, Konstantin Belousov <kib@freebsd.org> wrote:
>> 
>> On Tue, Apr 07, 2026 at 05:02:05PM +0200, Jan Martin Mikkelsen wrote:
>>> Hi,
>>> 
>>> I am consistently getting the panic below while building lang/perl5.42. This is the command from the perl build that triggers the panic:
>>> 
>>> /usr/bin/strip /ports-work/usr/ports/lang/perl5.42/work/stage/usr/local/bin/perl5.42.0
>>> 
>>> CURRENT on aarch64, with a kernel from last week, also with a later one from the  weekend. A kernel from mid-January worked fine.
>>> 
>>> I can reproduce on demand, no parallelism in the build required.
>>> 
>>> Does this look familiar to anyone?
>>> 
>>> panic: cache_vop_rename: lingering negative entry
>>> cpuid = 4
>>> time = 1775410763
>>> KDB: stack backtrace:
>>> db_trace_self() at db_trace_self
>>> db_trace_self_wrapper() at db_trace_self_wrapper+0x38
>>> vpanic() at vpanic+0x1a0
>>> panic() at panic+0x48
>>> cache_vop_rename() at cache_vop_rename+0xb0
>>> zfs_do_rename() at zfs_do_rename+0xafc
>>> zfs_freebsd_rename() at zfs_freebsd_rename+0x5c
>>> VOP_RENAME_APV() at VOP_RENAME_APV+0x44
>>> kern_renameat () at kern_renameat+0x574
>>> do_el0_sync() at do_el0_sync+0x5f8
>>> handle_el0_sync() at handle_el0_sync+0x4c
>>> --- exception, esr 0x56000000
>>> KDB: enter: panic
>>> [ thread pid 81230 tid 101738 ]
>>> Stopped at kdb_enter+0x48: str xzr, [x19, #3072]
>> 
>> Is it reproducable on UFS and/or tmpfs?
> 
> Successful completion (no panic) when the work directory is on UFS, and when the work directory is on tmpfs. I didn’t try multiple times, but it never works on ZFS.

The panic consistently reproduces on a ZFS filesystem with the properties  “utf8only=on” and "normalization=formD”.

A ZFS file system with “utf8only=off” and "normalization=none” works fine.

As far as I can see, strip makes a simple rename(2) call, and testing rename(2) works fine (as expected). Running the same strip command on the same files on a fresh system works fine.

The smallest reproducer I have at the moment is building lang/perl5.42.0 with a workdir on a ZFS filesystem enforcing UTF8.

Jan M.