The first_index/last_index parameters in zap_details are actually only used in
unmap_mapping_range_tree().  At the meantime, this function is only called by
unmap_mapping_pages() once.  Instead of passing these two variables through the
whole stack of page zapping code, remove them from zap_details and let them
simply be parameters of unmap_mapping_range_tree(), which is inlined.

Signed-off-by: Peter Xu <pet...@redhat.com>
---
 include/linux/mm.h |  2 --
 mm/memory.c        | 20 ++++++++++----------
 2 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/include/linux/mm.h b/include/linux/mm.h
index b78306eb7a63..389dd91134f9 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1707,8 +1707,6 @@ extern void user_shm_unlock(size_t, struct user_struct *);
  */
 struct zap_details {
        struct address_space *check_mapping;    /* Check page->mapping if set */
-       pgoff_t first_index;                    /* Lowest page->index to unmap 
*/
-       pgoff_t last_index;                     /* Highest page->index to unmap 
*/
 };
 
 struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr,
diff --git a/mm/memory.c b/mm/memory.c
index b4ddba343abc..5e6175e00617 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3202,20 +3202,20 @@ static void unmap_mapping_range_vma(struct 
vm_area_struct *vma,
 }
 
 static inline void unmap_mapping_range_tree(struct rb_root_cached *root,
+                                           pgoff_t first_index,
+                                           pgoff_t last_index,
                                            struct zap_details *details)
 {
        struct vm_area_struct *vma;
        pgoff_t vba, vea, zba, zea;
 
-       vma_interval_tree_foreach(vma, root,
-                       details->first_index, details->last_index) {
-
+       vma_interval_tree_foreach(vma, root, first_index, last_index) {
                vba = vma->vm_pgoff;
                vea = vba + vma_pages(vma) - 1;
-               zba = details->first_index;
+               zba = first_index;
                if (zba < vba)
                        zba = vba;
-               zea = details->last_index;
+               zea = last_index;
                if (zea > vea)
                        zea = vea;
 
@@ -3241,17 +3241,17 @@ static inline void unmap_mapping_range_tree(struct 
rb_root_cached *root,
 void unmap_mapping_pages(struct address_space *mapping, pgoff_t start,
                pgoff_t nr, bool even_cows)
 {
+       pgoff_t first_index = start, last_index = start + nr - 1;
        struct zap_details details = { };
 
        details.check_mapping = even_cows ? NULL : mapping;
-       details.first_index = start;
-       details.last_index = start + nr - 1;
-       if (details.last_index < details.first_index)
-               details.last_index = ULONG_MAX;
+       if (last_index < first_index)
+               last_index = ULONG_MAX;
 
        i_mmap_lock_write(mapping);
        if (unlikely(!RB_EMPTY_ROOT(&mapping->i_mmap.rb_root)))
-               unmap_mapping_range_tree(&mapping->i_mmap, &details);
+               unmap_mapping_range_tree(&mapping->i_mmap, first_index,
+                                        last_index, &details);
        i_mmap_unlock_write(mapping);
 }
 
-- 
2.26.2

Reply via email to