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

diff --git a/a/1.txt b/N1/1.txt
index 929c42b..7c6ac4a 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -9,45 +9,45 @@ multiple pages.
 
 Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
 ---
-A mm/vmscan.c | 338 +++++++++++++++++++++++++++++++++++-------------------------
-A 1 file changed, 196 insertions(+), 142 deletions(-)
+ mm/vmscan.c | 338 +++++++++++++++++++++++++++++++++++-------------------------
+ 1 file changed, 196 insertions(+), 142 deletions(-)
 
 diff --git a/mm/vmscan.c b/mm/vmscan.c
 index fab61f1..9fc04e1 100644
 --- a/mm/vmscan.c
 +++ b/mm/vmscan.c
 @@ -884,154 +884,218 @@ enum pg_result {
-A 	PG_UNKNOWN,
-A };
-A 
+ 	PG_UNKNOWN,
+ };
+ 
 -static enum pg_result handle_pgout(struct list_head *page_list,
 +static void handle_pgout_batch(struct list_head *page_list,
-A 	struct zone *zone,
-A 	struct scan_control *sc,
-A 	enum ttu_flags ttu_flags,
-A 	enum page_references references,
-A 	bool may_enter_fs,
-A 	bool lazyfree,
--	intA A *swap_ret,
+ 	struct zone *zone,
+ 	struct scan_control *sc,
+ 	enum ttu_flags ttu_flags,
+ 	enum page_references references,
+ 	bool may_enter_fs,
+ 	bool lazyfree,
+-	int  *swap_ret,
 -	struct page *page)
 +	struct page *pages[],
-+	intA A swap_ret[],
++	int  swap_ret[],
 +	int ret[],
 +	int nr)
-A {
-A 	struct address_space *mapping;
+ {
+ 	struct address_space *mapping;
 +	struct page *page;
 +	int i;
-A 
--	mapping =A A page_mapping(page);
+ 
+-	mapping =  page_mapping(page);
 +	for (i = 0; i < nr; ++i) {
 +		page = pages[i];
-+		mapping =A A page_mapping(page);
-A 
++		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) :
@@ -66,20 +66,20 @@ A
 +		if (!ret[i]) {
 +			ret[i] = PG_ACTIVATE_LOCKED;
 +			continue;
-A 		}
+ 		}
 -	}
 -
 -	if (PageDirty(page)) {
-A 		/*
--		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 * The page is mapped into the page tables of one or more
-+		A * processes. Try to unmap it here.
-A 		A */
+ 		/*
+-		 * Only kswapd can writeback filesystem pages to
+-		 * avoid risk of stack overflow but only writeback
+-		 * if many dirty pages have been encountered.
++		 * The page is mapped into the page tables of one or more
++		 * processes. Try to unmap it here.
+ 		 */
 -		if (page_is_file_cache(page) &&
 -				(!current_is_kswapd() ||
--				A !test_bit(ZONE_DIRTY, &zone->flags))) {
+-				 !test_bit(ZONE_DIRTY, &zone->flags))) {
 +		if (page_mapped(page) && mapping) {
 +			switch (swap_ret[i] = try_to_unmap(page, lazyfree ?
 +				(ttu_flags | TTU_BATCH_FLUSH | TTU_LZFREE) :
@@ -101,15 +101,15 @@ A 		A */
 +		}
 +
 +		if (PageDirty(page)) {
-A 			/*
--			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 * 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 			A */
+ 			/*
+-			 * Immediately reclaim when written back.
+-			 * Similar in principal to deactivate_page()
+-			 * except we already have the page isolated
+-			 * and know it's dirty
++			 * Only kswapd can writeback filesystem pages to
++			 * avoid risk of stack overflow but only writeback
++			 * if many dirty pages have been encountered.
+ 			 */
 -			inc_zone_page_state(page, NR_VMSCAN_IMMEDIATE);
 -			SetPageReclaim(page);
 -
@@ -117,16 +117,16 @@ A 			A */
 -		}
 +			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);
-A 
 -		if (references == PAGEREF_RECLAIM_CLEAN)
 -			return PG_KEEP_LOCKED;
 -		if (!may_enter_fs)
@@ -136,12 +136,12 @@ A
 +				ret[i] = PG_KEEP_LOCKED;
 +				continue;
 +			}
-A 
 -		/*
--		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:
@@ -165,14 +165,14 @@ A
 +				ret[i] = PG_KEEP_LOCKED;
 +				continue;
 +			}
-A 
-A 			/*
--			A * A synchronous write - probably a ramdisk.A A Go
--			A * ahead and try to reclaim the page.
-+			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 			A */
+ 
+ 			/*
+-			 * A synchronous write - probably a ramdisk.  Go
+-			 * ahead and try to reclaim the page.
++			 * 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.
+ 			 */
 -			if (!trylock_page(page))
 -				return PG_KEEP;
 -			if (PageDirty(page) || PageWriteback(page))
@@ -199,28 +199,28 @@ A 			A */
 +					ret[i] = PG_KEEP;
 +					continue;
 +				}
