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