svn commit: r287002 - head/sys/vm

Alan Cox alc at FreeBSD.org
Fri Aug 21 17:00:40 UTC 2015


Author: alc
Date: Fri Aug 21 17:00:39 2015
New Revision: 287002
URL: https://svnweb.freebsd.org/changeset/base/287002

Log:
  Eliminate pointless assignments to rtvals[] in swap_pager_putpages().
  
  Reviewed by:	kib
  Sponsored by:	EMC / Isilon Storage Division

Modified:
  head/sys/vm/swap_pager.c

Modified: head/sys/vm/swap_pager.c
==============================================================================
--- head/sys/vm/swap_pager.c	Fri Aug 21 16:05:56 2015	(r287001)
+++ head/sys/vm/swap_pager.c	Fri Aug 21 17:00:39 2015	(r287002)
@@ -1404,8 +1404,6 @@ swap_pager_putpages(vm_object_t object, 
 			    blk + j
 			);
 			vm_page_dirty(mreq);
-			rtvals[i+j] = VM_PAGER_OK;
-
 			mreq->oflags |= VPO_SWAPINPROG;
 			bp->b_pages[j] = mreq;
 		}
@@ -1421,6 +1419,16 @@ swap_pager_putpages(vm_object_t object, 
 		PCPU_ADD(cnt.v_swappgsout, bp->b_npages);
 
 		/*
+		 * We unconditionally set rtvals[] to VM_PAGER_PEND so that we
+		 * can call the async completion routine at the end of a
+		 * synchronous I/O operation.  Otherwise, our caller would
+		 * perform duplicate unbusy and wakeup operations on the page
+		 * and object, respectively.
+		 */
+		for (j = 0; j < n; j++)
+			rtvals[i + j] = VM_PAGER_PEND;
+
+		/*
 		 * asynchronous
 		 *
 		 * NOTE: b_blkno is destroyed by the call to swapdev_strategy
@@ -1429,10 +1437,6 @@ swap_pager_putpages(vm_object_t object, 
 			bp->b_iodone = swp_pager_async_iodone;
 			BUF_KERNPROC(bp);
 			swp_pager_strategy(bp);
-
-			for (j = 0; j < n; ++j)
-				rtvals[i+j] = VM_PAGER_PEND;
-			/* restart outter loop */
 			continue;
 		}
 
@@ -1445,14 +1449,10 @@ swap_pager_putpages(vm_object_t object, 
 		swp_pager_strategy(bp);
 
 		/*
-		 * Wait for the sync I/O to complete, then update rtvals.
-		 * We just set the rtvals[] to VM_PAGER_PEND so we can call
-		 * our async completion routine at the end, thus avoiding a
-		 * double-free.
+		 * Wait for the sync I/O to complete.
 		 */
 		bwait(bp, PVM, "swwrt");
-		for (j = 0; j < n; ++j)
-			rtvals[i+j] = VM_PAGER_PEND;
+
 		/*
 		 * Now that we are through with the bp, we can call the
 		 * normal async completion, which frees everything up.


More information about the svn-src-head mailing list