[Bug 266236] ZFS NFS : .zfs/snapshot : Stale file handle
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 06 Oct 2022 15:57:12 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=266236
--- Comment #12 from Mark Johnston <markj@FreeBSD.org> ---
I can reproduce this with a loopback NFSv3 mount of a dataset containing a
snapshot. Some dtracing shows the ESTALE comes from nfs_access(), the RPC is
returning the error because it can't translate the file handle to a vnode. In
particular, I can see zfs_fhtovp() is returning EINVAL when dealing with a
"long" FID, used for files under .zfs/snapshot.
1 70351 zfs_fhtovp:entry fid_t {
u_short fid_len = 0x12 <-- LONG_FID_LEN
u_short fid_data0 = 0x22
char [16] fid_data = [ "" ]
}
1 70352 zfs_fhtovp:return nfsd 22
kernel`nfsvno_fhtovp+0x3d
kernel`nfsrvd_dorpc+0x120
kernel`nfssvc_program+0x68c
kernel`svc_run_internal+0xb4f
kernel`svc_thread_start+0xb
kernel`fork_exit+0x7e
kernel`0xffffffff8107803e
With DTrace I can see that vfs_hash_get() and VOP_LOOKUP are not getting called
from zfs_fhtovp(), which means the error is probably coming from a recently
added check:
1821 if (fidp->fid_len == LONG_FID_LEN && (fid_gen > 1 || setgen != 0))
{
1822 dprintf("snapdir fid: fid_gen (%llu) and setgen (%llu)\n",
1823 (u_longlong_t)fid_gen, (u_longlong_t)setgen);
1824 return (SET_ERROR(EINVAL));
1825 }
That came in with https://github.com/openzfs/zfs/pull/12905 but let me see
first if that really is the source of the error.
--
You are receiving this mail because:
You are the assignee for the bug.