All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <1463779979.22178.142.camel@linux.intel.com>

diff --git a/a/1.txt b/N1/1.txt
index 2979385..d652ffe 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -7,9 +7,9 @@ the separation of page out and page scan operations.
 It paves the way to group similar pages together and batch
 process them in the page out path for better efficiency.
 
-After we have scanned a page in shrink_page_list andA 
-completed paging, the final disposition and cleanA 
-up of the page is consolidated into pg_finish.A A T
+After we have scanned a page in shrink_page_list and 
+completed paging, the final disposition and clean 
+up of the page is consolidated into pg_finish.  T
 he designated disposition of the page from page scanning
 in shrink_page_list is marked with one of the designation in pg_result.
 
@@ -22,17 +22,17 @@ Tim
 
 Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
 ---
-A mm/vmscan.c | 429 ++++++++++++++++++++++++++++++++++--------------------------
-A 1 file changed, 246 insertions(+), 183 deletions(-)
+ mm/vmscan.c | 429 ++++++++++++++++++++++++++++++++++--------------------------
+ 1 file changed, 246 insertions(+), 183 deletions(-)
 
 diff --git a/mm/vmscan.c b/mm/vmscan.c
 index 142cb61..0eb3c67 100644
 --- a/mm/vmscan.c
 +++ b/mm/vmscan.c
 @@ -873,6 +873,216 @@ static void page_check_dirty_writeback(struct page *page,
-A 		mapping->a_ops->is_dirty_writeback(page, dirty, writeback);
-A }
-A 
+ 		mapping->a_ops->is_dirty_writeback(page, dirty, writeback);
+ }
+ 
 +enum pg_result {
 +	PG_SPECULATIVE_REF,
 +	PG_FREE,
@@ -51,17 +51,17 @@ A
 +	enum page_references references,
 +	bool may_enter_fs,
 +	bool lazyfree,
-+	intA A *swap_ret,
++	int  *swap_ret,
 +	struct page *page)
 +{
 +	struct address_space *mapping;
 +
-+	mapping =A A page_mapping(page);
++	mapping =  page_mapping(page);
 +
 +	/*
-+	A * The page is mapped into the page tables of one or more
-+	A * processes. Try to unmap it here.
-+	A */
++	 * The page is mapped into the page tables of one or more
++	 * processes. Try to unmap it here.
++	 */
 +	if (page_mapped(page) && mapping) {
 +		switch (*swap_ret = try_to_unmap(page, lazyfree ?
 +			(ttu_flags | TTU_BATCH_FLUSH | TTU_LZFREE) :
@@ -81,19 +81,19 @@ A
 +
 +	if (PageDirty(page)) {
 +		/*
-+		A * Only kswapd can writeback filesystem pages to
-+		A * avoid risk of stack overflow but only writeback
-+		A * if many dirty pages have been encountered.
-+		A */
++		 * Only kswapd can writeback filesystem pages to
++		 * avoid risk of stack overflow but only writeback
++		 * if many dirty pages have been encountered.
++		 */
 +		if (page_is_file_cache(page) &&
 +				(!current_is_kswapd() ||
-+				A !test_bit(ZONE_DIRTY, &zone->flags))) {
++				 !test_bit(ZONE_DIRTY, &zone->flags))) {
 +			/*
-+			A * Immediately reclaim when written back.
-+			A * Similar in principal to deactivate_page()
-+			A * except we already have the page isolated
-+			A * and know it's dirty
-+			A */
++			 * Immediately reclaim when written back.
++			 * Similar in principal to deactivate_page()
++			 * except we already have the page isolated
++			 * and know it's dirty
++			 */
 +			inc_zone_page_state(page, NR_VMSCAN_IMMEDIATE);
 +			SetPageReclaim(page);
 +
@@ -108,10 +108,10 @@ A
 +			return PG_KEEP_LOCKED;
 +
 +		/*
-+		A * Page is dirty. Flush the TLB if a writable entry
-+		A * potentially exists to avoid CPU writes after IO
-+		A * starts and then write it out here.
-+		A */
++		 * Page is dirty. Flush the TLB if a writable entry
++		 * potentially exists to avoid CPU writes after IO
++		 * starts and then write it out here.
++		 */
 +		try_to_unmap_flush_dirty();
 +		switch (pageout(page, mapping, sc)) {
 +		case PAGE_KEEP:
@@ -125,9 +125,9 @@ A
 +				return PG_KEEP;
 +
 +			/*
-+			A * A synchronous write - probably a ramdisk.A A Go
-+			A * ahead and try to reclaim the page.
-+			A */
++			 * A synchronous write - probably a ramdisk.  Go
++			 * ahead and try to reclaim the page.
++			 */
 +			if (!trylock_page(page))
 +				return PG_KEEP;
 +			if (PageDirty(page) || PageWriteback(page))
@@ -139,26 +139,26 @@ A
 +	}
 +
 +	/*
-+	A * If the page has buffers, try to free the buffer mappings
-+	A * associated with this page. If we succeed we try to free
-+	A * the page as well.
-+	A *
-+	A * We do this even if the page is PageDirty().
-+	A * try_to_release_page() does not perform I/O, but it is
-+	A * possible for a page to have PageDirty set, but it is actually
-+	A * clean (all its buffers are clean).A A This happens if the
-+	A * buffers were written out directly, with submit_bh(). ext3
-+	A * will do this, as well as the blockdev mapping.
-+	A * try_to_release_page() will discover that cleanness and will
-+	A * drop the buffers and mark the page clean - it can be freed.
-+	A *
-+	A * Rarely, pages can have buffers and no ->mapping.A A These are
-+	A * the pages which were not successfully invalidated in
-+	A * truncate_complete_page().A A We try to drop those buffers here
-+	A * and if that worked, and the page is no longer mapped into
-+	A * process address space (page_count == 1) it can be freed.
-+	A * Otherwise, leave the page on the LRU so it is swappable.
-+	A */
++	 * If the page has buffers, try to free the buffer mappings
++	 * associated with this page. If we succeed we try to free
++	 * the page as well.
++	 *
++	 * We do this even if the page is PageDirty().
++	 * try_to_release_page() does not perform I/O, but it is
++	 * possible for a page to have PageDirty set, but it is actually
++	 * clean (all its buffers are clean).  This happens if the
++	 * buffers were written out directly, with submit_bh(). ext3
++	 * will do this, as well as the blockdev mapping.
++	 * try_to_release_page() will discover that cleanness and will
++	 * drop the buffers and mark the page clean - it can be freed.
++	 *
++	 * Rarely, pages can have buffers and no ->mapping.  These are
++	 * the pages which were not successfully invalidated in
++	 * truncate_complete_page().  We try to drop those buffers here
++	 * and if that worked, and the page is no longer mapped into
++	 * process address space (page_count == 1) it can be freed.
++	 * Otherwise, leave the page on the LRU so it is swappable.
++	 */
 +	if (page_has_private(page)) {
 +		if (!try_to_release_page(page, sc->gfp_mask))
 +			return PG_ACTIVATE_LOCKED;
@@ -168,12 +168,12 @@ A
 +				return PG_FREE;
 +			else {
 +				/*
-+				A * rare race with speculative reference.
-+				A * the speculative reference will free
-+				A * this page shortly, so we may
-+				A * increment nr_reclaimed (and
-+				A * leave it off the LRU).
-+				A */
++				 * rare race with speculative reference.
++				 * the speculative reference will free
++				 * this page shortly, so we may
++				 * increment nr_reclaimed (and
++				 * leave it off the LRU).
++				 */
 +				return PG_SPECULATIVE_REF;
 +			}
 +		}
@@ -184,12 +184,12 @@ A
 +		return PG_KEEP_LOCKED;
 +
 +	/*
-+	A * At this point, we have no other references and there is
-+	A * no way to pick any more up (removed from LRU, removed
-+	A * from pagecache). Can use non-atomic bitops now (and
-+	A * we obviously don't have to worry about waking up a process
-+	A * waiting on the page lock, because there are no references.
-+	A */
++	 * At this point, we have no other references and there is
++	 * no way to pick any more up (removed from LRU, removed
++	 * from pagecache). Can use non-atomic bitops now (and
++	 * we obviously don't have to worry about waking up a process
++	 * waiting on the page lock, because there are no references.
++	 */
 +	__ClearPageLocked(page);
 +	return PG_FREE;
 +}
@@ -212,9 +212,9 @@ A
 +
 +		++*nr_reclaimed;
 +		/*
-+		A * Is there need to periodically free_page_list? It would
-+		A * appear not as the counts should be low
-+		A */
++		 * Is there need to periodically free_page_list? It would
++		 * appear not as the counts should be low
++		 */
 +		list_add(&page->lru, free_pages);
 +		return;
 +	case PG_MLOCKED:
@@ -243,90 +243,90 @@ A
 +	}
 +}
 +
-A /*
-A  * shrink_page_list() returns the number of reclaimed pages
-A  */
+ /*
+  * shrink_page_list() returns the number of reclaimed pages
+  */
 @@ -904,28 +1114,35 @@ static unsigned long shrink_page_list(struct list_head *page_list,
-A 		struct page *page;
-A 		int may_enter_fs;
-A 		enum page_references references = PAGEREF_RECLAIM_CLEAN;
+ 		struct page *page;
+ 		int may_enter_fs;
+ 		enum page_references references = PAGEREF_RECLAIM_CLEAN;
 +		enum pg_result pg_dispose = PG_UNKNOWN;
-A 		bool dirty, writeback;
-A 		bool lazyfree = false;
+ 		bool dirty, writeback;
+ 		bool lazyfree = false;
 -		int ret = SWAP_SUCCESS;
 +		int swap_ret = SWAP_SUCCESS;
-A 
-A 		cond_resched();
-A 
-A 		page = lru_to_page(page_list);
-A 		list_del(&page->lru);
-A 
+ 
+ 		cond_resched();
+ 
+ 		page = lru_to_page(page_list);
+ 		list_del(&page->lru);
+ 
 -		if (!trylock_page(page))
 -			goto keep;
 +		if (!trylock_page(page)) {
 +			pg_dispose = PG_KEEP;
 +			goto finish;
 +		}
-A 
-A 		VM_BUG_ON_PAGE(PageActive(page), page);
-A 		VM_BUG_ON_PAGE(page_zone(page) != zone, page);
-A 
-A 		sc->nr_scanned++;
-A 
+ 
+ 		VM_BUG_ON_PAGE(PageActive(page), page);
+ 		VM_BUG_ON_PAGE(page_zone(page) != zone, page);
+ 
+ 		sc->nr_scanned++;
+ 
 -		if (unlikely(!page_evictable(page)))
 -			goto cull_mlocked;
 +		if (unlikely(!page_evictable(page))) {
 +			pg_dispose = PG_MLOCKED;
 +			goto finish;
 +		}
-A 
 -		if (!sc->may_unmap && page_mapped(page))
 -			goto keep_locked;
 +		if (!sc->may_unmap && page_mapped(page)) {
 +			pg_dispose = PG_KEEP_LOCKED;
 +			goto finish;
 +		}
-A 
-A 		/* Double the slab pressure for mapped and swapcache pages */
-A 		if (page_mapped(page) || PageSwapCache(page))
+ 
+ 		/* Double the slab pressure for mapped and swapcache pages */
+ 		if (page_mapped(page) || PageSwapCache(page))
 @@ -998,7 +1215,8 @@ static unsigned long shrink_page_list(struct list_head *page_list,
-A 			A A A A PageReclaim(page) &&
-A 			A A A A test_bit(ZONE_WRITEBACK, &zone->flags)) {
-A 				nr_immediate++;
+ 			    PageReclaim(page) &&
+ 			    test_bit(ZONE_WRITEBACK, &zone->flags)) {
+ 				nr_immediate++;
 -				goto keep_locked;
 +				pg_dispose = PG_KEEP_LOCKED;
 +				goto finish;
-A 
-A 			/* Case 2 above */
-A 			} else if (sane_reclaim(sc) ||
+ 
+ 			/* Case 2 above */
+ 			} else if (sane_reclaim(sc) ||
 @@ -1016,7 +1234,8 @@ static unsigned long shrink_page_list(struct list_head *page_list,
-A 				A */
-A 				SetPageReclaim(page);
-A 				nr_writeback++;
+ 				 */
+ 				SetPageReclaim(page);
+ 				nr_writeback++;
 -				goto keep_locked;
 +				pg_dispose = PG_KEEP_LOCKED;
 +				goto finish;
-A 
-A 			/* Case 3 above */
-A 			} else {
+ 
+ 			/* Case 3 above */
+ 			} else {
 @@ -1033,9 +1252,11 @@ static unsigned long shrink_page_list(struct list_head *page_list,
-A 
-A 		switch (references) {
-A 		case PAGEREF_ACTIVATE:
+ 
+ 		switch (references) {
+ 		case PAGEREF_ACTIVATE:
 -			goto activate_locked;
 +			pg_dispose = PG_ACTIVATE_LOCKED;
 +			goto finish;
-A 		case PAGEREF_KEEP:
+ 		case PAGEREF_KEEP:
 -			goto keep_locked;
 +			pg_dispose = PG_KEEP_LOCKED;
 +			goto finish;
-A 		case PAGEREF_RECLAIM:
-A 		case PAGEREF_RECLAIM_CLEAN:
-A 			; /* try to reclaim the page below */
+ 		case PAGEREF_RECLAIM:
+ 		case PAGEREF_RECLAIM_CLEAN:
+ 			; /* try to reclaim the page below */
 @@ -1046,183 +1267,25 @@ static unsigned long shrink_page_list(struct list_head *page_list,
-A 		A * Try to allocate it some swap space here.
-A 		A */
-A 		if (PageAnon(page) && !PageSwapCache(page)) {
+ 		 * Try to allocate it some swap space here.
+ 		 */
+ 		if (PageAnon(page) && !PageSwapCache(page)) {
 -			if (!(sc->gfp_mask & __GFP_IO))
 -				goto keep_locked;
 -			if (!add_to_swap(page, page_list))
@@ -339,9 +339,9 @@ A 		if (PageAnon(page) && !PageSwapCache(page)) {
 -		}
 -
 -		/*
--		A * The page is mapped into the page tables of one or more
--		A * processes. Try to unmap it here.
--		A */
+-		 * The page is mapped into the page tables of one or more
+-		 * processes. Try to unmap it here.
+-		 */
 -		if (page_mapped(page) && mapping) {
 -			switch (ret = try_to_unmap(page, lazyfree ?
 -				(ttu_flags | TTU_BATCH_FLUSH | TTU_LZFREE) :
@@ -359,24 +359,24 @@ A 		if (PageAnon(page) && !PageSwapCache(page)) {
 +			if (!(sc->gfp_mask & __GFP_IO)) {
 +				pg_dispose = PG_KEEP_LOCKED;
 +				goto finish;
-A 			}
+ 			}
 -		}
 -
 -		if (PageDirty(page)) {
 -			/*
--			A * Only kswapd can writeback filesystem pages to
--			A * avoid risk of stack overflow but only writeback
--			A * if many dirty pages have been encountered.
--			A */
+-			 * Only kswapd can writeback filesystem pages to
+-			 * avoid risk of stack overflow but only writeback
+-			 * if many dirty pages have been encountered.
+-			 */
 -			if (page_is_file_cache(page) &&
 -					(!current_is_kswapd() ||
--					A !test_bit(ZONE_DIRTY, &zone->flags))) {
+-					 !test_bit(ZONE_DIRTY, &zone->flags))) {
 -				/*
--				A * Immediately reclaim when written back.
--				A * Similar in principal to deactivate_page()
--				A * except we already have the page isolated
--				A * and know it's dirty
--				A */
+-				 * Immediately reclaim when written back.
+-				 * Similar in principal to deactivate_page()
+-				 * except we already have the page isolated
+-				 * and know it's dirty
+-				 */
 -				inc_zone_page_state(page, NR_VMSCAN_IMMEDIATE);
 -				SetPageReclaim(page);
 -
@@ -391,10 +391,10 @@ A 			}
 -				goto keep_locked;
 -
 -			/*
--			A * Page is dirty. Flush the TLB if a writable entry
--			A * potentially exists to avoid CPU writes after IO
--			A * starts and then write it out here.
--			A */
+-			 * Page is dirty. Flush the TLB if a writable entry
+-			 * potentially exists to avoid CPU writes after IO
+-			 * starts and then write it out here.
+-			 */
 -			try_to_unmap_flush_dirty();
 -			switch (pageout(page, mapping, sc)) {
 -			case PAGE_KEEP:
@@ -408,9 +408,9 @@ A 			}
 -					goto keep;
 -
 -				/*
--				A * A synchronous write - probably a ramdisk.A A Go
--				A * ahead and try to reclaim the page.
--				A */
+-				 * A synchronous write - probably a ramdisk.  Go
+-				 * ahead and try to reclaim the page.
+-				 */
 -				if (!trylock_page(page))
 -					goto keep;
 -				if (PageDirty(page) || PageWriteback(page))
@@ -422,26 +422,26 @@ A 			}
 -		}
 -
 -		/*
--		A * If the page has buffers, try to free the buffer mappings
--		A * associated with this page. If we succeed we try to free
--		A * the page as well.
--		A *
--		A * We do this even if the page is PageDirty().
--		A * try_to_release_page() does not perform I/O, but it is
--		A * possible for a page to have PageDirty set, but it is actually
--		A * clean (all its buffers are clean).A A This happens if the
--		A * buffers were written out directly, with submit_bh(). ext3
--		A * will do this, as well as the blockdev mapping.
--		A * try_to_release_page() will discover that cleanness and will
--		A * drop the buffers and mark the page clean - it can be freed.
--		A *
--		A * Rarely, pages can have buffers and no ->mapping.A A These are
--		A * the pages which were not successfully invalidated in
--		A * truncate_complete_page().A A We try to drop those buffers here
--		A * and if that worked, and the page is no longer mapped into
--		A * process address space (page_count == 1) it can be freed.
--		A * Otherwise, leave the page on the LRU so it is swappable.
--		A */
+-		 * If the page has buffers, try to free the buffer mappings
+-		 * associated with this page. If we succeed we try to free
+-		 * the page as well.
+-		 *
+-		 * We do this even if the page is PageDirty().
+-		 * try_to_release_page() does not perform I/O, but it is
+-		 * possible for a page to have PageDirty set, but it is actually
+-		 * clean (all its buffers are clean).  This happens if the
+-		 * buffers were written out directly, with submit_bh(). ext3
+-		 * will do this, as well as the blockdev mapping.
+-		 * try_to_release_page() will discover that cleanness and will
+-		 * drop the buffers and mark the page clean - it can be freed.
+-		 *
+-		 * Rarely, pages can have buffers and no ->mapping.  These are
+-		 * the pages which were not successfully invalidated in
+-		 * truncate_complete_page().  We try to drop those buffers here
+-		 * and if that worked, and the page is no longer mapped into
+-		 * process address space (page_count == 1) it can be freed.
+-		 * Otherwise, leave the page on the LRU so it is swappable.
+-		 */
 -		if (page_has_private(page)) {
 -			if (!try_to_release_page(page, sc->gfp_mask))
 -				goto activate_locked;
@@ -451,34 +451,34 @@ A 			}
 -					goto free_it;
 -				else {
 -					/*
--					A * rare race with speculative reference.
--					A * the speculative reference will free
--					A * this page shortly, so we may
--					A * increment nr_reclaimed here (and
--					A * leave it off the LRU).
--					A */
+-					 * rare race with speculative reference.
+-					 * the speculative reference will free
+-					 * this page shortly, so we may
+-					 * increment nr_reclaimed here (and
+-					 * leave it off the LRU).
+-					 */
 -					nr_reclaimed++;
 -					continue;
 -				}
 +			if (!add_to_swap(page, page_list)) {
 +				pg_dispose = PG_ACTIVATE_LOCKED;
 +				goto finish;
-A 			}
+ 			}
 +			lazyfree = true;
 +			may_enter_fs = 1;
-A 		}
-A 
+ 		}
+ 
 -lazyfree:
 -		if (!mapping || !__remove_mapping(mapping, page, true))
 -			goto keep_locked;
 -
 -		/*
--		A * At this point, we have no other references and there is
--		A * no way to pick any more up (removed from LRU, removed
--		A * from pagecache). Can use non-atomic bitops now (and
--		A * we obviously don't have to worry about waking up a process
--		A * waiting on the page lock, because there are no references.
--		A */
+-		 * At this point, we have no other references and there is
+-		 * no way to pick any more up (removed from LRU, removed
+-		 * from pagecache). Can use non-atomic bitops now (and
+-		 * we obviously don't have to worry about waking up a process
+-		 * waiting on the page lock, because there are no references.
+-		 */
 -		__ClearPageLocked(page);
 -free_it:
 -		if (ret == SWAP_LZFREE)
@@ -491,11 +491,11 @@ A
 +finish:
 +		pg_finish(page, pg_dispose, swap_ret, &nr_reclaimed,
 +				&pgactivate, &ret_pages, &free_pages);
-A 
 -		/*
--		A * Is there need to periodically free_page_list? It would
--		A * appear not as the counts should be low
--		A */
+-		 * Is there need to periodically free_page_list? It would
+-		 * appear not as the counts should be low
+-		 */
 -		list_add(&page->lru, &free_pages);
 -		continue;
 -
@@ -518,14 +518,8 @@ A
 -keep:
 -		list_add(&page->lru, &ret_pages);
 -		VM_BUG_ON_PAGE(PageLRU(page) || PageUnevictable(page), page);
-A 	}
-A 
-A 	mem_cgroup_uncharge_list(&free_pages);
---A 
+ 	}
+ 
+ 	mem_cgroup_uncharge_list(&free_pages);
+-- 
 2.5.5
-
---
-To unsubscribe, send a message with 'unsubscribe linux-mm' in
-the body to majordomo@kvack.org.  For more info on Linux MM,
-see: http://www.linux-mm.org/ .
-Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
diff --git a/a/content_digest b/N1/content_digest
index 201283f..25beef5 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -24,9 +24,9 @@
  "It paves the way to group similar pages together and batch\n"
  "process them in the page out path for better efficiency.\n"
  "\n"
- "After we have scanned a page in shrink_page_list andA \n"
- "completed paging, the final disposition and cleanA \n"
- "up of the page is consolidated into pg_finish.A A T\n"
+ "After we have scanned a page in shrink_page_list and\302\240\n"
+ "completed paging, the final disposition and clean\302\240\n"
+ "up of the page is consolidated into pg_finish.\302\240\302\240T\n"
  "he designated disposition of the page from page scanning\n"
  "in shrink_page_list is marked with one of the designation in pg_result.\n"
  "\n"
@@ -39,17 +39,17 @@
  "\n"
  "Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>\n"
  "---\n"
- "A mm/vmscan.c | 429 ++++++++++++++++++++++++++++++++++--------------------------\n"
- "A 1 file changed, 246 insertions(+), 183 deletions(-)\n"
+ "\302\240mm/vmscan.c | 429 ++++++++++++++++++++++++++++++++++--------------------------\n"
+ "\302\2401 file changed, 246 insertions(+), 183 deletions(-)\n"
  "\n"
  "diff --git a/mm/vmscan.c b/mm/vmscan.c\n"
  "index 142cb61..0eb3c67 100644\n"
  "--- a/mm/vmscan.c\n"
  "+++ b/mm/vmscan.c\n"
  "@@ -873,6 +873,216 @@ static void page_check_dirty_writeback(struct page *page,\n"
- "A \t\tmapping->a_ops->is_dirty_writeback(page, dirty, writeback);\n"
- "A }\n"
- "A \n"
+ "\302\240\t\tmapping->a_ops->is_dirty_writeback(page, dirty, writeback);\n"
+ "\302\240}\n"
+ "\302\240\n"
  "+enum pg_result {\n"
  "+\tPG_SPECULATIVE_REF,\n"
  "+\tPG_FREE,\n"
@@ -68,17 +68,17 @@
  "+\tenum page_references references,\n"
  "+\tbool may_enter_fs,\n"
  "+\tbool lazyfree,\n"
- "+\tintA A *swap_ret,\n"
+ "+\tint\302\240\302\240*swap_ret,\n"
  "+\tstruct page *page)\n"
  "+{\n"
  "+\tstruct address_space *mapping;\n"
  "+\n"
- "+\tmapping =A A page_mapping(page);\n"
+ "+\tmapping =\302\240\302\240page_mapping(page);\n"
  "+\n"
  "+\t/*\n"
- "+\tA * The page is mapped into the page tables of one or more\n"
- "+\tA * processes. Try to unmap it here.\n"
- "+\tA */\n"
+ "+\t\302\240* The page is mapped into the page tables of one or more\n"
+ "+\t\302\240* processes. Try to unmap it here.\n"
+ "+\t\302\240*/\n"
  "+\tif (page_mapped(page) && mapping) {\n"
  "+\t\tswitch (*swap_ret = try_to_unmap(page, lazyfree ?\n"
  "+\t\t\t(ttu_flags | TTU_BATCH_FLUSH | TTU_LZFREE) :\n"
@@ -98,19 +98,19 @@
  "+\n"
  "+\tif (PageDirty(page)) {\n"
  "+\t\t/*\n"
- "+\t\tA * Only kswapd can writeback filesystem pages to\n"
- "+\t\tA * avoid risk of stack overflow but only writeback\n"
- "+\t\tA * if many dirty pages have been encountered.\n"
- "+\t\tA */\n"
+ "+\t\t\302\240* Only kswapd can writeback filesystem pages to\n"
+ "+\t\t\302\240* avoid risk of stack overflow but only writeback\n"
+ "+\t\t\302\240* if many dirty pages have been encountered.\n"
+ "+\t\t\302\240*/\n"
  "+\t\tif (page_is_file_cache(page) &&\n"
  "+\t\t\t\t(!current_is_kswapd() ||\n"
- "+\t\t\t\tA !test_bit(ZONE_DIRTY, &zone->flags))) {\n"
+ "+\t\t\t\t\302\240!test_bit(ZONE_DIRTY, &zone->flags))) {\n"
  "+\t\t\t/*\n"
- "+\t\t\tA * Immediately reclaim when written back.\n"
- "+\t\t\tA * Similar in principal to deactivate_page()\n"
- "+\t\t\tA * except we already have the page isolated\n"
- "+\t\t\tA * and know it's dirty\n"
- "+\t\t\tA */\n"
+ "+\t\t\t\302\240* Immediately reclaim when written back.\n"
+ "+\t\t\t\302\240* Similar in principal to deactivate_page()\n"
+ "+\t\t\t\302\240* except we already have the page isolated\n"
+ "+\t\t\t\302\240* and know it's dirty\n"
+ "+\t\t\t\302\240*/\n"
  "+\t\t\tinc_zone_page_state(page, NR_VMSCAN_IMMEDIATE);\n"
  "+\t\t\tSetPageReclaim(page);\n"
  "+\n"
@@ -125,10 +125,10 @@
  "+\t\t\treturn PG_KEEP_LOCKED;\n"
  "+\n"
  "+\t\t/*\n"
- "+\t\tA * Page is dirty. Flush the TLB if a writable entry\n"
- "+\t\tA * potentially exists to avoid CPU writes after IO\n"
- "+\t\tA * starts and then write it out here.\n"
- "+\t\tA */\n"
+ "+\t\t\302\240* Page is dirty. Flush the TLB if a writable entry\n"
+ "+\t\t\302\240* potentially exists to avoid CPU writes after IO\n"
+ "+\t\t\302\240* starts and then write it out here.\n"
+ "+\t\t\302\240*/\n"
  "+\t\ttry_to_unmap_flush_dirty();\n"
  "+\t\tswitch (pageout(page, mapping, sc)) {\n"
  "+\t\tcase PAGE_KEEP:\n"
@@ -142,9 +142,9 @@
  "+\t\t\t\treturn PG_KEEP;\n"
  "+\n"
  "+\t\t\t/*\n"
- "+\t\t\tA * A synchronous write - probably a ramdisk.A A Go\n"
- "+\t\t\tA * ahead and try to reclaim the page.\n"
- "+\t\t\tA */\n"
+ "+\t\t\t\302\240* A synchronous write - probably a ramdisk.\302\240\302\240Go\n"
+ "+\t\t\t\302\240* ahead and try to reclaim the page.\n"
+ "+\t\t\t\302\240*/\n"
  "+\t\t\tif (!trylock_page(page))\n"
  "+\t\t\t\treturn PG_KEEP;\n"
  "+\t\t\tif (PageDirty(page) || PageWriteback(page))\n"
@@ -156,26 +156,26 @@
  "+\t}\n"
  "+\n"
  "+\t/*\n"
- "+\tA * If the page has buffers, try to free the buffer mappings\n"
- "+\tA * associated with this page. If we succeed we try to free\n"
- "+\tA * the page as well.\n"
- "+\tA *\n"
- "+\tA * We do this even if the page is PageDirty().\n"
- "+\tA * try_to_release_page() does not perform I/O, but it is\n"
- "+\tA * possible for a page to have PageDirty set, but it is actually\n"
- "+\tA * clean (all its buffers are clean).A A This happens if the\n"
- "+\tA * buffers were written out directly, with submit_bh(). ext3\n"
- "+\tA * will do this, as well as the blockdev mapping.\n"
- "+\tA * try_to_release_page() will discover that cleanness and will\n"
- "+\tA * drop the buffers and mark the page clean - it can be freed.\n"
- "+\tA *\n"
- "+\tA * Rarely, pages can have buffers and no ->mapping.A A These are\n"
- "+\tA * the pages which were not successfully invalidated in\n"
- "+\tA * truncate_complete_page().A A We try to drop those buffers here\n"
- "+\tA * and if that worked, and the page is no longer mapped into\n"
- "+\tA * process address space (page_count == 1) it can be freed.\n"
- "+\tA * Otherwise, leave the page on the LRU so it is swappable.\n"
- "+\tA */\n"
+ "+\t\302\240* If the page has buffers, try to free the buffer mappings\n"
+ "+\t\302\240* associated with this page. If we succeed we try to free\n"
+ "+\t\302\240* the page as well.\n"
+ "+\t\302\240*\n"
+ "+\t\302\240* We do this even if the page is PageDirty().\n"
+ "+\t\302\240* try_to_release_page() does not perform I/O, but it is\n"
+ "+\t\302\240* possible for a page to have PageDirty set, but it is actually\n"
+ "+\t\302\240* clean (all its buffers are clean).\302\240\302\240This happens if the\n"
+ "+\t\302\240* buffers were written out directly, with submit_bh(). ext3\n"
+ "+\t\302\240* will do this, as well as the blockdev mapping.\n"
+ "+\t\302\240* try_to_release_page() will discover that cleanness and will\n"
+ "+\t\302\240* drop the buffers and mark the page clean - it can be freed.\n"
+ "+\t\302\240*\n"
+ "+\t\302\240* Rarely, pages can have buffers and no ->mapping.\302\240\302\240These are\n"
+ "+\t\302\240* the pages which were not successfully invalidated in\n"
+ "+\t\302\240* truncate_complete_page().\302\240\302\240We try to drop those buffers here\n"
+ "+\t\302\240* and if that worked, and the page is no longer mapped into\n"
+ "+\t\302\240* process address space (page_count == 1) it can be freed.\n"
+ "+\t\302\240* Otherwise, leave the page on the LRU so it is swappable.\n"
+ "+\t\302\240*/\n"
  "+\tif (page_has_private(page)) {\n"
  "+\t\tif (!try_to_release_page(page, sc->gfp_mask))\n"
  "+\t\t\treturn PG_ACTIVATE_LOCKED;\n"
@@ -185,12 +185,12 @@
  "+\t\t\t\treturn PG_FREE;\n"
  "+\t\t\telse {\n"
  "+\t\t\t\t/*\n"
- "+\t\t\t\tA * rare race with speculative reference.\n"
- "+\t\t\t\tA * the speculative reference will free\n"
- "+\t\t\t\tA * this page shortly, so we may\n"
- "+\t\t\t\tA * increment nr_reclaimed (and\n"
- "+\t\t\t\tA * leave it off the LRU).\n"
- "+\t\t\t\tA */\n"
+ "+\t\t\t\t\302\240* rare race with speculative reference.\n"
+ "+\t\t\t\t\302\240* the speculative reference will free\n"
+ "+\t\t\t\t\302\240* this page shortly, so we may\n"
+ "+\t\t\t\t\302\240* increment nr_reclaimed (and\n"
+ "+\t\t\t\t\302\240* leave it off the LRU).\n"
+ "+\t\t\t\t\302\240*/\n"
  "+\t\t\t\treturn PG_SPECULATIVE_REF;\n"
  "+\t\t\t}\n"
  "+\t\t}\n"
@@ -201,12 +201,12 @@
  "+\t\treturn PG_KEEP_LOCKED;\n"
  "+\n"
  "+\t/*\n"
- "+\tA * At this point, we have no other references and there is\n"
- "+\tA * no way to pick any more up (removed from LRU, removed\n"
- "+\tA * from pagecache). Can use non-atomic bitops now (and\n"
- "+\tA * we obviously don't have to worry about waking up a process\n"
- "+\tA * waiting on the page lock, because there are no references.\n"
- "+\tA */\n"
+ "+\t\302\240* At this point, we have no other references and there is\n"
+ "+\t\302\240* no way to pick any more up (removed from LRU, removed\n"
+ "+\t\302\240* from pagecache). Can use non-atomic bitops now (and\n"
+ "+\t\302\240* we obviously don't have to worry about waking up a process\n"
+ "+\t\302\240* waiting on the page lock, because there are no references.\n"
+ "+\t\302\240*/\n"
  "+\t__ClearPageLocked(page);\n"
  "+\treturn PG_FREE;\n"
  "+}\n"
@@ -229,9 +229,9 @@
  "+\n"
  "+\t\t++*nr_reclaimed;\n"
  "+\t\t/*\n"
- "+\t\tA * Is there need to periodically free_page_list? It would\n"
- "+\t\tA * appear not as the counts should be low\n"
- "+\t\tA */\n"
+ "+\t\t\302\240* Is there need to periodically free_page_list? It would\n"
+ "+\t\t\302\240* appear not as the counts should be low\n"
+ "+\t\t\302\240*/\n"
  "+\t\tlist_add(&page->lru, free_pages);\n"
  "+\t\treturn;\n"
  "+\tcase PG_MLOCKED:\n"
@@ -260,90 +260,90 @@
  "+\t}\n"
  "+}\n"
  "+\n"
- "A /*\n"
- "A  * shrink_page_list() returns the number of reclaimed pages\n"
- "A  */\n"
+ "\302\240/*\n"
+ "\302\240 * shrink_page_list() returns the number of reclaimed pages\n"
+ "\302\240 */\n"
  "@@ -904,28 +1114,35 @@ static unsigned long shrink_page_list(struct list_head *page_list,\n"
- "A \t\tstruct page *page;\n"
- "A \t\tint may_enter_fs;\n"
- "A \t\tenum page_references references = PAGEREF_RECLAIM_CLEAN;\n"
+ "\302\240\t\tstruct page *page;\n"
+ "\302\240\t\tint may_enter_fs;\n"
+ "\302\240\t\tenum page_references references = PAGEREF_RECLAIM_CLEAN;\n"
  "+\t\tenum pg_result pg_dispose = PG_UNKNOWN;\n"
- "A \t\tbool dirty, writeback;\n"
- "A \t\tbool lazyfree = false;\n"
+ "\302\240\t\tbool dirty, writeback;\n"
+ "\302\240\t\tbool lazyfree = false;\n"
  "-\t\tint ret = SWAP_SUCCESS;\n"
  "+\t\tint swap_ret = SWAP_SUCCESS;\n"
- "A \n"
- "A \t\tcond_resched();\n"
- "A \n"
- "A \t\tpage = lru_to_page(page_list);\n"
- "A \t\tlist_del(&page->lru);\n"
- "A \n"
+ "\302\240\n"
+ "\302\240\t\tcond_resched();\n"
+ "\302\240\n"
+ "\302\240\t\tpage = lru_to_page(page_list);\n"
+ "\302\240\t\tlist_del(&page->lru);\n"
+ "\302\240\n"
  "-\t\tif (!trylock_page(page))\n"
  "-\t\t\tgoto keep;\n"
  "+\t\tif (!trylock_page(page)) {\n"
  "+\t\t\tpg_dispose = PG_KEEP;\n"
  "+\t\t\tgoto finish;\n"
  "+\t\t}\n"
- "A \n"
- "A \t\tVM_BUG_ON_PAGE(PageActive(page), page);\n"
- "A \t\tVM_BUG_ON_PAGE(page_zone(page) != zone, page);\n"
- "A \n"
- "A \t\tsc->nr_scanned++;\n"
- "A \n"
+ "\302\240\n"
+ "\302\240\t\tVM_BUG_ON_PAGE(PageActive(page), page);\n"
+ "\302\240\t\tVM_BUG_ON_PAGE(page_zone(page) != zone, page);\n"
+ "\302\240\n"
+ "\302\240\t\tsc->nr_scanned++;\n"
+ "\302\240\n"
  "-\t\tif (unlikely(!page_evictable(page)))\n"
  "-\t\t\tgoto cull_mlocked;\n"
  "+\t\tif (unlikely(!page_evictable(page))) {\n"
  "+\t\t\tpg_dispose = PG_MLOCKED;\n"
  "+\t\t\tgoto finish;\n"
  "+\t\t}\n"
- "A \n"
+ "\302\240\n"
  "-\t\tif (!sc->may_unmap && page_mapped(page))\n"
  "-\t\t\tgoto keep_locked;\n"
  "+\t\tif (!sc->may_unmap && page_mapped(page)) {\n"
  "+\t\t\tpg_dispose = PG_KEEP_LOCKED;\n"
  "+\t\t\tgoto finish;\n"
  "+\t\t}\n"
- "A \n"
- "A \t\t/* Double the slab pressure for mapped and swapcache pages */\n"
- "A \t\tif (page_mapped(page) || PageSwapCache(page))\n"
+ "\302\240\n"
+ "\302\240\t\t/* Double the slab pressure for mapped and swapcache pages */\n"
+ "\302\240\t\tif (page_mapped(page) || PageSwapCache(page))\n"
  "@@ -998,7 +1215,8 @@ static unsigned long shrink_page_list(struct list_head *page_list,\n"
- "A \t\t\tA A A A PageReclaim(page) &&\n"
- "A \t\t\tA A A A test_bit(ZONE_WRITEBACK, &zone->flags)) {\n"
- "A \t\t\t\tnr_immediate++;\n"
+ "\302\240\t\t\t\302\240\302\240\302\240\302\240PageReclaim(page) &&\n"
+ "\302\240\t\t\t\302\240\302\240\302\240\302\240test_bit(ZONE_WRITEBACK, &zone->flags)) {\n"
+ "\302\240\t\t\t\tnr_immediate++;\n"
  "-\t\t\t\tgoto keep_locked;\n"
  "+\t\t\t\tpg_dispose = PG_KEEP_LOCKED;\n"
  "+\t\t\t\tgoto finish;\n"
- "A \n"
- "A \t\t\t/* Case 2 above */\n"
- "A \t\t\t} else if (sane_reclaim(sc) ||\n"
+ "\302\240\n"
+ "\302\240\t\t\t/* Case 2 above */\n"
+ "\302\240\t\t\t} else if (sane_reclaim(sc) ||\n"
  "@@ -1016,7 +1234,8 @@ static unsigned long shrink_page_list(struct list_head *page_list,\n"
- "A \t\t\t\tA */\n"
- "A \t\t\t\tSetPageReclaim(page);\n"
- "A \t\t\t\tnr_writeback++;\n"
+ "\302\240\t\t\t\t\302\240*/\n"
+ "\302\240\t\t\t\tSetPageReclaim(page);\n"
+ "\302\240\t\t\t\tnr_writeback++;\n"
  "-\t\t\t\tgoto keep_locked;\n"
  "+\t\t\t\tpg_dispose = PG_KEEP_LOCKED;\n"
  "+\t\t\t\tgoto finish;\n"
- "A \n"
- "A \t\t\t/* Case 3 above */\n"
- "A \t\t\t} else {\n"
+ "\302\240\n"
+ "\302\240\t\t\t/* Case 3 above */\n"
+ "\302\240\t\t\t} else {\n"
  "@@ -1033,9 +1252,11 @@ static unsigned long shrink_page_list(struct list_head *page_list,\n"
- "A \n"
- "A \t\tswitch (references) {\n"
- "A \t\tcase PAGEREF_ACTIVATE:\n"
+ "\302\240\n"
+ "\302\240\t\tswitch (references) {\n"
+ "\302\240\t\tcase PAGEREF_ACTIVATE:\n"
  "-\t\t\tgoto activate_locked;\n"
  "+\t\t\tpg_dispose = PG_ACTIVATE_LOCKED;\n"
  "+\t\t\tgoto finish;\n"
- "A \t\tcase PAGEREF_KEEP:\n"
+ "\302\240\t\tcase PAGEREF_KEEP:\n"
  "-\t\t\tgoto keep_locked;\n"
  "+\t\t\tpg_dispose = PG_KEEP_LOCKED;\n"
  "+\t\t\tgoto finish;\n"
- "A \t\tcase PAGEREF_RECLAIM:\n"
- "A \t\tcase PAGEREF_RECLAIM_CLEAN:\n"
- "A \t\t\t; /* try to reclaim the page below */\n"
+ "\302\240\t\tcase PAGEREF_RECLAIM:\n"
+ "\302\240\t\tcase PAGEREF_RECLAIM_CLEAN:\n"
+ "\302\240\t\t\t; /* try to reclaim the page below */\n"
  "@@ -1046,183 +1267,25 @@ static unsigned long shrink_page_list(struct list_head *page_list,\n"
- "A \t\tA * Try to allocate it some swap space here.\n"
- "A \t\tA */\n"
- "A \t\tif (PageAnon(page) && !PageSwapCache(page)) {\n"
+ "\302\240\t\t\302\240* Try to allocate it some swap space here.\n"
+ "\302\240\t\t\302\240*/\n"
+ "\302\240\t\tif (PageAnon(page) && !PageSwapCache(page)) {\n"
  "-\t\t\tif (!(sc->gfp_mask & __GFP_IO))\n"
  "-\t\t\t\tgoto keep_locked;\n"
  "-\t\t\tif (!add_to_swap(page, page_list))\n"
@@ -356,9 +356,9 @@
  "-\t\t}\n"
  "-\n"
  "-\t\t/*\n"
- "-\t\tA * The page is mapped into the page tables of one or more\n"
- "-\t\tA * processes. Try to unmap it here.\n"
- "-\t\tA */\n"
+ "-\t\t\302\240* The page is mapped into the page tables of one or more\n"
+ "-\t\t\302\240* processes. Try to unmap it here.\n"
+ "-\t\t\302\240*/\n"
  "-\t\tif (page_mapped(page) && mapping) {\n"
  "-\t\t\tswitch (ret = try_to_unmap(page, lazyfree ?\n"
  "-\t\t\t\t(ttu_flags | TTU_BATCH_FLUSH | TTU_LZFREE) :\n"
@@ -376,24 +376,24 @@
  "+\t\t\tif (!(sc->gfp_mask & __GFP_IO)) {\n"
  "+\t\t\t\tpg_dispose = PG_KEEP_LOCKED;\n"
  "+\t\t\t\tgoto finish;\n"
- "A \t\t\t}\n"
+ "\302\240\t\t\t}\n"
  "-\t\t}\n"
  "-\n"
  "-\t\tif (PageDirty(page)) {\n"
  "-\t\t\t/*\n"
- "-\t\t\tA * Only kswapd can writeback filesystem pages to\n"
- "-\t\t\tA * avoid risk of stack overflow but only writeback\n"
- "-\t\t\tA * if many dirty pages have been encountered.\n"
- "-\t\t\tA */\n"
+ "-\t\t\t\302\240* Only kswapd can writeback filesystem pages to\n"
+ "-\t\t\t\302\240* avoid risk of stack overflow but only writeback\n"
+ "-\t\t\t\302\240* if many dirty pages have been encountered.\n"
+ "-\t\t\t\302\240*/\n"
  "-\t\t\tif (page_is_file_cache(page) &&\n"
  "-\t\t\t\t\t(!current_is_kswapd() ||\n"
- "-\t\t\t\t\tA !test_bit(ZONE_DIRTY, &zone->flags))) {\n"
+ "-\t\t\t\t\t\302\240!test_bit(ZONE_DIRTY, &zone->flags))) {\n"
  "-\t\t\t\t/*\n"
- "-\t\t\t\tA * Immediately reclaim when written back.\n"
- "-\t\t\t\tA * Similar in principal to deactivate_page()\n"
- "-\t\t\t\tA * except we already have the page isolated\n"
- "-\t\t\t\tA * and know it's dirty\n"
- "-\t\t\t\tA */\n"
+ "-\t\t\t\t\302\240* Immediately reclaim when written back.\n"
+ "-\t\t\t\t\302\240* Similar in principal to deactivate_page()\n"
+ "-\t\t\t\t\302\240* except we already have the page isolated\n"
+ "-\t\t\t\t\302\240* and know it's dirty\n"
+ "-\t\t\t\t\302\240*/\n"
  "-\t\t\t\tinc_zone_page_state(page, NR_VMSCAN_IMMEDIATE);\n"
  "-\t\t\t\tSetPageReclaim(page);\n"
  "-\n"
@@ -408,10 +408,10 @@
  "-\t\t\t\tgoto keep_locked;\n"
  "-\n"
  "-\t\t\t/*\n"
- "-\t\t\tA * Page is dirty. Flush the TLB if a writable entry\n"
- "-\t\t\tA * potentially exists to avoid CPU writes after IO\n"
- "-\t\t\tA * starts and then write it out here.\n"
- "-\t\t\tA */\n"
+ "-\t\t\t\302\240* Page is dirty. Flush the TLB if a writable entry\n"
+ "-\t\t\t\302\240* potentially exists to avoid CPU writes after IO\n"
+ "-\t\t\t\302\240* starts and then write it out here.\n"
+ "-\t\t\t\302\240*/\n"
  "-\t\t\ttry_to_unmap_flush_dirty();\n"
  "-\t\t\tswitch (pageout(page, mapping, sc)) {\n"
  "-\t\t\tcase PAGE_KEEP:\n"
@@ -425,9 +425,9 @@
  "-\t\t\t\t\tgoto keep;\n"
  "-\n"
  "-\t\t\t\t/*\n"
- "-\t\t\t\tA * A synchronous write - probably a ramdisk.A A Go\n"
- "-\t\t\t\tA * ahead and try to reclaim the page.\n"
- "-\t\t\t\tA */\n"
+ "-\t\t\t\t\302\240* A synchronous write - probably a ramdisk.\302\240\302\240Go\n"
+ "-\t\t\t\t\302\240* ahead and try to reclaim the page.\n"
+ "-\t\t\t\t\302\240*/\n"
  "-\t\t\t\tif (!trylock_page(page))\n"
  "-\t\t\t\t\tgoto keep;\n"
  "-\t\t\t\tif (PageDirty(page) || PageWriteback(page))\n"
@@ -439,26 +439,26 @@
  "-\t\t}\n"
  "-\n"
  "-\t\t/*\n"
- "-\t\tA * If the page has buffers, try to free the buffer mappings\n"
- "-\t\tA * associated with this page. If we succeed we try to free\n"
- "-\t\tA * the page as well.\n"
- "-\t\tA *\n"
- "-\t\tA * We do this even if the page is PageDirty().\n"
- "-\t\tA * try_to_release_page() does not perform I/O, but it is\n"
- "-\t\tA * possible for a page to have PageDirty set, but it is actually\n"
- "-\t\tA * clean (all its buffers are clean).A A This happens if the\n"
- "-\t\tA * buffers were written out directly, with submit_bh(). ext3\n"
- "-\t\tA * will do this, as well as the blockdev mapping.\n"
- "-\t\tA * try_to_release_page() will discover that cleanness and will\n"
- "-\t\tA * drop the buffers and mark the page clean - it can be freed.\n"
- "-\t\tA *\n"
- "-\t\tA * Rarely, pages can have buffers and no ->mapping.A A These are\n"
- "-\t\tA * the pages which were not successfully invalidated in\n"
- "-\t\tA * truncate_complete_page().A A We try to drop those buffers here\n"
- "-\t\tA * and if that worked, and the page is no longer mapped into\n"
- "-\t\tA * process address space (page_count == 1) it can be freed.\n"
- "-\t\tA * Otherwise, leave the page on the LRU so it is swappable.\n"
- "-\t\tA */\n"
+ "-\t\t\302\240* If the page has buffers, try to free the buffer mappings\n"
+ "-\t\t\302\240* associated with this page. If we succeed we try to free\n"
+ "-\t\t\302\240* the page as well.\n"
+ "-\t\t\302\240*\n"
+ "-\t\t\302\240* We do this even if the page is PageDirty().\n"
+ "-\t\t\302\240* try_to_release_page() does not perform I/O, but it is\n"
+ "-\t\t\302\240* possible for a page to have PageDirty set, but it is actually\n"
+ "-\t\t\302\240* clean (all its buffers are clean).\302\240\302\240This happens if the\n"
+ "-\t\t\302\240* buffers were written out directly, with submit_bh(). ext3\n"
+ "-\t\t\302\240* will do this, as well as the blockdev mapping.\n"
+ "-\t\t\302\240* try_to_release_page() will discover that cleanness and will\n"
+ "-\t\t\302\240* drop the buffers and mark the page clean - it can be freed.\n"
+ "-\t\t\302\240*\n"
+ "-\t\t\302\240* Rarely, pages can have buffers and no ->mapping.\302\240\302\240These are\n"
+ "-\t\t\302\240* the pages which were not successfully invalidated in\n"
+ "-\t\t\302\240* truncate_complete_page().\302\240\302\240We try to drop those buffers here\n"
+ "-\t\t\302\240* and if that worked, and the page is no longer mapped into\n"
+ "-\t\t\302\240* process address space (page_count == 1) it can be freed.\n"
+ "-\t\t\302\240* Otherwise, leave the page on the LRU so it is swappable.\n"
+ "-\t\t\302\240*/\n"
  "-\t\tif (page_has_private(page)) {\n"
  "-\t\t\tif (!try_to_release_page(page, sc->gfp_mask))\n"
  "-\t\t\t\tgoto activate_locked;\n"
@@ -468,34 +468,34 @@
  "-\t\t\t\t\tgoto free_it;\n"
  "-\t\t\t\telse {\n"
  "-\t\t\t\t\t/*\n"
- "-\t\t\t\t\tA * rare race with speculative reference.\n"
- "-\t\t\t\t\tA * the speculative reference will free\n"
- "-\t\t\t\t\tA * this page shortly, so we may\n"
- "-\t\t\t\t\tA * increment nr_reclaimed here (and\n"
- "-\t\t\t\t\tA * leave it off the LRU).\n"
- "-\t\t\t\t\tA */\n"
+ "-\t\t\t\t\t\302\240* rare race with speculative reference.\n"
+ "-\t\t\t\t\t\302\240* the speculative reference will free\n"
+ "-\t\t\t\t\t\302\240* this page shortly, so we may\n"
+ "-\t\t\t\t\t\302\240* increment nr_reclaimed here (and\n"
+ "-\t\t\t\t\t\302\240* leave it off the LRU).\n"
+ "-\t\t\t\t\t\302\240*/\n"
  "-\t\t\t\t\tnr_reclaimed++;\n"
  "-\t\t\t\t\tcontinue;\n"
  "-\t\t\t\t}\n"
  "+\t\t\tif (!add_to_swap(page, page_list)) {\n"
  "+\t\t\t\tpg_dispose = PG_ACTIVATE_LOCKED;\n"
  "+\t\t\t\tgoto finish;\n"
- "A \t\t\t}\n"
+ "\302\240\t\t\t}\n"
  "+\t\t\tlazyfree = true;\n"
  "+\t\t\tmay_enter_fs = 1;\n"
- "A \t\t}\n"
- "A \n"
+ "\302\240\t\t}\n"
+ "\302\240\n"
  "-lazyfree:\n"
  "-\t\tif (!mapping || !__remove_mapping(mapping, page, true))\n"
  "-\t\t\tgoto keep_locked;\n"
  "-\n"
  "-\t\t/*\n"
- "-\t\tA * At this point, we have no other references and there is\n"
- "-\t\tA * no way to pick any more up (removed from LRU, removed\n"
- "-\t\tA * from pagecache). Can use non-atomic bitops now (and\n"
- "-\t\tA * we obviously don't have to worry about waking up a process\n"
- "-\t\tA * waiting on the page lock, because there are no references.\n"
- "-\t\tA */\n"
+ "-\t\t\302\240* At this point, we have no other references and there is\n"
+ "-\t\t\302\240* no way to pick any more up (removed from LRU, removed\n"
+ "-\t\t\302\240* from pagecache). Can use non-atomic bitops now (and\n"
+ "-\t\t\302\240* we obviously don't have to worry about waking up a process\n"
+ "-\t\t\302\240* waiting on the page lock, because there are no references.\n"
+ "-\t\t\302\240*/\n"
  "-\t\t__ClearPageLocked(page);\n"
  "-free_it:\n"
  "-\t\tif (ret == SWAP_LZFREE)\n"
@@ -508,11 +508,11 @@
  "+finish:\n"
  "+\t\tpg_finish(page, pg_dispose, swap_ret, &nr_reclaimed,\n"
  "+\t\t\t\t&pgactivate, &ret_pages, &free_pages);\n"
- "A \n"
+ "\302\240\n"
  "-\t\t/*\n"
- "-\t\tA * Is there need to periodically free_page_list? It would\n"
- "-\t\tA * appear not as the counts should be low\n"
- "-\t\tA */\n"
+ "-\t\t\302\240* Is there need to periodically free_page_list? It would\n"
+ "-\t\t\302\240* appear not as the counts should be low\n"
+ "-\t\t\302\240*/\n"
  "-\t\tlist_add(&page->lru, &free_pages);\n"
  "-\t\tcontinue;\n"
  "-\n"
@@ -535,16 +535,10 @@
  "-keep:\n"
  "-\t\tlist_add(&page->lru, &ret_pages);\n"
  "-\t\tVM_BUG_ON_PAGE(PageLRU(page) || PageUnevictable(page), page);\n"
- "A \t}\n"
- "A \n"
- "A \tmem_cgroup_uncharge_list(&free_pages);\n"
- "--A \n"
- "2.5.5\n"
- "\n"
- "--\n"
- "To unsubscribe, send a message with 'unsubscribe linux-mm' in\n"
- "the body to majordomo@kvack.org.  For more info on Linux MM,\n"
- "see: http://www.linux-mm.org/ .\n"
- "Don't email: <a href=mailto:\"dont@kvack.org\"> email@kvack.org </a>"
+ "\302\240\t}\n"
+ "\302\240\n"
+ "\302\240\tmem_cgroup_uncharge_list(&free_pages);\n"
+ "--\302\240\n"
+ 2.5.5
 
-37543f4071cb0cf26c80ed97cefd5674405c16d58d8f7c2b36fe7222ff4761d1
+dc2b394648f4fb6a5d53a0f9a0bd00f1240fd45c2bf3e03d871112dc322a0649

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.