Module Name: src
Committed By: hannken
Date: Mon Mar 18 09:20:58 UTC 2019
Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ctldir.c
zfs_vfsops.c zfs_vnops.c
Log Message:
Set "mnt_stat.f_fsid" and "mnt_stat.f_fsidx" from the objset guid
like FreeBSD and Illumos do.
Use "f_fsid" for "va_fsid" and cheat NFSD to export snapshots under
".zfs" by setting these snaphots "f_fsidx" to the parents "f_fsidx".
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c
cvs rdiff -u -r1.19 -r1.20 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
cvs rdiff -u -r1.46 -r1.47 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.6 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.7
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.6 Wed Feb 20 10:08:37 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c Mon Mar 18 09:20:58 2019
@@ -1335,7 +1335,9 @@ sfs_snapshot_mount(vnode_t *vp, const ch
if (error)
goto out;
- vfs_getnewfsid(vfsp);
+ /* Set f_fsidx from parent to cheat NFSD. */
+ vfsp->mnt_stat.f_fsidx = vp->v_vfsp->mnt_stat.f_fsidx;
+
strlcpy(vfsp->mnt_stat.f_mntfromname, osname,
sizeof(vfsp->mnt_stat.f_mntfromname));
set_statvfs_info(path, UIO_SYSSPACE, vfsp->mnt_stat.f_mntfromname,
@@ -1622,7 +1624,7 @@ sfs_getattr(void *v)
vap->va_nlink = 2;
vap->va_uid = 0;
vap->va_gid = 0;
- vap->va_fsid = vp->v_vfsp->mnt_stat.f_fsidx.__fsid_val[0];
+ vap->va_fsid = vp->v_vfsp->mnt_stat.f_fsid;
vap->va_fileid = node->sn_id;
vap->va_size = 0;
vap->va_blocksize = 0;
Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.19 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.20
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.19 Tue Feb 5 09:54:36 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c Mon Mar 18 09:20:58 2019
@@ -1374,7 +1374,9 @@ zfs_domount(vfs_t *vfsp, char *osname)
#endif
#ifdef __NetBSD__
vfsp->mnt_stat.f_fsidx.__fsid_val[0] = fsid_guid;
- vfsp->mnt_stat.f_fsidx.__fsid_val[1] = fsid_guid >> 32;
+ vfsp->mnt_stat.f_fsidx.__fsid_val[1] = ((fsid_guid>>32) << 8) |
+ makefstype(vfsp->mnt_op->vfs_name) & 0xFF;
+ vfsp->mnt_stat.f_fsid = fsid_guid;
#endif
/*
@@ -1962,8 +1964,6 @@ zfs_mount(vfs_t *vfsp, const char *path,
#endif
#ifdef __NetBSD__
- vfs_getnewfsid(vfsp);
-
/* setup zfs mount info */
strlcpy(vfsp->mnt_stat.f_mntfromname, osname,
sizeof(vfsp->mnt_stat.f_mntfromname));
@@ -2036,7 +2036,8 @@ zfs_statvfs(vfs_t *vfsp, struct statvfs
statp->f_fsid = d32;
#endif
#ifdef __NetBSD__
- statp->f_fsid = vfsp->mnt_stat.f_fsidx.__fsid_val[0];
+ statp->f_fsid = vfsp->mnt_stat.f_fsid;
+ statp->f_fsidx = vfsp->mnt_stat.f_fsidx;
#endif
/*
Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.46 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.47
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.46 Mon Mar 18 09:20:15 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Mon Mar 18 09:20:58 2019
@@ -3073,7 +3073,7 @@ zfs_getattr(vnode_t *vp, vattr_t *vap, i
vap->va_nodeid = zp->z_id;
#endif
#ifdef __NetBSD__
- vap->va_fsid = vp->v_mount->mnt_stat.f_fsidx.__fsid_val[0];
+ vap->va_fsid = vp->v_mount->mnt_stat.f_fsid;
vap->va_nodeid = zp->z_id;
/*
* If we are a snapshot mounted under .zfs, return