[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <YWpG1xlPbm7Jpf2b@casper.infradead.org>
Date: Sat, 16 Oct 2021 04:28:23 +0100
From: Matthew Wilcox <willy@...radead.org>
To: Johannes Weiner <hannes@...xchg.org>
Cc: Kent Overstreet <kent.overstreet@...il.com>,
Linus Torvalds <torvalds@...ux-foundation.org>,
linux-mm@...ck.org, linux-fsdevel@...r.kernel.org,
linux-kernel@...r.kernel.org,
Andrew Morton <akpm@...ux-foundation.org>,
"Darrick J. Wong" <djwong@...nel.org>,
Christoph Hellwig <hch@...radead.org>,
David Howells <dhowells@...hat.com>
Subject: Re: Folios for 5.15 request - Was: re: Folio discussion recap -
On Wed, Sep 22, 2021 at 11:08:58AM -0400, Johannes Weiner wrote:
> mm/memcg: Add folio_memcg() and related functions
> mm/memcg: Convert commit_charge() to take a folio
> mm/memcg: Convert mem_cgroup_charge() to take a folio
> mm/memcg: Convert uncharge_page() to uncharge_folio()
> mm/memcg: Convert mem_cgroup_uncharge() to take a folio
> mm/memcg: Convert mem_cgroup_migrate() to take folios
> mm/memcg: Convert mem_cgroup_track_foreign_dirty_slowpath() to folio
> mm/memcg: Add folio_memcg_lock() and folio_memcg_unlock()
> mm/memcg: Convert mem_cgroup_move_account() to use a folio
> mm/memcg: Add folio_lruvec()
> mm/memcg: Add folio_lruvec_lock() and similar functions
> mm/memcg: Add folio_lruvec_relock_irq() and folio_lruvec_relock_irqsave()
> mm/workingset: Convert workingset_activation to take a folio
>
> This is all anon+file stuff, not needed for filesystem
> folios.
No, that's not true. A number of these functions are called from
filesystem code. mem_cgroup_track_foreign_dirty() is only
called from filesystem code. We at the very least need wrappers
like folio_cgroup_charge(), and folio_memcg_lock().
> As per the other email, no conceptual entry point for
> tail pages into either subsystem, so no ambiguity
> around the necessity of any compound_head() calls,
> directly or indirectly. It's easy to rule out
> wholesale, so there is no justification for
> incrementally annotating every single use of the page.
The justification is that we can remove all those hidden calls to
compound_head(). Hundreds of bytes of text spread throughout this file.
> mm: Add folio_young and folio_idle
> mm/swap: Add folio_activate()
> mm/swap: Add folio_mark_accessed()
>
> This is anon+file aging stuff, not needed.
Again, very much needed. Take a look at pagecache_get_page(). In Linus'
tree today, it calls if (page_is_idle(page)) clear_page_idle(page);
So either we need wrappers (which are needlessly complicated thanks to
how page_is_idle() is defined) or we just convert it.
> mm/rmap: Add folio_mkclean()
>
> mm/migrate: Add folio_migrate_mapping()
> mm/migrate: Add folio_migrate_flags()
> mm/migrate: Add folio_migrate_copy()
>
> More anon+file conversion, not needed.
As far as I can tell, anon never calls any of these three functions.
anon calls migrate_page(), which calls migrate_page_move_mapping(),
but several filesystems do call these individual functions.
> mm/lru: Add folio_add_lru()
>
> LRU code, not needed.
Again, we need folio_add_lru() for filemap. This one's more
tractable as a wrapper function.
Powered by blists - more mailing lists