Module Name: src Committed By: hannken Date: Mon Mar 18 09:21:31 UTC 2019
Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ctldir.c Log Message: Implement zfsctl_lookup_objset() to look up "zfsvfs" of an mounted snapshot. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.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.7 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.8 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.7 Mon Mar 18 09:20:58 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c Mon Mar 18 09:21:31 2019 @@ -1946,8 +1946,23 @@ zfsctl_destroy(zfsvfs_t *zfsvfs) int zfsctl_lookup_objset(vfs_t *vfsp, uint64_t objsetid, zfsvfs_t **zfsvfsp) { + struct sfs_node_key key = { + .parent_id = ZFSCTL_INO_SNAPDIR, + .id = objsetid + }; + vnode_t *vp; + int error; - return EINVAL; + *zfsvfsp = NULL; + error = vcache_get(vfsp, &key, sizeof(key), &vp); + if (error == 0) { + if (vp->v_mountedhere) + *zfsvfsp = vp->v_mountedhere->mnt_data; + vrele(vp); + } + if (*zfsvfsp == NULL) + return SET_ERROR(EINVAL); + return 0; } int