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);