On Wed, May 10, 2017 at 09:56:54AM -0400, Johannes Weiner wrote: > Hi Michan, > > On Tue, May 02, 2017 at 08:53:32AM +0900, Minchan Kim wrote: > > @@ -1144,7 +1144,7 @@ void swap_free(swp_entry_t entry) > > /* > > * Called after dropping swapcache to decrease refcnt to swap entries. > > */ > > -void swapcache_free(swp_entry_t entry) > > +void __swapcache_free(swp_entry_t entry) > > { > > struct swap_info_struct *p; > > > > @@ -1156,7 +1156,7 @@ void swapcache_free(swp_entry_t entry) > > } > > > > #ifdef CONFIG_THP_SWAP > > -void swapcache_free_cluster(swp_entry_t entry) > > +void __swapcache_free_cluster(swp_entry_t entry) > > { > > unsigned long offset = swp_offset(entry); > > unsigned long idx = offset / SWAPFILE_CLUSTER; > > @@ -1182,6 +1182,14 @@ void swapcache_free_cluster(swp_entry_t entry) > > } > > #endif /* CONFIG_THP_SWAP */ > > > > +void swapcache_free(struct page *page, swp_entry_t entry) > > +{ > > + if (!PageTransHuge(page)) > > + __swapcache_free(entry); > > + else > > + __swapcache_free_cluster(entry); > > +} > > I don't think this is cleaner :/ > > On your second patch: > > > @@ -1125,8 +1125,28 @@ static unsigned long shrink_page_list(struct list_head *page_list, > > !PageSwapCache(page)) { > > if (!(sc->gfp_mask & __GFP_IO)) > > goto keep_locked; > > - if (!add_to_swap(page, page_list)) > > +swap_retry: > > + /* > > + * Retry after split if we fail to allocate > > + * swap space of a THP. > > + */ > > + if (!add_to_swap(page)) { > > + if (!PageTransHuge(page) || > > + split_huge_page_to_list(page, page_list)) > > + goto activate_locked; > > + goto swap_retry; > > + } > > This is definitely better. Thanks. > > However, I think it'd be cleaner without the label here: > > if (!add_to_swap(page)) { > if (!PageTransHuge(page)) > goto activate_locked; > /* Split THP and swap individual base pages */ > if (split_huge_page_to_list(page, page_list)) > goto activate_locked; > if (!add_to_swap(page)) > goto activate_locked; Yes. > } > > > + /* > > + * Got swap space successfully. But unfortunately, > > + * we don't support a THP page writeout so split it. > > + */ > > + if (PageTransHuge(page) && > > + split_huge_page_to_list(page, page_list)) { > > + delete_from_swap_cache(page); > > goto activate_locked; > > + } > > Pulling this out of add_to_swap() is an improvement for sure. Add an > XXX: before that "we don't support THP writes" comment for good > measure :) Sure. It could be a separate patch which makes add_to_swap clean via removing page_list argument but I hope Huang take/fold it when he resend it because it would be more important with THP swap. Thanks. -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html