All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20090509065640.GA6487@localhost>

diff --git a/a/1.txt b/N1/1.txt
index e35bafb..bf434f6 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -7,22 +7,22 @@ On Fri, May 08, 2009 at 10:01:19PM +0800, Minchan Kim wrote:
 > >> >>
 > >> >> > > @@ -1269,8 +1270,15 @@ static void shrink_active_list(unsigned
 > >> >> > >
-> >> >> > >           /* page_referenced clears PageReferenced */
-> >> >> > >           if (page_mapping_inuse(page) &&
-> >> >> > > -             page_referenced(page, 0, sc->mem_cgroup))
-> >> >> > > +             page_referenced(page, 0, sc->mem_cgroup)) {
-> >> >> > > +                 struct address_space *mapping = page_mapping(page);
+> >> >> > > A  A  A  A  A  /* page_referenced clears PageReferenced */
+> >> >> > > A  A  A  A  A  if (page_mapping_inuse(page) &&
+> >> >> > > - A  A  A  A  A  A  page_referenced(page, 0, sc->mem_cgroup))
+> >> >> > > + A  A  A  A  A  A  page_referenced(page, 0, sc->mem_cgroup)) {
+> >> >> > > + A  A  A  A  A  A  A  A  struct address_space *mapping = page_mapping(page);
 > >> >> > > +
-> >> >> > >                   pgmoved++;
-> >> >> > > +                 if (mapping && test_bit(AS_EXEC, &mapping->flags)) {
-> >> >> > > +                         list_add(&page->lru, &l_active);
-> >> >> > > +                         continue;
-> >> >> > > +                 }
-> >> >> > > +         }
+> >> >> > > A  A  A  A  A  A  A  A  A  pgmoved++;
+> >> >> > > + A  A  A  A  A  A  A  A  if (mapping && test_bit(AS_EXEC, &mapping->flags)) {
+> >> >> > > + A  A  A  A  A  A  A  A  A  A  A  A  list_add(&page->lru, &l_active);
+> >> >> > > + A  A  A  A  A  A  A  A  A  A  A  A  continue;
+> >> >> > > + A  A  A  A  A  A  A  A  }
+> >> >> > > + A  A  A  A  }
 > >> >> >
 > >> >> > Since we walk the VMAs in page_referenced anyway, wouldn't it be
-> >> >> > better to check if one of them is executable?  This would even work
-> >> >> > for executable anon pages.  After all, there are applications that cow
+> >> >> > better to check if one of them is executable? A This would even work
+> >> >> > for executable anon pages. A After all, there are applications that cow
 > >> >> > executable mappings (sbcl and other language environments that use an
 > >> >> > executable, run-time modified core image come to mind).
 > >> >>
@@ -44,59 +44,59 @@ On Fri, May 08, 2009 at 10:01:19PM +0800, Minchan Kim wrote:
 > >> >
 > >> > Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
 > >> > ---
-> >> >  include/linux/rmap.h |    5 +++--
-> >> >  mm/rmap.c            |   30 +++++++++++++++++++++---------
-> >> >  mm/vmscan.c          |    7 +++++--
-> >> >  3 files changed, 29 insertions(+), 13 deletions(-)
+> >> > A include/linux/rmap.h | A  A 5 +++--
+> >> > A mm/rmap.c A  A  A  A  A  A | A  30 +++++++++++++++++++++---------
+> >> > A mm/vmscan.c A  A  A  A  A | A  A 7 +++++--
+> >> > A 3 files changed, 29 insertions(+), 13 deletions(-)
 > >> >
 > >> > --- linux.orig/include/linux/rmap.h
 > >> > +++ linux/include/linux/rmap.h
 > >> > @@ -83,7 +83,8 @@ static inline void page_dup_rmap(struct
-> >> >  /*
-> >> >  * Called from mm/vmscan.c to handle paging out
-> >> >  */
+> >> > A /*
+> >> > A * Called from mm/vmscan.c to handle paging out
+> >> > A */
 > >> > -int page_referenced(struct page *, int is_locked, struct mem_cgroup *cnt);
 > >> > +int page_referenced(struct page *, int is_locked,
-> >> > +                       struct mem_cgroup *cnt, unsigned long *vm_flags);
-> >> >  int try_to_unmap(struct page *, int ignore_refs);
+> >> > + A  A  A  A  A  A  A  A  A  A  A  struct mem_cgroup *cnt, unsigned long *vm_flags);
+> >> > A int try_to_unmap(struct page *, int ignore_refs);
 > >> >
