diff options
| author | Mark Johnston <markj@FreeBSD.org> | 2022-10-24 15:55:48 +0000 |
|---|---|---|
| committer | Mark Johnston <markj@FreeBSD.org> | 2022-10-27 12:00:01 +0000 |
| commit | 562c9ac58c7678b13f52b0bfe63148e40d7bf63d (patch) | |
| tree | b3b589c72810d21cf0d1532fd4b9b5483193b624 | |
| parent | 7e53019b06d5fd66b6db9fe2edd0bbbdb5eec2a8 (diff) | |
zfs: Fix a pair of bugs in zfs_fhtovp()
This cherry-picks upstream ed566bf1cd0bdbf85e8c63c1c119e3d2ef5db1f6
- Add a zfs_exit() call in an error path, otherwise a lock is
leaked.
- Remove the fid_gen > 1 check. That appears to be Linux-specific:
zfsctl_snapdir_fid() sets fid_gen to 0 or 1 depending on whether
the snapshot directory is mounted. On FreeBSD it fails, making
snapshot dirs inaccessible via NFS.
PR: 266236
(cherry picked from commit 6fe0a6c80a1aff14236924eb33e4013aa8c14f91)
| -rw-r--r-- | sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c b/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c index cdd762dcbcbf..928cd83dfea0 100644 --- a/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c +++ b/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c @@ -1845,7 +1845,8 @@ zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, int flags, vnode_t **vpp) return (SET_ERROR(EINVAL)); } - if (fidp->fid_len == LONG_FID_LEN && (fid_gen > 1 || setgen != 0)) { + if (fidp->fid_len == LONG_FID_LEN && setgen != 0) { + zfs_exit(zfsvfs, FTAG); dprintf("snapdir fid: fid_gen (%llu) and setgen (%llu)\n", (u_longlong_t)fid_gen, (u_longlong_t)setgen); return (SET_ERROR(EINVAL)); |
