On 04/14/2018 09:12 AM, Matthew Wilcox wrote:
> From: Matthew Wilcox <[email protected]>
>
> The code is slightly shorter and simpler.
>
> Signed-off-by: Matthew Wilcox <[email protected]>
> ---
> mm/filemap.c | 30 ++++++++++++++----------------
> 1 file changed, 14 insertions(+), 16 deletions(-)
>
> diff --git a/mm/filemap.c b/mm/filemap.c
> index 070b5e4527ac..4af06a1a9818 100644
> --- a/mm/filemap.c
> +++ b/mm/filemap.c
> @@ -111,30 +111,28 @@
> * ->tasklist_lock (memory_failure, collect_procs_ao)
> */
>
> -static void page_cache_tree_delete(struct address_space *mapping,
> +static void page_cache_delete(struct address_space *mapping,
> struct page *page, void *shadow)
> {
> - int i, nr;
> + XA_STATE(xas, &mapping->i_pages, page->index);
> + unsigned int i, nr;
>
> - /* hugetlb pages are represented by one entry in the radix tree */
> + mapping_set_update(&xas, mapping);
> +
> + /* hugetlb pages are represented by a single entry in the xarray */
> nr = PageHuge(page) ? 1 : hpage_nr_pages(page);
>
> VM_BUG_ON_PAGE(!PageLocked(page), page);
> VM_BUG_ON_PAGE(PageTail(page), page);
> VM_BUG_ON_PAGE(nr != 1 && shadow, page);
>
> - for (i = 0; i < nr; i++) {
> - struct radix_tree_node *node;
> - void **slot;
> -
> - __radix_tree_lookup(&mapping->i_pages, page->index + i,
> - &node, &slot);
> -
> - VM_BUG_ON_PAGE(!node && nr != 1, page);
> -
> - radix_tree_clear_tags(&mapping->i_pages, node, slot);
> - __radix_tree_replace(&mapping->i_pages, node, slot, shadow,
> - workingset_lookup_update(mapping));
> + i = nr;
> +repeat:
> + xas_store(&xas, shadow);
> + xas_init_tags(&xas);
> + if (--i) {
> + xas_next(&xas);
> + goto repeat;
> }
Can this be converted into a do {} while (or even for) loop instead?
Loops are easier to read and understand in such a situation.
>
> page->mapping = NULL;
> @@ -234,7 +232,7 @@ void __delete_from_page_cache(struct page *page, void
> *shadow)
> trace_mm_filemap_delete_from_page_cache(page);
>
> unaccount_page_cache_page(mapping, page);
> - page_cache_tree_delete(mapping, page, shadow);
> + page_cache_delete(mapping, page, shadow);
> }
>
> static void page_cache_free_page(struct address_space *mapping,
>
--
Goldwyn
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel