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