Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-doc
Path: blob/main/website/static/security/patches/EN-10:01/zfsmac.patch
18096 views
1
Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
2
===================================================================
3
--- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c (revision 200583)
4
+++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c (working copy)
5
@@ -143,16 +143,19 @@ zfs_znode_cache_constructor(void *buf, void *arg,
6
7
POINTER_INVALIDATE(&zp->z_zfsvfs);
8
ASSERT(!POINTER_IS_VALID(zp->z_zfsvfs));
9
- ASSERT(vfsp != NULL);
10
11
- error = getnewvnode("zfs", vfsp, &zfs_vnodeops, &vp);
12
- if (error != 0 && (kmflags & KM_NOSLEEP))
13
- return (-1);
14
- ASSERT(error == 0);
15
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
16
- zp->z_vnode = vp;
17
- vp->v_data = (caddr_t)zp;
18
- VN_LOCK_AREC(vp);
19
+ if (vfsp != NULL) {
20
+ error = getnewvnode("zfs", vfsp, &zfs_vnodeops, &vp);
21
+ if (error != 0 && (kmflags & KM_NOSLEEP))
22
+ return (-1);
23
+ ASSERT(error == 0);
24
+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
25
+ zp->z_vnode = vp;
26
+ vp->v_data = (caddr_t)zp;
27
+ VN_LOCK_AREC(vp);
28
+ } else {
29
+ zp->z_vnode = NULL;
30
+ }
31
32
list_link_init(&zp->z_link_node);
33
34
@@ -1435,7 +1438,7 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *
35
nvpair_t *elem;
36
int error;
37
znode_t *rootzp = NULL;
38
- vnode_t *vp;
39
+ vnode_t vnode;
40
vattr_t vattr;
41
znode_t *zp;
42
43
@@ -1504,13 +1507,13 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *
44
vattr.va_gid = crgetgid(cr);
45
46
rootzp = kmem_cache_alloc(znode_cache, KM_SLEEP);
47
- zfs_znode_cache_constructor(rootzp, &zfsvfs, 0);
48
+ zfs_znode_cache_constructor(rootzp, NULL, 0);
49
rootzp->z_unlinked = 0;
50
rootzp->z_atime_dirty = 0;
51
52
- vp = ZTOV(rootzp);
53
- vp->v_type = VDIR;
54
- VN_LOCK_ASHARE(vp);
55
+ vnode.v_type = VDIR;
56
+ vnode.v_data = rootzp;
57
+ rootzp->z_vnode = &vnode;
58
59
bzero(&zfsvfs, sizeof (zfsvfs_t));
60
61
@@ -1539,16 +1542,10 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *
62
ASSERT(error == 0);
63
POINTER_INVALIDATE(&rootzp->z_zfsvfs);
64
65
- VI_LOCK(vp);
66
- ZTOV(rootzp)->v_data = NULL;
67
- ZTOV(rootzp)->v_count = 0;
68
- ZTOV(rootzp)->v_holdcnt = 0;
69
- rootzp->z_vnode = NULL;
70
- VOP_UNLOCK(vp, 0);
71
- vdestroy(vp);
72
dmu_buf_rele(rootzp->z_dbuf, NULL);
73
rootzp->z_dbuf = NULL;
74
mutex_destroy(&zfsvfs.z_znodes_lock);
75
+ rootzp->z_vnode = NULL;
76
kmem_cache_free(znode_cache, rootzp);
77
}
78
79
80