-> >> >  /*
+> >> > A /*
 > >> > @@ -128,7 +129,7 @@ int page_wrprotect(struct page *page, in
-> >> >  #define anon_vma_prepare(vma)  (0)
-> >> >  #define anon_vma_link(vma)     do {} while (0)
+> >> > A #define anon_vma_prepare(vma) A (0)
+> >> > A #define anon_vma_link(vma) A  A  do {} while (0)
 > >> >
 > >> > -#define page_referenced(page,l,cnt) TestClearPageReferenced(page)
 > >> > +#define page_referenced(page, locked, cnt, flags) TestClearPageReferenced(page)
-> >> >  #define try_to_unmap(page, refs) SWAP_FAIL
+> >> > A #define try_to_unmap(page, refs) SWAP_FAIL
 > >> >
-> >> >  static inline int page_mkclean(struct page *page)
+> >> > A static inline int page_mkclean(struct page *page)
 > >> > --- linux.orig/mm/rmap.c
 > >> > +++ linux/mm/rmap.c
 > >> > @@ -333,7 +333,8 @@ static int page_mapped_in_vma(struct pag
-> >> >  * repeatedly from either page_referenced_anon or page_referenced_file.
-> >> >  */
-> >> >  static int page_referenced_one(struct page *page,
-> >> > -       struct vm_area_struct *vma, unsigned int *mapcount)
-> >> > +                              struct vm_area_struct *vma,
-> >> > +                              unsigned int *mapcount)
-> >> >  {
-> >> >        struct mm_struct *mm = vma->vm_mm;
-> >> >        unsigned long address;
+> >> > A * repeatedly from either page_referenced_anon or page_referenced_file.
+> >> > A */
+> >> > A static int page_referenced_one(struct page *page,
+> >> > - A  A  A  struct vm_area_struct *vma, unsigned int *mapcount)
+> >> > + A  A  A  A  A  A  A  A  A  A  A  A  A  A  A struct vm_area_struct *vma,
+> >> > + A  A  A  A  A  A  A  A  A  A  A  A  A  A  A unsigned int *mapcount)
+> >> > A {
+> >> > A  A  A  A struct mm_struct *mm = vma->vm_mm;
+> >> > A  A  A  A unsigned long address;
 > >> > @@ -385,7 +386,8 @@ out:
-> >> >  }
+> >> > A }
 > >> >
