mm/swap_state.c: use the same way to count page in [add_to|delete_from]_swap_cache
Subsystems (2)
PATCH 1/1 mm/swap_state.c: use the same way to count page in [add_to|delete_from]_swap_cache
Function add_to_swap_cache() and delete_from_swap_cache() are counter parts, while currently they use different way to count page.
It doesn't break any thing because we only have two size for PageAnon, but this is confusing and not a good practice.
This patch corrects it by both using compound_nr().
--- mm/swap_state.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
mm/swap_state.c +2 -2
@@ -158,7 +158,7 @@ int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp)void __delete_from_swap_cache (struct page *page,swp_entry_t entry) {struct address_space *address_space =swap_address_space (entry); -int i, nr =hpage_nr_pages (page); +int i, nr =compound_nr (page);pgoff_t idx =swp_offset (entry);XA_STATE (xas, &address_space->i_pages, idx);
@@ -251,7 +251,7 @@ void delete_from_swap_cache(struct page *page)xa_unlock_irq (&address_space->i_pages);put_swap_page (page, entry); -page_ref_sub (page,hpage_nr_pages (page)); +page_ref_sub (page,compound_nr (page)); }/*
Signature · 1 line
2.23.0
Quoted 7 lines · Wei Yang
Function
add_to_swap_cache()anddelete_from_swap_cache()are counter parts, while currently they use different way to count page.It doesn't break any thing because we only have two size for PageAnon, but this is confusing and not a good practice.
This patch corrects it by both using
compound_nr().
You're converting in the wrong direction. hpage_nr_pages() is optimised away when CONFIG_TRANSPARENT_HUGEPAGE is undefined, whereas compound_nr() is not.
I also have this patch pending:
http://git.infradead.org/users/willy/linux-dax.git/commitdiff/192b635b428ae74f680574cdcc3d5e9d213fcb64
Quoted 4 lines · Matthew Wilcox
Quoted 3 lines · Wei Yang
Function
add_to_swap_cache()anddelete_from_swap_cache()are counter parts, while currently they use different way to count page.
Quoted 8 lines
Quoted 4 lines
It doesn't break any thing because we only have two size for PageAnon, but this is confusing and not a good practice.
This patch corrects it by both using
compound_nr().You're converting in the wrong direction.
hpage_nr_pages()is optimised away whenCONFIG_TRANSPARENT_HUGEPAGEis undefined, whereascompound_nr()is not.
Ok, I didn't think about the optimisation.
Will use hpage_nr_pages() in v2.
Quoted 3 lines
I also have this patch pending:
http://git.infradead.org/users/willy/linux-dax.git/commitdiff/192b635b428ae74f680574cdcc3d5e9d213fcb64
Signature · 2 lines
Wei Yang Help you, Help me