Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 9 Jan 2010 23:50:47 +0000 (UTC)
From:      Kip Macy <kmacy@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r201964 - user/kmacy/releng_8_fcs_buf_xen/sys/kern
Message-ID:  <201001092350.o09NolPd053099@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



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