svn commit: r201964 - user/kmacy/releng_8_fcs_buf_xen/sys/kern

Kip Macy kmacy at FreeBSD.org
Sat Jan 9 23:50:47 UTC 2010


Author: kmacy
Date: Sat Jan  9 23:50:47 2010
New Revision: 201964
URL: http://svn.freebsd.org/changeset/base/201964

Log:
  repeatedly invoke lowmem handler if buffer request can't be satisfied

Modified:
  user/kmacy/releng_8_fcs_buf_xen/sys/kern/vfs_bio.c

Modified: user/kmacy/releng_8_fcs_buf_xen/sys/kern/vfs_bio.c
==============================================================================
--- user/kmacy/releng_8_fcs_buf_xen/sys/kern/vfs_bio.c	Sat Jan  9 23:43:22 2010	(r201963)
+++ user/kmacy/releng_8_fcs_buf_xen/sys/kern/vfs_bio.c	Sat Jan  9 23:50:47 2010	(r201964)
@@ -1268,6 +1268,7 @@ brelse(struct buf *bp)
 	 * background write.
 	 */
 	if ((bp->b_flags & B_VMIO)
+	    && (bp->b_vp != NULL)
 	    && !(bp->b_vp->v_mount != NULL &&
 		 (bp->b_vp->v_mount->mnt_vfc->vfc_flags & VFCF_NETWORK) != 0 &&
 		 !vn_isdisk(bp->b_vp, NULL) &&
@@ -1730,7 +1731,7 @@ getnewbuf(struct vnode *vp, int slpflag,
 	struct thread *td;
 	struct buf *bp;
 	struct buf *nbp;
-	int defrag = 0;
+	int defrag = 0, retrying = 0;
 	int nqindex;
 	static int flushingbufs;
 
@@ -1995,10 +1996,16 @@ restart:
 		if (gbflags & GB_NOWAIT_BD)
 			return (NULL);
 
+		EVENTHANDLER_INVOKE(vm_lowmem, 0);
+		if (!retrying) {
+			retrying = 1;
+			goto restart;
+		}
 		mtx_lock(&nblock);
 		while (needsbuffer & flags) {
 			if (vp != NULL && (td->td_pflags & TDP_BUFNEED) == 0) {
 				mtx_unlock(&nblock);
+				EVENTHANDLER_INVOKE(vm_lowmem, 0);
 				/*
 				 * getblk() is called with a vnode
 				 * locked, and some majority of the


More information about the svn-src-user mailing list