Mercurial > illumos > illumos-gate
changeset 2707:c58c084f09a5
6421340 nfssrv:nfslog_write_logrecords() does not release vnode rwlock on ENOSPC condtion..recursive rwenter
author | pf199842 |
---|---|
date | Mon, 11 Sep 2006 09:30:49 -0700 |
parents | e78f8d1a9627 |
children | 1c4140542e9c |
files | usr/src/uts/common/fs/nfs/nfs_log.c |
diffstat | 1 files changed, 4 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/fs/nfs/nfs_log.c Mon Sep 11 05:47:34 2006 -0700 +++ b/usr/src/uts/common/fs/nfs/nfs_log.c Mon Sep 11 09:30:49 2006 -0700 @@ -835,11 +835,13 @@ if ((error = VOP_GETATTR(vp, &va, 0, CRED())) == 0) { if ((len + va.va_size) < (MAXOFF32_T)) { error = VOP_WRITE(vp, &uio, ioflag, CRED(), NULL); + VOP_RWUNLOCK(vp, V_WRITELOCK_TRUE, NULL); if (uio.uio_resid) error = ENOSPC; if (error) (void) VOP_SETATTR(vp, &va, 0, CRED(), NULL); } else { + VOP_RWUNLOCK(vp, V_WRITELOCK_TRUE, NULL); if (!(lfp->lf_flags & L_PRINTED)) { cmn_err(CE_WARN, "NFS Logging: buffer file %s exceeds 2GB; " @@ -847,8 +849,9 @@ } error = ENOSPC; } + } else { + VOP_RWUNLOCK(vp, V_WRITELOCK_TRUE, NULL); } - VOP_RWUNLOCK(vp, V_WRITELOCK_TRUE, NULL); kmem_free(iovp, size_iovecs);