diff options
author | Sebastien Roy <seb@delphix.com> | 2017-04-27 22:46:23 -0700 |
---|---|---|
committer | Prakash Surya <prakash.surya@delphix.com> | 2017-05-16 02:07:25 -0700 |
commit | ade42b557a6e29c3d17a61b1535d99af10e379be (patch) | |
tree | d78d4019b4d8ff987fb90f8c24ad8e135624b6ea /usr/src/uts/common/fs/udfs/udf_inode.c | |
parent | fe4627ef755b7c263f91a0e6f07cdca5d7083501 (diff) | |
download | illumos-gate-ade42b557a6e29c3d17a61b1535d99af10e379be.tar.gz |
8064 need a static DTrace probe in VN_HOLD
Reviewed by: Pavel Zakharov <pavel.zakharov@delphix.com>
Reviewed by: Prakash Surya <prakash.surya@delphix.com>
Reviewed by: Prashanth Sreenivasa <pks@delphix.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Approved by: Robert Mustacchi <rm@joyent.com>
Diffstat (limited to 'usr/src/uts/common/fs/udfs/udf_inode.c')
-rw-r--r-- | usr/src/uts/common/fs/udfs/udf_inode.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/usr/src/uts/common/fs/udfs/udf_inode.c b/usr/src/uts/common/fs/udfs/udf_inode.c index 749e5a922f..1004b90d17 100644 --- a/usr/src/uts/common/fs/udfs/udf_inode.c +++ b/usr/src/uts/common/fs/udfs/udf_inode.c @@ -20,6 +20,7 @@ */ /* * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017 by Delphix. All rights reserved. */ #include <sys/types.h> @@ -158,8 +159,8 @@ ud_search_icache(struct vfs *vfsp, uint16_t prn, uint32_t ploc) /* ARGSUSED */ int -ud_iget(struct vfs *vfsp, uint16_t prn, uint32_t ploc, - struct ud_inode **ipp, struct buf *pbp, struct cred *cred) +ud_iget(struct vfs *vfsp, uint16_t prn, uint32_t ploc, struct ud_inode **ipp, + struct buf *pbp, struct cred *cred) { int32_t hno, nomem = 0, icb_tag_flags; union ihead *ih; @@ -476,7 +477,7 @@ error_ret: * It remains in the cache. Put it back on the freelist. */ mutex_enter(&vp->v_lock); - vp->v_count--; + VN_RELE_LOCKED(vp); mutex_exit(&vp->v_lock); ip->i_icb_lbano = 0; @@ -962,7 +963,7 @@ ud_iinactive(struct ud_inode *ip, struct cred *cr) return; } if ((vp->v_count > 1) || ((ip->i_flag & IREF) == 0)) { - vp->v_count--; /* release our hold from vn_rele */ + VN_RELE_LOCKED(vp); mutex_exit(&vp->v_lock); rw_exit(&ip->i_contents); return; @@ -1029,7 +1030,7 @@ ud_iinactive(struct ud_inode *ip, struct cred *cr) */ mutex_enter(&vp->v_lock); if (vp->v_count > 1) { - vp->v_count--; + VN_RELE_LOCKED(vp); mutex_exit(&vp->v_lock); rw_exit(&ip->i_contents); return; @@ -1064,7 +1065,7 @@ tryagain: if (vn_has_cached_data(vp)) { mutex_exit(&ud_nino_lock); mutex_enter(&vp->v_lock); - vp->v_count--; + VN_RELE_LOCKED(vp); mutex_exit(&vp->v_lock); mutex_enter(&ip->i_tlock); mutex_enter(&udf_ifree_lock); @@ -1084,7 +1085,7 @@ tryagain: if (vn_has_cached_data(vp)) { cmn_err(CE_WARN, "ud_iinactive: v_pages not NULL\n"); } - vp->v_count--; + VN_RELE_LOCKED(vp); mutex_exit(&vp->v_lock); mutex_enter(&ip->i_tlock); @@ -2036,15 +2037,13 @@ ud_idrop(struct ud_inode *ip) ud_printf("ud_idrop\n"); mutex_enter(&vp->v_lock); - if (vp->v_count > 1) { - vp->v_count--; + VN_RELE_LOCKED(vp); + if (vp->v_count > 0) { mutex_exit(&vp->v_lock); return; } - vp->v_count = 0; mutex_exit(&vp->v_lock); - /* * if inode is invalid or there is no page associated with * this inode, put the inode in the front of the free list |