-> >> >  static int page_referenced_anon(struct page *page,
-> >> > -                               struct mem_cgroup *mem_cont)
-> >> > +                               struct mem_cgroup *mem_cont,
-> >> > +                               unsigned long *vm_flags)
-> >> >  {
-> >> >        unsigned int mapcount;
-> >> >        struct anon_vma *anon_vma;
+> >> > A static int page_referenced_anon(struct page *page,
+> >> > - A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  struct mem_cgroup *mem_cont)
+> >> > + A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  struct mem_cgroup *mem_cont,
+> >> > + A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  unsigned long *vm_flags)
+> >> > A {
+> >> > A  A  A  A unsigned int mapcount;
+> >> > A  A  A  A struct anon_vma *anon_vma;
 > >> > @@ -406,6 +408,7 @@ static int page_referenced_anon(struct p
-> >> >                if (mem_cont && !mm_match_cgroup(vma->vm_mm, mem_cont))
-> >> >                        continue;
-> >> >                referenced += page_referenced_one(page, vma, &mapcount);
-> >> > +               *vm_flags |= vma->vm_flags;
+> >> > A  A  A  A  A  A  A  A if (mem_cont && !mm_match_cgroup(vma->vm_mm, mem_cont))
+> >> > A  A  A  A  A  A  A  A  A  A  A  A continue;
+> >> > A  A  A  A  A  A  A  A referenced += page_referenced_one(page, vma, &mapcount);
+> >> > + A  A  A  A  A  A  A  *vm_flags |= vma->vm_flags;
 > >>
 > >> Sometime this vma don't contain the anon page.
 > >> That's why we need page_check_address.
@@ -139,3 +139,9 @@ But I do suspect passing out VM_LOCKED could help somehow.
 
 Thanks,
 Fengguang
+
+--
+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 9f698e3..bb0f3bf 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -34,22 +34,22 @@
  "> >> >>\n"
  "> >> >> > > @@ -1269,8 +1270,15 @@ static void shrink_active_list(unsigned\n"
  "> >> >> > >\n"
- "> >> >> > > \302\240 \302\240 \302\240 \302\240 \302\240 /* page_referenced clears PageReferenced */\n"
- "> >> >> > > \302\240 \302\240 \302\240 \302\240 \302\240 if (page_mapping_inuse(page) &&\n"
- "> >> >> > > - \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 page_referenced(page, 0, sc->mem_cgroup))\n"
- "> >> >> > > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 page_referenced(page, 0, sc->mem_cgroup)) {\n"
- "> >> >> > > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 struct address_space *mapping = page_mapping(page);\n"
+ "> >> >> > > A  A  A  A  A  /* page_referenced clears PageReferenced */\n"
+ "> >> >> > > A  A  A  A  A  if (page_mapping_inuse(page) &&\n"
+ "> >> >> > > - A  A  A  A  A  A  page_referenced(page, 0, sc->mem_cgroup))\n"
+ "> >> >> > > + A  A  A  A  A  A  page_referenced(page, 0, sc->mem_cgroup)) {\n"
+ "> >> >> > > + A  A  A  A  A  A  A  A  struct address_space *mapping = page_mapping(page);\n"
  "> >> >> > > +\n"
- "> >> >> > > \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 pgmoved++;\n"
- "> >> >> > > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 if (mapping && test_bit(AS_EXEC, &mapping->flags)) {\n"
- "> >> >> > > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 list_add(&page->lru, &l_active);\n"
- "> >> >> > > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 continue;\n"
- "> >> >> > > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 }\n"
- "> >> >> > > + \302\240 \302\240 \302\240 \302\240 }\n"
+ "> >> >> > > A  A  A  A  A  A  A  A  A  pgmoved++;\n"
+ "> >> >> > > + A  A  A  A  A  A  A  A  if (mapping && test_bit(AS_EXEC, &mapping->flags)) {\n"
+ "> >> >> > > + A  A  A  A  A  A  A  A  A  A  A  A  list_add(&page->lru, &l_active);\n"
+ "> >> >> > > + A  A  A  A  A  A  A  A  A  A  A  A  continue;\n"
+ "> >> >> > > + A  A  A  A  A  A  A  A  }\n"
+ "> >> >> > > + A  A  A  A  }\n"
  "> >> >> >\n"
  "> >> >> > Since we walk the VMAs in page_referenced anyway, wouldn't it be\n"
- "> >> >> > better to check if one of them is executable? \302\240This would even work\n"
- "> >> >> > for executable anon pages. \302\240After all, there are applications that cow\n"
+ "> >> >> > better to check if one of them is executable? A This would even work\n"
+ "> >> >> > for executable anon pages. A After all, there are applications that cow\n"
  "> >> >> > executable mappings (sbcl and other language environments that use an\n"
  "> >> >> > executable, run-time modified core image come to mind).\n"
  "> >> >>\n"
@@ -71,59 +71,59 @@
  "> >> >\n"
  "> >> > Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>\n"
  "> >> > ---\n"
- "> >> > \302\240include/linux/rmap.h | \302\240 \302\2405 +++--\n"
- "> >> > \302\240mm/rmap.c \302\240 \302\240 \302\240 \302\240 \302\240 \302\240| \302\240 30 +++++++++++++++++++++---------\n"
- "> >> > \302\240mm/vmscan.c \302\240 \302\240 \302\240 \302\240 \302\240| \302\240 \302\2407 +++++--\n"
- "> >> > \302\2403 files changed, 29 insertions(+), 13 deletions(-)\n"
+ "> >> > A include/linux/rmap.h | A  A 5 +++--\n"
+ "> >> > A mm/rmap.c A  A  A  A  A  A | A  30 +++++++++++++++++++++---------\n"
+ "> >> > A mm/vmscan.c A  A  A  A  A | A  A 7 +++++--\n"
+ "> >> > A 3 files changed, 29 insertions(+), 13 deletions(-)\n"
  "> >> >\n"
  "> >> > --- linux.orig/include/linux/rmap.h\n"
  "> >> > +++ linux/include/linux/rmap.h\n"
  "> >> > @@ -83,7 +83,8 @@ static inline void page_dup_rmap(struct\n"
- "> >> > \302\240/*\n"
- "> >> > \302\240* Called from mm/vmscan.c to handle paging out\n"
- "> >> > \302\240*/\n"
+ "> >> > A /*\n"
+ "> >> > A * Called from mm/vmscan.c to handle paging out\n"
+ "> >> > A */\n"
  "> >> > -int page_referenced(struct page *, int is_locked, struct mem_cgroup *cnt);\n"
  "> >> > +int page_referenced(struct page *, int is_locked,\n"
- "> >> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 struct mem_cgroup *cnt, unsigned long *vm_flags);\n"
- "> >> > \302\240int try_to_unmap(struct page *, int ignore_refs);\n"
+ "> >> > + A  A  A  A  A  A  A  A  A  A  A  struct mem_cgroup *cnt, unsigned long *vm_flags);\n"
+ "> >> > A int try_to_unmap(struct page *, int ignore_refs);\n"
  "> >> >\n"
- "> >> > \302\240/*\n"
+ "> >> > A /*\n"
  "> >> > @@ -128,7 +129,7 @@ int page_wrprotect(struct page *page, in\n"
- "> >> > \302\240#define anon_vma_prepare(vma) \302\240(0)\n"
- "> >> > \302\240#define anon_vma_link(vma) \302\240 \302\240 do {} while (0)\n"
+ "> >> > A #define anon_vma_prepare(vma) A (0)\n"
+ "> >> > A #define anon_vma_link(vma) A  A  do {} while (0)\n"
  "> >> >\n"
  "> >> > -#define page_referenced(page,l,cnt) TestClearPageReferenced(page)\n"
  "> >> > +#define page_referenced(page, locked, cnt, flags) TestClearPageReferenced(page)\n"
- "> >> > \302\240#define try_to_unmap(page, refs) SWAP_FAIL\n"
+ "> >> > A #define try_to_unmap(page, refs) SWAP_FAIL\n"
  "> >> >\n"
- "> >> > \302\240static inline int page_mkclean(struct page *page)\n"
+ "> >> > A static inline int page_mkclean(struct page *page)\n"
  "> >> > --- linux.orig/mm/rmap.c\n"
  "> >> > +++ linux/mm/rmap.c\n"
  "> >> > @@ -333,7 +333,8 @@ static int page_mapped_in_vma(struct pag\n"
- "> >> > \302\240* repeatedly from either page_referenced_anon or page_referenced_file.\n"
- "> >> > \302\240*/\n"
- "> >> > \302\240static int page_referenced_one(struct page *page,\n"
- "> >> > - \302\240 \302\240 \302\240 struct vm_area_struct *vma, unsigned int *mapcount)\n"
- "> >> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240struct vm_area_struct *vma,\n"
- "> >> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240unsigned int *mapcount)\n"
- "> >> > \302\240{\n"
- "> >> > \302\240 \302\240 \302\240 \302\240struct mm_struct *mm = vma->vm_mm;\n"
- "> >> > \302\240 \302\240 \302\240 \302\240unsigned long address;\n"
+ "> >> > A * repeatedly from either page_referenced_anon or page_referenced_file.\n"
+ "> >> > A */\n"
+ "> >> > A static int page_referenced_one(struct page *page,\n"
+ "> >> > - A  A  A  struct vm_area_struct *vma, unsigned int *mapcount)\n"
+ "> >> > + A  A  A  A  A  A  A  A  A  A  A  A  A  A  A struct vm_area_struct *vma,\n"
+ "> >> > + A  A  A  A  A  A  A  A  A  A  A  A  A  A  A unsigned int *mapcount)\n"
+ "> >> > A {\n"
+ "> >> > A  A  A  A struct mm_struct *mm = vma->vm_mm;\n"
+ "> >> > A  A  A  A unsigned long address;\n"
  "> >> > @@ -385,7 +386,8 @@ out:\n"
- "> >> > \302\240}\n"
+ "> >> > A }\n"
  "> >> >\n"
- "> >> > \302\240static int page_referenced_anon(struct page *page,\n"
- "> >> > - \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 struct mem_cgroup *mem_cont)\n"
- "> >> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 struct mem_cgroup *mem_cont,\n"
- "> >> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 unsigned long *vm_flags)\n"
- "> >> > \302\240{\n"
- "> >> > \302\240 \302\240 \302\240 \302\240unsigned int mapcount;\n"
- "> >> > \302\240 \302\240 \302\240 \302\240struct anon_vma *anon_vma;\n"
+ "> >> > A static int page_referenced_anon(struct page *page,\n"
+ "> >> > - A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  struct mem_cgroup *mem_cont)\n"
+ "> >> > + A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  struct mem_cgroup *mem_cont,\n"
+ "> >> > + A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  unsigned long *vm_flags)\n"
+ "> >> > A {\n"
+ "> >> > A  A  A  A unsigned int mapcount;\n"
+ "> >> > A  A  A  A struct anon_vma *anon_vma;\n"
  "> >> > @@ -406,6 +408,7 @@ static int page_referenced_anon(struct p\n"
- "> >> > \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240if (mem_cont && !mm_match_cgroup(vma->vm_mm, mem_cont))\n"
- "> >> > \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240continue;\n"
- "> >> > \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240referenced += page_referenced_one(page, vma, &mapcount);\n"
- "> >> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 *vm_flags |= vma->vm_flags;\n"
+ "> >> > A  A  A  A  A  A  A  A if (mem_cont && !mm_match_cgroup(vma->vm_mm, mem_cont))\n"
+ "> >> > A  A  A  A  A  A  A  A  A  A  A  A continue;\n"
+ "> >> > A  A  A  A  A  A  A  A referenced += page_referenced_one(page, vma, &mapcount);\n"
+ "> >> > + A  A  A  A  A  A  A  *vm_flags |= vma->vm_flags;\n"
  "> >>\n"
  "> >> Sometime this vma don't contain the anon page.\n"
  "> >> That's why we need page_check_address.\n"
@@ -165,6 +165,12 @@
  "But I do suspect passing out VM_LOCKED could help somehow.\n"
  "\n"
  "Thanks,\n"
- Fengguang
+ "Fengguang\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>"
 
-3f29a78036772590ed4ca009ff0dcfef2728f89e31c9cf16e05490e90c865b85
+38b68ebc224577f94ffc84bbaa7947d5af98f9d20c8b3cc1a4b8ec71907b1c70

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.