mm: Extend 'usage' parameter so that cluster_swap_free_nr() can be reused
Subsystems (2)
PATCH v3 1/1 mm: Extend 'usage' parameter so that cluster_swap_free_nr() can be reused
From: Barry Song <[email protected]>
Extend a usage parameter so that cluster_swap_free_nr() can be reused by both swapcache_clear() and swap_free().__swap_entry_free() is quite similar but more tricky as it requires the return value of __swap_entry_free_locked() which cluster_swap_free_nr() doesn't support.
---
-v3: resend &collect Ryan's reviewed-by
mm/swapfile.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-)
mm/swapfile.c +5 -10
@@ -1344,7 +1344,8 @@ static void swap_entry_free(struct swap_info_struct *p, swp_entry_t entry) }static void cluster_swap_free_nr (struct swap_info_struct *sis, -unsigned long offset,int nr_pages) +unsigned long offset,int nr_pages, +unsigned char usage) {struct swap_cluster_info *ci; DECLARE_BITMAP(to_free, BITS_PER_LONG) = { 0 };
@@ -1354,7 +1355,7 @@ static void cluster_swap_free_nr(struct swap_info_struct *sis,while (nr_pages) { nr =min (BITS_PER_LONG , nr_pages);for (i =0 ; i < nr; i++) { -if (!__swap_entry_free_locked (sis, offset + i,1 )) +if (!__swap_entry_free_locked (sis, offset + i, usage))bitmap_set (to_free, i,1 ); }if (!bitmap_empty (to_free,BITS_PER_LONG )) {
@@ -1388,7 +1389,7 @@ void swap_free_nr(swp_entry_t entry, int nr_pages)while (nr_pages) { nr =min_t (int, nr_pages,SWAPFILE_CLUSTER - offset %SWAPFILE_CLUSTER ); -cluster_swap_free_nr (sis, offset, nr); +cluster_swap_free_nr (sis, offset, nr,1 ); offset += nr; nr_pages -= nr; }
@@ -3472,15 +3473,9 @@ int swapcache_prepare(swp_entry_t entry)void swapcache_clear (struct swap_info_struct *si,swp_entry_t entry) { -struct swap_cluster_info *ci;unsigned long offset =swp_offset (entry); -unsigned char usage; - ci =lock_cluster_or_swap_info (si, offset); - usage =__swap_entry_free_locked (si, offset,SWAP_HAS_CACHE ); -unlock_cluster_or_swap_info (si, ci); -if (!usage) -free_swap_slot (entry); +cluster_swap_free_nr (si, offset,1 ,SWAP_HAS_CACHE ); }struct swap_info_struct *swp_swap_info (swp_entry_t entry)
Signature · 1 line
2.34.1
Chris
Quoted 74 lines · Barry Song
From: Barry Song <[email protected]>
Extend a usage parameter so that
cluster_swap_free_nr()can be reused by bothswapcache_clear()andswap_free().__swap_entry_free()is quite similar but more tricky as it requires the return value of__swap_entry_free_locked()whichcluster_swap_free_nr()doesn't support.Cc "Huang, Ying" <[email protected]>Cc Chris Li <[email protected]>Cc Kairui Song <[email protected]>Cc David Hildenbrand <[email protected]>Cc Chuanhua Han <[email protected]>Reviewed-by Ryan Roberts <[email protected]>Signed-off-by Barry Song <[email protected]>---
-v3: resend &collect Ryan's reviewed-bymm/swapfile.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-)mm/swapfile.c +5
-11@@ -1344,7 +1344,8 @@ static void swap_entry_free(struct swap_info_struct *p, swp_entry_t entry) }static void cluster_swap_free_nr (struct swap_info_struct *sis, -unsigned long offset,int nr_pages) +unsigned long offset,int nr_pages, +unsigned char usage) {struct swap_cluster_info *ci; DECLARE_BITMAP(to_free, BITS_PER_LONG) = { 0 };@@ -1354,7 +1355,7 @@ static void cluster_swap_free_nr(struct swap_info_struct *sis,while (nr_pages) { nr =min (BITS_PER_LONG , nr_pages);for (i =0 ; i < nr; i++) { -if (!__swap_entry_free_locked (sis, offset + i,1 )) +if (!__swap_entry_free_locked (sis, offset + i, usage))bitmap_set (to_free, i,1 ); }if (!bitmap_empty (to_free,BITS_PER_LONG )) {@@ -1388,7 +1389,7 @@ void swap_free_nr(swp_entry_t entry, int nr_pages)while (nr_pages) { nr =min_t (int, nr_pages,SWAPFILE_CLUSTER - offset %SWAPFILE_CLUSTER ); -cluster_swap_free_nr (sis, offset, nr); +cluster_swap_free_nr (sis, offset, nr,1 ); offset += nr; nr_pages -= nr; }@@ -3472,15 +3473,9 @@ int swapcache_prepare(swp_entry_t entry)void swapcache_clear (struct swap_info_struct *si,swp_entry_t entry) { -struct swap_cluster_info *ci;unsigned long offset =swp_offset (entry); -unsigned char usage; - ci =lock_cluster_or_swap_info (si, offset); - usage =__swap_entry_free_locked (si, offset,SWAP_HAS_CACHE ); -unlock_cluster_or_swap_info (si, ci); -if (!usage) -free_swap_slot (entry); +cluster_swap_free_nr (si, offset,1 ,SWAP_HAS_CACHE ); }struct swap_info_struct *swp_swap_info (swp_entry_t entry) --2.34.1