diff options
-rw-r--r-- | sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c | 5 | ||||
-rw-r--r-- | sys/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c | 5 |
2 files changed, 6 insertions, 4 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c index d2806b9..58dede8 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c @@ -68,16 +68,17 @@ static void znode_pageout_func(dmu_buf_t *dbuf, void *user_ptr) { znode_t *zp = user_ptr; - vnode_t *vp = ZTOV(zp); + vnode_t *vp; mutex_enter(&zp->z_lock); + vp = ZTOV(zp); if (vp == NULL) { mutex_exit(&zp->z_lock); zfs_znode_free(zp); } else if (vp->v_count == 0) { ZTOV(zp) = NULL; - mutex_exit(&zp->z_lock); vhold(vp); + mutex_exit(&zp->z_lock); vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, curthread); vrecycle(vp, curthread); VOP_UNLOCK(vp, 0, curthread); 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 d2806b9..58dede8 100644 --- a/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c +++ b/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c @@ -68,16 +68,17 @@ static void znode_pageout_func(dmu_buf_t *dbuf, void *user_ptr) { znode_t *zp = user_ptr; - vnode_t *vp = ZTOV(zp); + vnode_t *vp; mutex_enter(&zp->z_lock); + vp = ZTOV(zp); if (vp == NULL) { mutex_exit(&zp->z_lock); zfs_znode_free(zp); } else if (vp->v_count == 0) { ZTOV(zp) = NULL; - mutex_exit(&zp->z_lock); vhold(vp); + mutex_exit(&zp->z_lock); vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, curthread); vrecycle(vp, curthread); VOP_UNLOCK(vp, 0, curthread); |