On Fri 24-02-17 13:31:44, Shaohua Li wrote: > Johannes pointed out TTU_LZFREE is unnecessary. It's true because we > always have the flag set if we want to do an unmap. For cases we don't > do an unmap, the TTU_LZFREE part of code should never run. > > Also the TTU_UNMAP is unnecessary. If no other flags set (for > example, TTU_MIGRATION), an unmap is implied. > > The patch includes Johannes's cleanup and dead TTU_ACTION macro removal > code > > Cc: Michal Hocko <mhocko@xxxxxxxx> > Cc: Hugh Dickins <hughd@xxxxxxxxxx> > Cc: Rik van Riel <riel@xxxxxxxxxx> > Cc: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx> > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Suggested-by: Johannes Weiner <hannes@xxxxxxxxxxx> > Acked-by: Johannes Weiner <hannes@xxxxxxxxxxx> > Acked-by: Minchan Kim <minchan@xxxxxxxxxx> > Acked-by: Hillf Danton <hillf.zj@xxxxxxxxxxxxxxx> > Signed-off-by: Shaohua Li <shli@xxxxxx> Acked-by: Michal Hocko <mhocko@xxxxxxxx> > --- > include/linux/rmap.h | 22 +++++++++------------- > mm/memory-failure.c | 2 +- > mm/rmap.c | 2 +- > mm/vmscan.c | 11 ++++------- > 4 files changed, 15 insertions(+), 22 deletions(-) > > diff --git a/include/linux/rmap.h b/include/linux/rmap.h > index 8c89e90..7a39414 100644 > --- a/include/linux/rmap.h > +++ b/include/linux/rmap.h > @@ -83,19 +83,17 @@ struct anon_vma_chain { > }; > > enum ttu_flags { > - TTU_UNMAP = 1, /* unmap mode */ > - TTU_MIGRATION = 2, /* migration mode */ > - TTU_MUNLOCK = 4, /* munlock mode */ > - TTU_LZFREE = 8, /* lazy free mode */ > - TTU_SPLIT_HUGE_PMD = 16, /* split huge PMD if any */ > - > - TTU_IGNORE_MLOCK = (1 << 8), /* ignore mlock */ > - TTU_IGNORE_ACCESS = (1 << 9), /* don't age */ > - TTU_IGNORE_HWPOISON = (1 << 10),/* corrupted page is recoverable */ > - TTU_BATCH_FLUSH = (1 << 11), /* Batch TLB flushes where possible > + TTU_MIGRATION = 0x1, /* migration mode */ > + TTU_MUNLOCK = 0x2, /* munlock mode */ > + > + TTU_SPLIT_HUGE_PMD = 0x4, /* split huge PMD if any */ > + TTU_IGNORE_MLOCK = 0x8, /* ignore mlock */ > + TTU_IGNORE_ACCESS = 0x10, /* don't age */ > + TTU_IGNORE_HWPOISON = 0x20, /* corrupted page is recoverable */ > + TTU_BATCH_FLUSH = 0x40, /* Batch TLB flushes where possible > * and caller guarantees they will > * do a final flush if necessary */ > - TTU_RMAP_LOCKED = (1 << 12) /* do not grab rmap lock: > + TTU_RMAP_LOCKED = 0x80 /* do not grab rmap lock: > * caller holds it */ > }; > > @@ -193,8 +191,6 @@ static inline void page_dup_rmap(struct page *page, bool compound) > int page_referenced(struct page *, int is_locked, > struct mem_cgroup *memcg, unsigned long *vm_flags); > > -#define TTU_ACTION(x) ((x) & TTU_ACTION_MASK) > - > int try_to_unmap(struct page *, enum ttu_flags flags); > > /* Avoid racy checks */ > diff --git a/mm/memory-failure.c b/mm/memory-failure.c > index 3d0f2fd..b78d080 100644 > --- a/mm/memory-failure.c > +++ b/mm/memory-failure.c > @@ -906,7 +906,7 @@ EXPORT_SYMBOL_GPL(get_hwpoison_page); > static int hwpoison_user_mappings(struct page *p, unsigned long pfn, > int trapno, int flags, struct page **hpagep) > { > - enum ttu_flags ttu = TTU_UNMAP | TTU_IGNORE_MLOCK | TTU_IGNORE_ACCESS; > + enum ttu_flags ttu = TTU_IGNORE_MLOCK | TTU_IGNORE_ACCESS; > struct address_space *mapping; > LIST_HEAD(tokill); > int ret; > diff --git a/mm/rmap.c b/mm/rmap.c > index 8774791..96eb85c 100644 > --- a/mm/rmap.c > +++ b/mm/rmap.c > @@ -1418,7 +1418,7 @@ static int try_to_unmap_one(struct page *page, struct vm_area_struct *vma, > */ > VM_BUG_ON_PAGE(!PageSwapCache(page), page); > > - if (!PageDirty(page) && (flags & TTU_LZFREE)) { > + if (!PageDirty(page)) { > /* It's a freeable page by MADV_FREE */ > dec_mm_counter(mm, MM_ANONPAGES); > rp->lazyfreed++; > diff --git a/mm/vmscan.c b/mm/vmscan.c > index 26c3b40..68ea50d 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -971,7 +971,6 @@ static unsigned long shrink_page_list(struct list_head *page_list, > int may_enter_fs; > enum page_references references = PAGEREF_RECLAIM_CLEAN; > bool dirty, writeback; > - bool lazyfree = false; > int ret = SWAP_SUCCESS; > > cond_resched(); > @@ -1125,7 +1124,6 @@ static unsigned long shrink_page_list(struct list_head *page_list, > goto keep_locked; > if (!add_to_swap(page, page_list)) > goto activate_locked; > - lazyfree = true; > may_enter_fs = 1; > > /* Adding to swap updated mapping */ > @@ -1143,9 +1141,8 @@ static unsigned long shrink_page_list(struct list_head *page_list, > * 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) : > - (ttu_flags | TTU_BATCH_FLUSH))) { > + switch (ret = try_to_unmap(page, > + ttu_flags | TTU_BATCH_FLUSH)) { > case SWAP_FAIL: > nr_unmap_fail++; > goto activate_locked; > @@ -1353,7 +1350,7 @@ unsigned long reclaim_clean_pages_from_list(struct zone *zone, > } > > ret = shrink_page_list(&clean_pages, zone->zone_pgdat, &sc, > - TTU_UNMAP|TTU_IGNORE_ACCESS, NULL, true); > + TTU_IGNORE_ACCESS, NULL, true); > list_splice(&clean_pages, page_list); > mod_node_page_state(zone->zone_pgdat, NR_ISOLATED_FILE, -ret); > return ret; > @@ -1760,7 +1757,7 @@ shrink_inactive_list(unsigned long nr_to_scan, struct lruvec *lruvec, > if (nr_taken == 0) > return 0; > > - nr_reclaimed = shrink_page_list(&page_list, pgdat, sc, TTU_UNMAP, > + nr_reclaimed = shrink_page_list(&page_list, pgdat, sc, 0, > &stat, false); > > spin_lock_irq(&pgdat->lru_lock); > -- > 2.9.3 > -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>