Re: [PATCH v11 16/33] mm/util: Add folio_mapping() and folio_file_mapping()

From: David Howells
Date: Wed Jun 16 2021 - 06:10:22 EST


Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> wrote:

> These are the folio equivalent of page_mapping() and page_file_mapping().
> Add an out-of-line page_mapping() wrapper around folio_mapping()
> in order to prevent the page_folio() call from bloating every caller
> of page_mapping(). Adjust page_file_mapping() and page_mapping_file()

Confusingly named, but not the fault of this patch.

> to use folios internally. Rename __page_file_mapping() to
> swapcache_mapping() and change it to take a folio.
>
> This ends up saving 122 bytes of text overall. folio_mapping() is
> 45 bytes shorter than page_mapping() was, but the new page_mapping()
> wrapper is 30 bytes. The major reduction is a few bytes less in dozens
> of nfs functions (which call page_file_mapping()). Most of these appear
> to be a slight change in gcc's register allocation decisions, which allow:
>
> 48 8b 56 08 mov 0x8(%rsi),%rdx
> 48 8d 42 ff lea -0x1(%rdx),%rax
> 83 e2 01 and $0x1,%edx
> 48 0f 44 c6 cmove %rsi,%rax
>
> to become:
>
> 48 8b 46 08 mov 0x8(%rsi),%rax
> 48 8d 78 ff lea -0x1(%rax),%rdi
> a8 01 test $0x1,%al
> 48 0f 44 fe cmove %rsi,%rdi
>
> for a reduction of a single byte. Once the NFS client is converted to
> use folios, this entire sequence will disappear.
>
> Also add folio_mapping() documentation.
>
> Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx>
> Reviewed-by: Christoph Hellwig <hch@xxxxxx>
> Acked-by: Jeff Layton <jlayton@xxxxxxxxxx>
> Acked-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx>
> Acked-by: Vlastimil Babka <vbabka@xxxxxxx>
> Reviewed-by: William Kucharski <william.kucharski@xxxxxxxxxx>

Reviewed-by: David Howells <dhowells@xxxxxxxxxx>