-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;
@@ -229,15 +229,15 @@ A
 -			if (put_page_testzero(page))
 -				return PG_FREE;
 -			else {
-A 				/*
--				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 * A synchronous write - probably a ramdisk.A A Go
-+				A * ahead and try to reclaim the page.
-A 				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).
++				 * A synchronous write - probably a ramdisk.  Go
++				 * ahead and try to reclaim the page.
+ 				 */
 -				return PG_SPECULATIVE_REF;
 +				if (!trylock_page(page)) {
 +					ret[i] = PG_KEEP;
@@ -250,31 +250,31 @@ A 				A */
 +				mapping = page_mapping(page);
 +			case PAGE_CLEAN:
 +				; /* try to free the page below */
-A 			}
-A 		}
+ 			}
+ 		}
 -	}
-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)) {
 +				ret[i] = PG_ACTIVATE_LOCKED;
@@ -287,18 +287,18 @@ A
 +					continue;
 +				} 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).
++					 */
 +					ret[i] = PG_SPECULATIVE_REF;
 +					continue;
 +				}
 +			}
 +		}
-A lazyfree:
+ lazyfree:
 -	if (!mapping || !__remove_mapping(mapping, page, true))
 -		return PG_KEEP_LOCKED;
 +		if (!mapping || !__remove_mapping(mapping, page, true)) {
@@ -307,12 +307,12 @@ A lazyfree:
 +		}
 +
 +		/*
-+		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);
 +		ret[i] = PG_FREE;
 +	}
@@ -325,7 +325,7 @@ A lazyfree:
 +	enum page_references references,
 +	bool may_enter_fs,
 +	bool lazyfree,
-+	intA A *swap_ret,
++	int  *swap_ret,
 +	struct page *page)
 +{
 +	struct page *pages[1];
@@ -333,16 +333,16 @@ A lazyfree:
 +	int sret[1];
 +
 +	pages[0] = page;
-A 
-A 	/*
--	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 * page is in swap cache or page cache, indicate that
-+	A * by setting ret[0] to 1
-A 	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.
++	 * page is in swap cache or page cache, indicate that
++	 * by setting ret[0] to 1
+ 	 */
 -	__ClearPageLocked(page);
 -	return PG_FREE;
 +	ret[0] = 1;
@@ -350,29 +350,29 @@ A 	A */
 +		may_enter_fs, lazyfree, pages, sret, ret, 1);
 +	*swap_ret = sret[0];
 +	return ret[0];
