Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Sep 2001 10:47:30 -0700 (PDT)
From:      Matt Dillon <dillon@earth.backplane.com>
To:        Douglas Swarin <doug@staff.texas.net>
Cc:        hackers@freebsd.org, tmoestl@gmx.net, bp@freebsd.org
Subject:   Re: more on Re: Please review: bugfix for vinvalbuf()
Message-ID:  <200109281747.f8SHlUP29063@earth.backplane.com>
References:  <20010711003926.B8799@crow.dom2ip.de> <200107110643.f6B6hTB24707@earth.backplane.com> <20010926204333.A15865@staff.texas.net>

next in thread | previous in thread | raw e-mail | index | archive | help
:@@ -721,9 +721,9 @@
:		}
:	}
:
:-	while (vp->v_numoutput > 0) {
:-		vp->v_flag |= VBWAIT;
:-		tsleep(&vp->v_numoutput, PVM, "vnvlbv", 0);
:+	if (VOP_GETVOBJECT(vp, &object) == 0) {
:+		while (object->paging_in_progress)
:+			vm_object_pip_sleep(object, "vnvlbv");
:	}
:
:	splx(s);


Hey Douglas, try the patch fragment below and see if you can reproduce the
problem.

					-Matt
 
@@ -721,10 +746,21 @@
 		}
 	}
 
-	while (vp->v_numoutput > 0) {
-		vp->v_flag |= VBWAIT;
-		tsleep(&vp->v_numoutput, PVM, "vnvlbv", 0);
-	}
+	/*
+	 * Wait for I/O to complete.  XXX needs cleaning up.  The vnode can
+	 * have write I/O in-progress but if there is a VM object then the
+	 * VM object can also have read-I/O in-progress.
+	 */
+	do {
+		while (vp->v_numoutput > 0) {
+			vp->v_flag |= VBWAIT;
+			tsleep(&vp->v_numoutput, PVM, "vnvlbv", 0);
+		}
+		if (VOP_GETVOBJECT(vp, &object) == 0) {
+			while (object->paging_in_progress)
+				vm_object_pip_sleep(object, "vnvlbx");
+		}
+	} while (vp->v_numoutput > 0);
 
 	splx(s);
 

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200109281747.f8SHlUP29063>