All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Li <chrisl@kernel.org>
To: David Hildenbrand <david@redhat.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	linux-mm <linux-mm@kvack.org>,
	linux-arm-kernel@lists.infradead.org,
	Andrew Morton <akpm@linux-foundation.org>,
	Matthew Wilcox <willy@infradead.org>,
	Peter Xu <peterx@redhat.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>, Hugh Dickins <hughd@google.com>,
	Seth Jennings <sjenning@redhat.com>,
	Dan Streetman <ddstreet@ieee.org>,
	Vitaly Wool <vitaly.wool@konsulko.com>
Subject: Re: [PATCH mm-unstable v1 3/4] mm/swap: inline folio_set_swap_entry() and folio_swap_entry()
Date: Wed, 23 Aug 2023 06:15:49 -0700	[thread overview]
Message-ID: <CAF8kJuMAt4ACLYE9fLwiqjdTjG82d0Nt_V4xKnrR-FejiQuX-w@mail.gmail.com> (raw)
In-Reply-To: <20230821160849.531668-4-david@redhat.com>

Reviewed-by: Chris Li <chrisl@kernel.org>

Chris

On Mon, Aug 21, 2023 at 9:09 AM David Hildenbrand <david@redhat.com> wrote:
>
> Let's simply work on the folio directly and remove the helpers.
>
> Suggested-by: Matthew Wilcox <willy@infradead.org>
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  include/linux/swap.h | 12 +-----------
>  mm/memory.c          |  2 +-
>  mm/shmem.c           |  6 +++---
>  mm/swap_state.c      |  7 +++----
>  mm/swapfile.c        |  2 +-
>  mm/util.c            |  2 +-
>  mm/vmscan.c          |  2 +-
>  mm/zswap.c           |  4 ++--
>  8 files changed, 13 insertions(+), 24 deletions(-)
>
> diff --git a/include/linux/swap.h b/include/linux/swap.h
> index 82859a1944f5..603acf813873 100644
> --- a/include/linux/swap.h
> +++ b/include/linux/swap.h
> @@ -333,25 +333,15 @@ struct swap_info_struct {
>                                            */
>  };
>
> -static inline swp_entry_t folio_swap_entry(struct folio *folio)
> -{
> -       return folio->swap;
> -}
> -
>  static inline swp_entry_t page_swap_entry(struct page *page)
>  {
>         struct folio *folio = page_folio(page);
> -       swp_entry_t entry = folio_swap_entry(folio);
> +       swp_entry_t entry = folio->swap;
>
>         entry.val += page - &folio->page;
>         return entry;
>  }
>
> -static inline void folio_set_swap_entry(struct folio *folio, swp_entry_t entry)
> -{
> -       folio->swap = entry;
> -}
> -
>  /* linux/mm/workingset.c */
>  bool workingset_test_recent(void *shadow, bool file, bool *workingset);
>  void workingset_age_nonresident(struct lruvec *lruvec, unsigned long nr_pages);
> diff --git a/mm/memory.c b/mm/memory.c
> index ff13242c1589..c51800dbfa9b 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -3831,7 +3831,7 @@ vm_fault_t do_swap_page(struct vm_fault *vmf)
>                                 folio_add_lru(folio);
>
>                                 /* To provide entry to swap_readpage() */
> -                               folio_set_swap_entry(folio, entry);
> +                               folio->swap = entry;
>                                 swap_readpage(page, true, NULL);
>                                 folio->private = NULL;
>                         }
> diff --git a/mm/shmem.c b/mm/shmem.c
> index 7a0c1e19d9f8..fc1afe9dfcfe 100644
> --- a/mm/shmem.c
> +++ b/mm/shmem.c
> @@ -1657,7 +1657,7 @@ static int shmem_replace_folio(struct folio **foliop, gfp_t gfp,
>         int error;
>
>         old = *foliop;
> -       entry = folio_swap_entry(old);
> +       entry = old->swap;
>         swap_index = swp_offset(entry);
>         swap_mapping = swap_address_space(entry);
>
> @@ -1678,7 +1678,7 @@ static int shmem_replace_folio(struct folio **foliop, gfp_t gfp,
>         __folio_set_locked(new);
>         __folio_set_swapbacked(new);
>         folio_mark_uptodate(new);
> -       folio_set_swap_entry(new, entry);
> +       new->swap = entry;
>         folio_set_swapcache(new);
>
>         /*
> @@ -1800,7 +1800,7 @@ static int shmem_swapin_folio(struct inode *inode, pgoff_t index,
>         /* We have to do this with folio locked to prevent races */
>         folio_lock(folio);
>         if (!folio_test_swapcache(folio) ||
> -           folio_swap_entry(folio).val != swap.val ||
> +           folio->swap.val != swap.val ||
>             !shmem_confirm_swap(mapping, index, swap)) {
>                 error = -EEXIST;
>                 goto unlock;
> diff --git a/mm/swap_state.c b/mm/swap_state.c
> index 2f2417810052..b3b14bd0dd64 100644
> --- a/mm/swap_state.c
> +++ b/mm/swap_state.c
> @@ -100,7 +100,7 @@ int add_to_swap_cache(struct folio *folio, swp_entry_t entry,
>
>         folio_ref_add(folio, nr);
>         folio_set_swapcache(folio);
> -       folio_set_swap_entry(folio, entry);
> +       folio->swap = entry;
>
>         do {
>                 xas_lock_irq(&xas);
> @@ -156,8 +156,7 @@ void __delete_from_swap_cache(struct folio *folio,
>                 VM_BUG_ON_PAGE(entry != folio, entry);
>                 xas_next(&xas);
>         }
> -       entry.val = 0;
> -       folio_set_swap_entry(folio, entry);
> +       folio->swap.val = 0;
>         folio_clear_swapcache(folio);
>         address_space->nrpages -= nr;
>         __node_stat_mod_folio(folio, NR_FILE_PAGES, -nr);
> @@ -233,7 +232,7 @@ bool add_to_swap(struct folio *folio)
>   */
>  void delete_from_swap_cache(struct folio *folio)
>  {
> -       swp_entry_t entry = folio_swap_entry(folio);
> +       swp_entry_t entry = folio->swap;
>         struct address_space *address_space = swap_address_space(entry);
>
>         xa_lock_irq(&address_space->i_pages);
> diff --git a/mm/swapfile.c b/mm/swapfile.c
> index bd9d904671b9..e52f486834eb 100644
> --- a/mm/swapfile.c
> +++ b/mm/swapfile.c
> @@ -1536,7 +1536,7 @@ static bool swap_page_trans_huge_swapped(struct swap_info_struct *si,
>
>  static bool folio_swapped(struct folio *folio)
>  {
> -       swp_entry_t entry = folio_swap_entry(folio);
> +       swp_entry_t entry = folio->swap;
>         struct swap_info_struct *si = _swap_info_get(entry);
>
>         if (!si)
> diff --git a/mm/util.c b/mm/util.c
> index cde229b05eb3..f31e2ca62cfa 100644
> --- a/mm/util.c
> +++ b/mm/util.c
> @@ -764,7 +764,7 @@ struct address_space *folio_mapping(struct folio *folio)
>                 return NULL;
>
>         if (unlikely(folio_test_swapcache(folio)))
> -               return swap_address_space(folio_swap_entry(folio));
> +               return swap_address_space(folio->swap);
>
>         mapping = folio->mapping;
>         if ((unsigned long)mapping & PAGE_MAPPING_FLAGS)
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index c7c149cb8d66..6f13394b112e 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -1423,7 +1423,7 @@ static int __remove_mapping(struct address_space *mapping, struct folio *folio,
>         }
>
>         if (folio_test_swapcache(folio)) {
> -               swp_entry_t swap = folio_swap_entry(folio);
> +               swp_entry_t swap = folio->swap;
>
>                 if (reclaimed && !mapping_exiting(mapping))
>                         shadow = workingset_eviction(folio, target_memcg);
> diff --git a/mm/zswap.c b/mm/zswap.c
> index 7300b98d4a03..412b1409a0d7 100644
> --- a/mm/zswap.c
> +++ b/mm/zswap.c
> @@ -1190,7 +1190,7 @@ static void zswap_fill_page(void *ptr, unsigned long value)
>
>  bool zswap_store(struct folio *folio)
>  {
> -       swp_entry_t swp = folio_swap_entry(folio);
> +       swp_entry_t swp = folio->swap;
>         int type = swp_type(swp);
>         pgoff_t offset = swp_offset(swp);
>         struct page *page = &folio->page;
> @@ -1370,7 +1370,7 @@ bool zswap_store(struct folio *folio)
>
>  bool zswap_load(struct folio *folio)
>  {
> -       swp_entry_t swp = folio_swap_entry(folio);
> +       swp_entry_t swp = folio->swap;
>         int type = swp_type(swp);
>         pgoff_t offset = swp_offset(swp);
>         struct page *page = &folio->page;
> --
> 2.41.0
>
>

WARNING: multiple messages have this Message-ID (diff)
From: Chris Li <chrisl@kernel.org>
To: David Hildenbrand <david@redhat.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	linux-mm <linux-mm@kvack.org>,
	 linux-arm-kernel@lists.infradead.org,
	 Andrew Morton <akpm@linux-foundation.org>,
	Matthew Wilcox <willy@infradead.org>,
	 Peter Xu <peterx@redhat.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	 Will Deacon <will@kernel.org>, Hugh Dickins <hughd@google.com>,
	Seth Jennings <sjenning@redhat.com>,
	 Dan Streetman <ddstreet@ieee.org>,
	Vitaly Wool <vitaly.wool@konsulko.com>
Subject: Re: [PATCH mm-unstable v1 3/4] mm/swap: inline folio_set_swap_entry() and folio_swap_entry()
Date: Wed, 23 Aug 2023 06:15:49 -0700	[thread overview]
Message-ID: <CAF8kJuMAt4ACLYE9fLwiqjdTjG82d0Nt_V4xKnrR-FejiQuX-w@mail.gmail.com> (raw)
In-Reply-To: <20230821160849.531668-4-david@redhat.com>

Reviewed-by: Chris Li <chrisl@kernel.org>

Chris

On Mon, Aug 21, 2023 at 9:09 AM David Hildenbrand <david@redhat.com> wrote:
>
> Let's simply work on the folio directly and remove the helpers.
>
> Suggested-by: Matthew Wilcox <willy@infradead.org>
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  include/linux/swap.h | 12 +-----------
>  mm/memory.c          |  2 +-
>  mm/shmem.c           |  6 +++---
>  mm/swap_state.c      |  7 +++----
>  mm/swapfile.c        |  2 +-
>  mm/util.c            |  2 +-
>  mm/vmscan.c          |  2 +-
>  mm/zswap.c           |  4 ++--
>  8 files changed, 13 insertions(+), 24 deletions(-)
>
> diff --git a/include/linux/swap.h b/include/linux/swap.h
> index 82859a1944f5..603acf813873 100644
> --- a/include/linux/swap.h
> +++ b/include/linux/swap.h
> @@ -333,25 +333,15 @@ struct swap_info_struct {
>                                            */
>  };
>
> -static inline swp_entry_t folio_swap_entry(struct folio *folio)
> -{
> -       return folio->swap;
> -}
> -
>  static inline swp_entry_t page_swap_entry(struct page *page)
>  {
>         struct folio *folio = page_folio(page);
> -       swp_entry_t entry = folio_swap_entry(folio);
> +       swp_entry_t entry = folio->swap;
>
>         entry.val += page - &folio->page;
>         return entry;
>  }
>
> -static inline void folio_set_swap_entry(struct folio *folio, swp_entry_t entry)
> -{
> -       folio->swap = entry;
> -}
> -
>  /* linux/mm/workingset.c */
>  bool workingset_test_recent(void *shadow, bool file, bool *workingset);
>  void workingset_age_nonresident(struct lruvec *lruvec, unsigned long nr_pages);
> diff --git a/mm/memory.c b/mm/memory.c
> index ff13242c1589..c51800dbfa9b 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -3831,7 +3831,7 @@ vm_fault_t do_swap_page(struct vm_fault *vmf)
>                                 folio_add_lru(folio);
>
>                                 /* To provide entry to swap_readpage() */
> -                               folio_set_swap_entry(folio, entry);
> +                               folio->swap = entry;
>                                 swap_readpage(page, true, NULL);
>                                 folio->private = NULL;
>                         }
> diff --git a/mm/shmem.c b/mm/shmem.c
> index 7a0c1e19d9f8..fc1afe9dfcfe 100644
> --- a/mm/shmem.c
> +++ b/mm/shmem.c
> @@ -1657,7 +1657,7 @@ static int shmem_replace_folio(struct folio **foliop, gfp_t gfp,
>         int error;
>
>         old = *foliop;
> -       entry = folio_swap_entry(old);
> +       entry = old->swap;
>         swap_index = swp_offset(entry);
>         swap_mapping = swap_address_space(entry);
>
> @@ -1678,7 +1678,7 @@ static int shmem_replace_folio(struct folio **foliop, gfp_t gfp,
>         __folio_set_locked(new);
>         __folio_set_swapbacked(new);
>         folio_mark_uptodate(new);
> -       folio_set_swap_entry(new, entry);
> +       new->swap = entry;
>         folio_set_swapcache(new);
>
>         /*
> @@ -1800,7 +1800,7 @@ static int shmem_swapin_folio(struct inode *inode, pgoff_t index,
>         /* We have to do this with folio locked to prevent races */
>         folio_lock(folio);
>         if (!folio_test_swapcache(folio) ||
> -           folio_swap_entry(folio).val != swap.val ||
> +           folio->swap.val != swap.val ||
>             !shmem_confirm_swap(mapping, index, swap)) {
>                 error = -EEXIST;
>                 goto unlock;
> diff --git a/mm/swap_state.c b/mm/swap_state.c
> index 2f2417810052..b3b14bd0dd64 100644
> --- a/mm/swap_state.c
> +++ b/mm/swap_state.c
> @@ -100,7 +100,7 @@ int add_to_swap_cache(struct folio *folio, swp_entry_t entry,
>
>         folio_ref_add(folio, nr);
>         folio_set_swapcache(folio);
> -       folio_set_swap_entry(folio, entry);
> +       folio->swap = entry;
>
>         do {
>                 xas_lock_irq(&xas);
> @@ -156,8 +156,7 @@ void __delete_from_swap_cache(struct folio *folio,
>                 VM_BUG_ON_PAGE(entry != folio, entry);
>                 xas_next(&xas);
>         }
> -       entry.val = 0;
> -       folio_set_swap_entry(folio, entry);
> +       folio->swap.val = 0;
>         folio_clear_swapcache(folio);
>         address_space->nrpages -= nr;
>         __node_stat_mod_folio(folio, NR_FILE_PAGES, -nr);
> @@ -233,7 +232,7 @@ bool add_to_swap(struct folio *folio)
>   */
>  void delete_from_swap_cache(struct folio *folio)
>  {
> -       swp_entry_t entry = folio_swap_entry(folio);
> +       swp_entry_t entry = folio->swap;
>         struct address_space *address_space = swap_address_space(entry);
>
>         xa_lock_irq(&address_space->i_pages);
> diff --git a/mm/swapfile.c b/mm/swapfile.c
> index bd9d904671b9..e52f486834eb 100644
> --- a/mm/swapfile.c
> +++ b/mm/swapfile.c
> @@ -1536,7 +1536,7 @@ static bool swap_page_trans_huge_swapped(struct swap_info_struct *si,
>
>  static bool folio_swapped(struct folio *folio)
>  {
> -       swp_entry_t entry = folio_swap_entry(folio);
> +       swp_entry_t entry = folio->swap;
>         struct swap_info_struct *si = _swap_info_get(entry);
>
>         if (!si)
> diff --git a/mm/util.c b/mm/util.c
> index cde229b05eb3..f31e2ca62cfa 100644
> --- a/mm/util.c
> +++ b/mm/util.c
> @@ -764,7 +764,7 @@ struct address_space *folio_mapping(struct folio *folio)
>                 return NULL;
>
>         if (unlikely(folio_test_swapcache(folio)))
> -               return swap_address_space(folio_swap_entry(folio));
> +               return swap_address_space(folio->swap);
>
>         mapping = folio->mapping;
>         if ((unsigned long)mapping & PAGE_MAPPING_FLAGS)
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index c7c149cb8d66..6f13394b112e 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -1423,7 +1423,7 @@ static int __remove_mapping(struct address_space *mapping, struct folio *folio,
>         }
>
>         if (folio_test_swapcache(folio)) {
> -               swp_entry_t swap = folio_swap_entry(folio);
> +               swp_entry_t swap = folio->swap;
>
>                 if (reclaimed && !mapping_exiting(mapping))
>                         shadow = workingset_eviction(folio, target_memcg);
> diff --git a/mm/zswap.c b/mm/zswap.c
> index 7300b98d4a03..412b1409a0d7 100644
> --- a/mm/zswap.c
> +++ b/mm/zswap.c
> @@ -1190,7 +1190,7 @@ static void zswap_fill_page(void *ptr, unsigned long value)
>
>  bool zswap_store(struct folio *folio)
>  {
> -       swp_entry_t swp = folio_swap_entry(folio);
> +       swp_entry_t swp = folio->swap;
>         int type = swp_type(swp);
>         pgoff_t offset = swp_offset(swp);
>         struct page *page = &folio->page;
> @@ -1370,7 +1370,7 @@ bool zswap_store(struct folio *folio)
>
>  bool zswap_load(struct folio *folio)
>  {
> -       swp_entry_t swp = folio_swap_entry(folio);
> +       swp_entry_t swp = folio->swap;
>         int type = swp_type(swp);
>         pgoff_t offset = swp_offset(swp);
>         struct page *page = &folio->page;
> --
> 2.41.0
>
>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2023-08-23 13:16 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-21 16:08 [PATCH mm-unstable v1 0/4] mm/swap: stop using page->private on tail pages for THP_SWAP + cleanups David Hildenbrand
2023-08-21 16:08 ` David Hildenbrand
2023-08-21 16:08 ` [PATCH mm-unstable v1 1/4] mm/swap: stop using page->private on tail pages for THP_SWAP David Hildenbrand
2023-08-21 16:08   ` David Hildenbrand
2023-08-22 16:24   ` Catalin Marinas
2023-08-22 16:24     ` Catalin Marinas
2023-08-22 17:00   ` Yosry Ahmed
2023-08-22 17:00     ` Yosry Ahmed
2023-08-22 17:14     ` David Hildenbrand
2023-08-22 17:14       ` David Hildenbrand
2023-08-23 12:15   ` David Hildenbrand
2023-08-23 12:15     ` David Hildenbrand
2023-08-23 15:12   ` Yosry Ahmed
2023-08-23 15:12     ` Yosry Ahmed
2023-08-23 15:17     ` David Hildenbrand
2023-08-23 15:17       ` David Hildenbrand
2023-08-23 15:21       ` Yosry Ahmed
2023-08-23 15:21         ` Yosry Ahmed
2023-08-23 15:26         ` David Hildenbrand
2023-08-23 15:26           ` David Hildenbrand
2023-08-23 15:31           ` Yosry Ahmed
2023-08-23 15:31             ` Yosry Ahmed
2023-08-21 16:08 ` [PATCH mm-unstable v1 2/4] mm/swap: use dedicated entry for swap in folio David Hildenbrand
2023-08-21 16:08   ` David Hildenbrand
2023-08-23 13:15   ` Chris Li
2023-08-23 13:15     ` Chris Li
2023-08-21 16:08 ` [PATCH mm-unstable v1 3/4] mm/swap: inline folio_set_swap_entry() and folio_swap_entry() David Hildenbrand
2023-08-21 16:08   ` David Hildenbrand
2023-08-23 13:15   ` Chris Li [this message]
2023-08-23 13:15     ` Chris Li
2023-08-21 16:08 ` [PATCH mm-unstable v1 4/4] mm/huge_memory: work on folio->swap instead of page->private when splitting folio David Hildenbrand
2023-08-21 16:08   ` David Hildenbrand
2023-08-23 13:16   ` Chris Li
2023-08-23 13:16     ` Chris Li

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAF8kJuMAt4ACLYE9fLwiqjdTjG82d0Nt_V4xKnrR-FejiQuX-w@mail.gmail.com \
    --to=chrisl@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=catalin.marinas@arm.com \
    --cc=david@redhat.com \
    --cc=ddstreet@ieee.org \
    --cc=hughd@google.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=peterx@redhat.com \
    --cc=sjenning@redhat.com \
    --cc=vitaly.wool@konsulko.com \
    --cc=will@kernel.org \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.