Merge tag 'fbdev-for-6.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller...
[platform/kernel/linux-starfive.git] / mm / truncate.c
index c0be77e..7b4ea4c 100644 (file)
@@ -361,9 +361,8 @@ void truncate_inode_pages_range(struct address_space *mapping,
 
        folio_batch_init(&fbatch);
        index = start;
-       while (index < end && find_lock_entries(mapping, index, end - 1,
+       while (index < end && find_lock_entries(mapping, &index, end - 1,
                        &fbatch, indices)) {
-               index = indices[folio_batch_count(&fbatch) - 1] + 1;
                truncate_folio_batch_exceptionals(mapping, &fbatch, indices);
                for (i = 0; i < folio_batch_count(&fbatch); i++)
                        truncate_cleanup_folio(fbatch.folios[i]);
@@ -401,7 +400,7 @@ void truncate_inode_pages_range(struct address_space *mapping,
        index = start;
        while (index < end) {
                cond_resched();
-               if (!find_get_entries(mapping, index, end - 1, &fbatch,
+               if (!find_get_entries(mapping, &index, end - 1, &fbatch,
                                indices)) {
                        /* If all gone from start onwards, we're done */
                        if (index == start)
@@ -415,21 +414,18 @@ void truncate_inode_pages_range(struct address_space *mapping,
                        struct folio *folio = fbatch.folios[i];
 
                        /* We rely upon deletion not changing page->index */
-                       index = indices[i];
 
                        if (xa_is_value(folio))
                                continue;
 
                        folio_lock(folio);
-                       VM_BUG_ON_FOLIO(!folio_contains(folio, index), folio);
+                       VM_BUG_ON_FOLIO(!folio_contains(folio, indices[i]), folio);
                        folio_wait_writeback(folio);
                        truncate_inode_folio(mapping, folio);
                        folio_unlock(folio);
-                       index = folio_index(folio) + folio_nr_pages(folio) - 1;
                }
                truncate_folio_batch_exceptionals(mapping, &fbatch, indices);
                folio_batch_release(&fbatch);
-               index++;
        }
 }
 EXPORT_SYMBOL(truncate_inode_pages_range);
@@ -510,20 +506,17 @@ unsigned long invalidate_mapping_pagevec(struct address_space *mapping,
        int i;
 
        folio_batch_init(&fbatch);
-       while (find_lock_entries(mapping, index, end, &fbatch, indices)) {
+       while (find_lock_entries(mapping, &index, end, &fbatch, indices)) {
                for (i = 0; i < folio_batch_count(&fbatch); i++) {
                        struct folio *folio = fbatch.folios[i];
 
                        /* We rely upon deletion not changing folio->index */
-                       index = indices[i];
 
                        if (xa_is_value(folio)) {
                                count += invalidate_exceptional_entry(mapping,
-                                                                     index,
-                                                                     folio);
+                                                            indices[i], folio);
                                continue;
                        }
-                       index += folio_nr_pages(folio) - 1;
 
                        ret = mapping_evict_folio(mapping, folio);
                        folio_unlock(folio);
@@ -542,7 +535,6 @@ unsigned long invalidate_mapping_pagevec(struct address_space *mapping,
                folio_batch_remove_exceptionals(&fbatch);
                folio_batch_release(&fbatch);
                cond_resched();
-               index++;
        }
        return count;
 }
@@ -573,7 +565,7 @@ EXPORT_SYMBOL(invalidate_mapping_pages);
  * refcount.  We do this because invalidate_inode_pages2() needs stronger
  * invalidation guarantees, and cannot afford to leave pages behind because
  * shrink_page_list() has a temp ref on them, or because they're transiently
- * sitting in the lru_cache_add() pagevecs.
+ * sitting in the folio_add_lru() pagevecs.
  */
 static int invalidate_complete_folio2(struct address_space *mapping,
                                        struct folio *folio)
@@ -641,16 +633,15 @@ int invalidate_inode_pages2_range(struct address_space *mapping,
 
        folio_batch_init(&fbatch);
        index = start;
-       while (find_get_entries(mapping, index, end, &fbatch, indices)) {
+       while (find_get_entries(mapping, &index, end, &fbatch, indices)) {
                for (i = 0; i < folio_batch_count(&fbatch); i++) {
                        struct folio *folio = fbatch.folios[i];
 
                        /* We rely upon deletion not changing folio->index */
-                       index = indices[i];
 
                        if (xa_is_value(folio)) {
                                if (!invalidate_exceptional_entry2(mapping,
-                                               index, folio))
+                                               indices[i], folio))
                                        ret = -EBUSY;
                                continue;
                        }
@@ -660,13 +651,13 @@ int invalidate_inode_pages2_range(struct address_space *mapping,
                                 * If folio is mapped, before taking its lock,
                                 * zap the rest of the file in one hit.
                                 */
-                               unmap_mapping_pages(mapping, index,
-                                               (1 + end - index), false);
+                               unmap_mapping_pages(mapping, indices[i],
+                                               (1 + end - indices[i]), false);
                                did_range_unmap = 1;
                        }
 
                        folio_lock(folio);
-                       VM_BUG_ON_FOLIO(!folio_contains(folio, index), folio);
+                       VM_BUG_ON_FOLIO(!folio_contains(folio, indices[i]), folio);
                        if (folio->mapping != mapping) {
                                folio_unlock(folio);
                                continue;
@@ -689,7 +680,6 @@ int invalidate_inode_pages2_range(struct address_space *mapping,
                folio_batch_remove_exceptionals(&fbatch);
                folio_batch_release(&fbatch);
                cond_resched();
-               index++;
        }
        /*
         * For DAX we invalidate page tables after invalidating page cache.  We