summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/xattr.c
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2018-01-17 12:34:19 +0000
committerJerry Jelinek <jerry.jelinek@joyent.com>2018-01-17 12:34:19 +0000
commit2a808e6f3a1c5fa1720415a217da96fb64133053 (patch)
tree35a6f9db837e3cfe87bb2917503d93ebc9555b1f /usr/src/uts/common/fs/xattr.c
parent85c7b8606e4a61f48f51d72efd00cb54a4afc46a (diff)
parentb10f758d69dd151326d3859af7e1d857ec9a6355 (diff)
downloadillumos-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.c23
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);
}
}