Message ID | 20200413125220.663-5-kirill.shutemov@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | thp/khugepaged improvements and CoW semantics | expand |
On 4/13/20 5:52 AM, Kirill A. Shutemov wrote: > __collapse_huge_page_isolate() may fail due to extra pin in the LRU add > pagevec. It's pretty common for swapin case: we swap in pages just to > fail due to the extra pin. > > Drain LRU add pagevec on successful swapin. > > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> > --- > mm/khugepaged.c | 5 +++++ > 1 file changed, 5 insertions(+) Acked-by: Yang Shi <yang.shi@linux.alibaba.com> > > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > index ee66c140c2d6..e3e41c2768d8 100644 > --- a/mm/khugepaged.c > +++ b/mm/khugepaged.c > @@ -934,6 +934,11 @@ static bool __collapse_huge_page_swapin(struct mm_struct *mm, > } > vmf.pte--; > pte_unmap(vmf.pte); > + > + /* Drain LRU add pagevec to remove extra pin on the swapped in pages */ > + if (swapped_in) > + lru_add_drain(); > + > trace_mm_collapse_huge_page_swapin(mm, swapped_in, referenced, 1); > return true; > }
diff --git a/mm/khugepaged.c b/mm/khugepaged.c index ee66c140c2d6..e3e41c2768d8 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -934,6 +934,11 @@ static bool __collapse_huge_page_swapin(struct mm_struct *mm, } vmf.pte--; pte_unmap(vmf.pte); + + /* Drain LRU add pagevec to remove extra pin on the swapped in pages */ + if (swapped_in) + lru_add_drain(); + trace_mm_collapse_huge_page_swapin(mm, swapped_in, referenced, 1); return true; }
__collapse_huge_page_isolate() may fail due to extra pin in the LRU add pagevec. It's pretty common for swapin case: we swap in pages just to fail due to the extra pin. Drain LRU add pagevec on successful swapin. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> --- mm/khugepaged.c | 5 +++++ 1 file changed, 5 insertions(+)