Minchan Kim <minchan@xxxxxxxxxx> writes: > 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. Sure. I will take this patch as one patch of the THP swap series. Because the first patch of the THP swap series is a little big, I don't think it is a good idea to fold this patch into it. Could you update the patch according to Johannes' comments and resend it? Best Regards, Huang, Ying -- 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>