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