-A }
-A 
-A static void pg_finish(struct page *page,
+ }
+ 
+ static void pg_finish(struct page *page,
 @@ -1095,14 +1159,13 @@ static unsigned long shrink_anon_page_list(struct list_head *page_list,
-A 	bool clean)
-A {
-A 	unsigned long nr_reclaimed = 0;
+ 	bool clean)
+ {
+ 	unsigned long nr_reclaimed = 0;
 -	enum pg_result pg_dispose;
-A 	swp_entry_t swp_entries[SWAP_BATCH];
-A 	struct page *pages[SWAP_BATCH];
-A 	int m, i, k, ret[SWAP_BATCH];
-A 	struct page *page;
-A 
-A 	while (n > 0) {
+ 	swp_entry_t swp_entries[SWAP_BATCH];
+ 	struct page *pages[SWAP_BATCH];
+ 	int m, i, k, ret[SWAP_BATCH];
+ 	struct page *page;
+ 
+ 	while (n > 0) {
 -		int swap_ret = SWAP_SUCCESS;
 +		int swap_ret[SWAP_BATCH];
-A 
-A 		m = get_swap_pages(n, swp_entries);
-A 		if (!m)
+ 
+ 		m = get_swap_pages(n, swp_entries);
+ 		if (!m)
 @@ -1127,28 +1190,19 @@ static unsigned long shrink_anon_page_list(struct list_head *page_list,
-A 		*/
-A 		add_to_swap_batch(pages, page_list, swp_entries, ret, m);
-A 
+ 		*/
+ 		add_to_swap_batch(pages, page_list, swp_entries, ret, m);
+ 
 -		for (i = 0; i < m; ++i) {
 -			page = pages[i];
 -
@@ -408,14 +408,8 @@ A
 +			pg_finish(pages[i], ret[i], swap_ret[i],
 +					&nr_reclaimed, pgactivate,
 +					ret_pages, free_pages);
-A 	}
-A 	return nr_reclaimed;
-A 
---A 
+ 	}
+ 	return nr_reclaimed;
+ 
+-- 
 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 b38de50..80ec1af 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -27,45 +27,45 @@
  "\n"
  "Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>\n"
  "---\n"
- "A mm/vmscan.c | 338 +++++++++++++++++++++++++++++++++++-------------------------\n"
- "A 1 file changed, 196 insertions(+), 142 deletions(-)\n"
+ "\302\240mm/vmscan.c | 338 +++++++++++++++++++++++++++++++++++-------------------------\n"
+ "\302\2401 file changed, 196 insertions(+), 142 deletions(-)\n"
  "\n"
  "diff --git a/mm/vmscan.c b/mm/vmscan.c\n"
  "index fab61f1..9fc04e1 100644\n"
  "--- a/mm/vmscan.c\n"
  "+++ b/mm/vmscan.c\n"
  "@@ -884,154 +884,218 @@ enum pg_result {\n"
- "A \tPG_UNKNOWN,\n"
- "A };\n"
- "A \n"
+ "\302\240\tPG_UNKNOWN,\n"
+ "\302\240};\n"
+ "\302\240\n"
  "-static enum pg_result handle_pgout(struct list_head *page_list,\n"
  "+static void handle_pgout_batch(struct list_head *page_list,\n"
- "A \tstruct zone *zone,\n"
- "A \tstruct scan_control *sc,\n"
- "A \tenum ttu_flags ttu_flags,\n"
- "A \tenum page_references references,\n"
- "A \tbool may_enter_fs,\n"
- "A \tbool lazyfree,\n"
- "-\tintA A *swap_ret,\n"
+ "\302\240\tstruct zone *zone,\n"
+ "\302\240\tstruct scan_control *sc,\n"
+ "\302\240\tenum ttu_flags ttu_flags,\n"
+ "\302\240\tenum page_references references,\n"
+ "\302\240\tbool may_enter_fs,\n"
+ "\302\240\tbool lazyfree,\n"
+ "-\tint\302\240\302\240*swap_ret,\n"
  "-\tstruct page *page)\n"
  "+\tstruct page *pages[],\n"
- "+\tintA A swap_ret[],\n"
+ "+\tint\302\240\302\240swap_ret[],\n"
  "+\tint ret[],\n"
  "+\tint nr)\n"
- "A {\n"
- "A \tstruct address_space *mapping;\n"
+ "\302\240{\n"
+ "\302\240\tstruct address_space *mapping;\n"
  "+\tstruct page *page;\n"
  "+\tint i;\n"
- "A \n"
- "-\tmapping =A A page_mapping(page);\n"
+ "\302\240\n"
+ "-\tmapping =\302\240\302\240page_mapping(page);\n"
  "+\tfor (i = 0; i < nr; ++i) {\n"
  "+\t\tpage = pages[i];\n"
- "+\t\tmapping =A A page_mapping(page);\n"
- "A \n"
+ "+\t\tmapping =\302\240\302\240page_mapping(page);\n"
+ "\302\240\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"
@@ -84,20 +84,20 @@
  "+\t\tif (!ret[i]) {\n"
  "+\t\t\tret[i] = PG_ACTIVATE_LOCKED;\n"
  "+\t\t\tcontinue;\n"
- "A \t\t}\n"
+ "\302\240\t\t}\n"
  "-\t}\n"
  "-\n"
  "-\tif (PageDirty(page)) {\n"
- "A \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 * The page is mapped into the page tables of one or more\n"
- "+\t\tA * processes. Try to unmap it here.\n"
- "A \t\tA */\n"
+ "\302\240\t\t/*\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* The page is mapped into the page tables of one or more\n"
+ "+\t\t\302\240* processes. Try to unmap it here.\n"
+ "\302\240\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\tif (page_mapped(page) && mapping) {\n"
  "+\t\t\tswitch (swap_ret[i] = try_to_unmap(page, lazyfree ?\n"
  "+\t\t\t\t(ttu_flags | TTU_BATCH_FLUSH | TTU_LZFREE) :\n"
@@ -119,15 +119,15 @@
  "+\t\t}\n"
  "+\n"
  "+\t\tif (PageDirty(page)) {\n"
- "A \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 * 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"
- "A \t\t\tA */\n"
+ "\302\240\t\t\t/*\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* 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"
+ "\302\240\t\t\t\302\240*/\n"
  "-\t\t\tinc_zone_page_state(page, NR_VMSCAN_IMMEDIATE);\n"
  "-\t\t\tSetPageReclaim(page);\n"
  "-\n"
@@ -135,16 +135,16 @@
  "-\t\t}\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"
- "A \n"
+ "\302\240\n"
  "-\t\tif (references == PAGEREF_RECLAIM_CLEAN)\n"
  "-\t\t\treturn PG_KEEP_LOCKED;\n"
  "-\t\tif (!may_enter_fs)\n"
@@ -154,12 +154,12 @@
  "+\t\t\t\tret[i] = PG_KEEP_LOCKED;\n"
  "+\t\t\t\tcontinue;\n"
  "+\t\t\t}\n"
- "A \n"
+ "\302\240\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"
@@ -183,14 +183,14 @@
  "+\t\t\t\tret[i] = PG_KEEP_LOCKED;\n"
  "+\t\t\t\tcontinue;\n"
  "+\t\t\t}\n"
- "A \n"
- "A \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 * 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"
- "A \t\t\tA */\n"
+ "\302\240\n"
+ "\302\240\t\t\t/*\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* 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"
+ "\302\240\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"
@@ -217,28 +217,28 @@
  "+\t\t\t\t\tret[i] = PG_KEEP;\n"
  "+\t\t\t\t\tcontinue;\n"
  "+\t\t\t\t}\n"
- "A \n"
+ "\302\240\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"
@@ -247,15 +247,15 @@
  "-\t\t\tif (put_page_testzero(page))\n"
  "-\t\t\t\treturn PG_FREE;\n"
  "-\t\t\telse {\n"
- "A \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 * A synchronous write - probably a ramdisk.A A Go\n"
- "+\t\t\t\tA * ahead and try to reclaim the page.\n"
- "A \t\t\t\tA */\n"
+ "\302\240\t\t\t\t/*\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* 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"
+ "\302\240\t\t\t\t\302\240*/\n"
  "-\t\t\t\treturn PG_SPECULATIVE_REF;\n"
  "+\t\t\t\tif (!trylock_page(page)) {\n"
  "+\t\t\t\t\tret[i] = PG_KEEP;\n"
@@ -268,31 +268,31 @@
  "+\t\t\t\tmapping = page_mapping(page);\n"
  "+\t\t\tcase PAGE_CLEAN:\n"
  "+\t\t\t\t; /* try to free the page below */\n"
- "A \t\t\t}\n"
- "A \t\t}\n"
+ "\302\240\t\t\t}\n"
+ "\302\240\t\t}\n"
  "-\t}\n"
- "A \n"
+ "\302\240\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\tret[i] = PG_ACTIVATE_LOCKED;\n"
@@ -305,18 +305,18 @@
  "+\t\t\t\t\tcontinue;\n"
  "+\t\t\t\t} else {\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 (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 (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\tret[i] = PG_SPECULATIVE_REF;\n"
  "+\t\t\t\t\tcontinue;\n"
  "+\t\t\t\t}\n"
  "+\t\t\t}\n"
  "+\t\t}\n"
- "A lazyfree:\n"
+ "\302\240lazyfree:\n"
  "-\tif (!mapping || !__remove_mapping(mapping, page, true))\n"
  "-\t\treturn PG_KEEP_LOCKED;\n"
  "+\t\tif (!mapping || !__remove_mapping(mapping, page, true)) {\n"
@@ -325,12 +325,12 @@
  "+\t\t}\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"
  "+\t\tret[i] = PG_FREE;\n"
  "+\t}\n"
@@ -343,7 +343,7 @@
  "+\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 page *pages[1];\n"
@@ -351,16 +351,16 @@
  "+\tint sret[1];\n"
  "+\n"
  "+\tpages[0] = page;\n"
- "A \n"
- "A \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 * page is in swap cache or page cache, indicate that\n"
- "+\tA * by setting ret[0] to 1\n"
- "A \tA */\n"
+ "\302\240\n"
+ "\302\240\t/*\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* page is in swap cache or page cache, indicate that\n"
+ "+\t\302\240* by setting ret[0] to 1\n"
+ "\302\240\t\302\240*/\n"
  "-\t__ClearPageLocked(page);\n"
  "-\treturn PG_FREE;\n"
  "+\tret[0] = 1;\n"
@@ -368,29 +368,29 @@
  "+\t\tmay_enter_fs, lazyfree, pages, sret, ret, 1);\n"
  "+\t*swap_ret = sret[0];\n"
  "+\treturn ret[0];\n"
- "A }\n"
- "A \n"
- "A static void pg_finish(struct page *page,\n"
+ "\302\240}\n"
+ "\302\240\n"
+ "\302\240static void pg_finish(struct page *page,\n"
  "@@ -1095,14 +1159,13 @@ static unsigned long shrink_anon_page_list(struct list_head *page_list,\n"
- "A \tbool clean)\n"
- "A {\n"
- "A \tunsigned long nr_reclaimed = 0;\n"
+ "\302\240\tbool clean)\n"
+ "\302\240{\n"
+ "\302\240\tunsigned long nr_reclaimed = 0;\n"
  "-\tenum pg_result pg_dispose;\n"
- "A \tswp_entry_t swp_entries[SWAP_BATCH];\n"
- "A \tstruct page *pages[SWAP_BATCH];\n"
- "A \tint m, i, k, ret[SWAP_BATCH];\n"
- "A \tstruct page *page;\n"
- "A \n"
- "A \twhile (n > 0) {\n"
+ "\302\240\tswp_entry_t swp_entries[SWAP_BATCH];\n"
+ "\302\240\tstruct page *pages[SWAP_BATCH];\n"
+ "\302\240\tint m, i, k, ret[SWAP_BATCH];\n"
+ "\302\240\tstruct page *page;\n"
+ "\302\240\n"
+ "\302\240\twhile (n > 0) {\n"
  "-\t\tint swap_ret = SWAP_SUCCESS;\n"
  "+\t\tint swap_ret[SWAP_BATCH];\n"
- "A \n"
- "A \t\tm = get_swap_pages(n, swp_entries);\n"
- "A \t\tif (!m)\n"
+ "\302\240\n"
+ "\302\240\t\tm = get_swap_pages(n, swp_entries);\n"
+ "\302\240\t\tif (!m)\n"
  "@@ -1127,28 +1190,19 @@ static unsigned long shrink_anon_page_list(struct list_head *page_list,\n"
- "A \t\t*/\n"
- "A \t\tadd_to_swap_batch(pages, page_list, swp_entries, ret, m);\n"
- "A \n"
+ "\302\240\t\t*/\n"
+ "\302\240\t\tadd_to_swap_batch(pages, page_list, swp_entries, ret, m);\n"
+ "\302\240\n"
  "-\t\tfor (i = 0; i < m; ++i) {\n"
  "-\t\t\tpage = pages[i];\n"
  "-\n"
@@ -426,16 +426,10 @@
  "+\t\t\tpg_finish(pages[i], ret[i], swap_ret[i],\n"
  "+\t\t\t\t\t&nr_reclaimed, pgactivate,\n"
  "+\t\t\t\t\tret_pages, free_pages);\n"
- "A \t}\n"
- "A \treturn nr_reclaimed;\n"
- "A \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\treturn nr_reclaimed;\n"
+ "\302\240\n"
+ "--\302\240\n"
+ 2.5.5
 
-9f237f391fe1e39210fc2b629c653e4ef8a7757c74bf0fabda7bcafd5133f92c
+656498c2b938649b1707e4afdb139e54dbd2598a1eb2197ed8012741c9eec10c

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.