Print this page
7378 exported_lock held during nfs4 compound processing
*** 190,200 ****
VN_RELE(vp);
*vpp = pre_tvp;
return (0);
}
! newexi = checkexport4(&vp->v_vfsp->vfs_fsid, &fid, vp);
if (newexi == NULL) {
if (ismntpt == 0) {
*vpp = vp;
} else {
VN_RELE(vp);
--- 190,200 ----
VN_RELE(vp);
*vpp = pre_tvp;
return (0);
}
! newexi = checkexport(&vp->v_vfsp->vfs_fsid, &fid, vp);
if (newexi == NULL) {
if (ismntpt == 0) {
*vpp = vp;
} else {
VN_RELE(vp);
*** 223,232 ****
--- 223,233 ----
/* Reset what call_checkauth4() may have set */
*cs->statusp = NFS4_OK;
if (status != NFS4_OK) {
VN_RELE(vp);
+ exi_rele(newexi);
if (status == NFS4ERR_DELAY)
status = NFS4ERR_ACCESS;
return (status);
}
*vpp = vp;
*** 693,704 ****
if (vp) {
VN_RELE(vp);
vp = NULL;
}
! if (newexi)
newexi = NULL;
rddir_result_size -= dp->d_reclen;
/* skip "." and ".." entries */
if (dp->d_ino == 0 || NFS_IS_DOTNAME(dp->d_name)) {
--- 694,707 ----
if (vp) {
VN_RELE(vp);
vp = NULL;
}
! if (newexi) {
! exi_rele(newexi);
newexi = NULL;
+ }
rddir_result_size -= dp->d_reclen;
/* skip "." and ".." entries */
if (dp->d_ino == 0 || NFS_IS_DOTNAME(dp->d_name)) {
*** 1488,1497 ****
--- 1491,1505 ----
lastentry_ptr = ptr;
nents++;
rddir_next_offset = dp->d_off;
}
+ if (newexi) {
+ exi_rele(newexi);
+ newexi = NULL;
+ }
+
/*
* Check for the case that another VOP_READDIR() has to be done.
* - no space encoding error
* - no entry successfully encoded
* - still more directory to read