diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2018-01-17 12:34:19 +0000 |
---|---|---|
committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2018-01-17 12:34:19 +0000 |
commit | 2a808e6f3a1c5fa1720415a217da96fb64133053 (patch) | |
tree | 35a6f9db837e3cfe87bb2917503d93ebc9555b1f /usr/src/uts/common/fs/xattr.c | |
parent | 85c7b8606e4a61f48f51d72efd00cb54a4afc46a (diff) | |
parent | b10f758d69dd151326d3859af7e1d857ec9a6355 (diff) | |
download | illumos-joyent-release-20180118.tar.gz |
[illumos-gate merge]release-20180118
commit b10f758d69dd151326d3859af7e1d857ec9a6355
8963 default chunk size used by ipmi_fru_read() is too large for some SP's
commit 301fd1d6f25595cd8c6d6795f39c72d97aff8cd9
8959 Add notifications when a scrub is paused or resumed
commit 01a059ee0cdece49f47fd4d70086dd5bc7d0b0ff
8856 arc_cksum_is_equal() doesn't take into account ABD-logic
commit b1b183574d0cf2bf3accbbf7717d88bdc3bbfc33
8952 VMware Workstation NVMe model is of "Unknown class of pci/pnpbios device" value
commit be93bc991e25533dcbeb10e952fe0b9314390d90
8806 xattr_dir_inactive() releases used vnode with kernel panic
commit 28e9047603953b20acb54306be7c48152a1b03e6
8954 libtopo cannot handle any array type other than string_array.
Conflicts:
usr/src/lib/libipmi/common/ipmi_fru.c
Diffstat (limited to 'usr/src/uts/common/fs/xattr.c')
-rw-r--r-- | usr/src/uts/common/fs/xattr.c | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/usr/src/uts/common/fs/xattr.c b/usr/src/uts/common/fs/xattr.c index 7373aaddbe..0c5ddde20d 100644 --- a/usr/src/uts/common/fs/xattr.c +++ b/usr/src/uts/common/fs/xattr.c @@ -1457,22 +1457,15 @@ xattr_dir_readdir(vnode_t *dvp, uio_t *uiop, cred_t *cr, int *eofp, static void xattr_dir_inactive(vnode_t *vp, cred_t *cr, caller_context_t *ct) { - gfs_file_t *fp; - xattr_dir_t *xattr_dir; - vnode_t *real_vp = NULL; + xattr_dir_t *dp; - mutex_enter(&vp->v_lock); - xattr_dir = vp->v_data; - if (xattr_dir->xattr_realvp) { - real_vp = xattr_dir->xattr_realvp; - xattr_dir->xattr_realvp = NULL; - } - mutex_exit(&vp->v_lock); - if (real_vp != NULL) - VN_RELE(real_vp); - fp = gfs_dir_inactive(vp); - if (fp != NULL) { - kmem_free(fp, fp->gfs_size); + dp = gfs_dir_inactive(vp); /* will track v_count */ + if (dp != NULL) { + /* vp was freed */ + if (dp->xattr_realvp != NULL) + VN_RELE(dp->xattr_realvp); + + kmem_free(dp, ((gfs_file_t *)dp)->gfs_size); } } |