aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/opensolaris
diff options
context:
space:
mode:
authorPawel Jakub Dawidek <pjd@FreeBSD.org>2007-05-02 00:22:12 +0000
committerPawel Jakub Dawidek <pjd@FreeBSD.org>2007-05-02 00:22:12 +0000
commit04748b1b2e9cadccd8fc5a764647cd4c34358c48 (patch)
tree8369e5a748e01b5367683557d628ac6f8d91be46 /sys/contrib/opensolaris
parent0775674bbc3ccbcf2e6ebad5d19e1322dcff5435 (diff)
downloadsrc-04748b1b2e9cadccd8fc5a764647cd4c34358c48.tar.gz
src-04748b1b2e9cadccd8fc5a764647cd4c34358c48.zip
The getnewvnode() function sets LK_NOSHARE by default, so if we want to
support shared vnodes locking, we need to remove that flag. Also add LK_CANRECURSE flag as found in nfsclient.
Notes
Notes: svn path=/head/; revision=169196
Diffstat (limited to 'sys/contrib/opensolaris')
-rw-r--r--sys/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c b/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
index d9eec310a618..f7077933b796 100644
--- a/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
+++ b/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
@@ -106,14 +106,18 @@ static int
zfs_znode_cache_constructor(void *buf, void *cdrarg, int kmflags)
{
znode_t *zp = buf;
+ vnode_t *vp;
vfs_t *vfsp = cdrarg;
int error;
if (cdrarg != NULL) {
- error = getnewvnode("zfs", vfsp, &zfs_vnodeops, &zp->z_vnode);
+ error = getnewvnode("zfs", vfsp, &zfs_vnodeops, &vp);
ASSERT(error == 0);
- zp->z_vnode->v_data = (caddr_t)zp;
- vhold(zp->z_vnode);
+ zp->z_vnode = vp;
+ vp->v_data = (caddr_t)zp;
+ vhold(vp);
+ vp->v_vnlock->lk_flags |= LK_CANRECURSE;
+ vp->v_vnlock->lk_flags &= ~LK_NOSHARE;
} else {
zp->z_vnode = NULL;
}
@@ -598,6 +602,8 @@ zfs_zget(zfsvfs_t *zfsvfs, uint64_t obj_num, znode_t **zpp)
vp = ZTOV(zp);
vp->v_data = (caddr_t)zp;
vhold(vp);
+ vp->v_vnlock->lk_flags |= LK_CANRECURSE;
+ vp->v_vnlock->lk_flags &= ~LK_NOSHARE;
vp->v_type = IFTOVT((mode_t)zp->z_phys->zp_mode);
if (vp->v_type == VDIR)
zp->z_zn_prefetch = B_TRUE; /* z_prefetch default is enabled */