All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthew Wilcox <willy@infradead.org>
To: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	linux-mm@kvack.org, Tony Luck <tony.luck@intel.com>,
	Naoya Horiguchi <naoya.horiguchi@nec.com>,
	Miaohe Lin <linmiaohe@huawei.com>,
	David Hildenbrand <david@redhat.com>,
	Muchun Song <muchun.song@linux.dev>,
	Benjamin LaHaise <bcrl@kvack.org>,
	jglisse@redhat.com, linux-aio@kvack.org,
	linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH rfc 3/9] mm: migrate: remove migrate_folio_extra()
Date: Thu, 1 Feb 2024 20:09:49 +0000	[thread overview]
Message-ID: <Zbv6jSYvUhtNWlPk@casper.infradead.org> (raw)
In-Reply-To: <20240129070934.3717659-4-wangkefeng.wang@huawei.com>

On Mon, Jan 29, 2024 at 03:09:28PM +0800, Kefeng Wang wrote:
> Convert migrate_folio_extra() to __migrate_folio() which will be used
> by migrate_folio() and filemap_migrate_folio(), also directly call
> folio_migrate_mapping() in __migrate_device_pages() to simplify code.

This feels like two patches?  First convert __migrate_device_pages()
then do the other thing?

> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
> ---
>  include/linux/migrate.h |  2 --
>  mm/migrate.c            | 32 +++++++++++---------------------
>  mm/migrate_device.c     | 13 +++++++------
>  3 files changed, 18 insertions(+), 29 deletions(-)
> 
> diff --git a/include/linux/migrate.h b/include/linux/migrate.h
> index 2ce13e8a309b..517f70b70620 100644
> --- a/include/linux/migrate.h
> +++ b/include/linux/migrate.h
> @@ -63,8 +63,6 @@ extern const char *migrate_reason_names[MR_TYPES];
>  #ifdef CONFIG_MIGRATION
>  
>  void putback_movable_pages(struct list_head *l);
> -int migrate_folio_extra(struct address_space *mapping, struct folio *dst,
> -		struct folio *src, enum migrate_mode mode, int extra_count);
>  int migrate_folio(struct address_space *mapping, struct folio *dst,
>  		struct folio *src, enum migrate_mode mode);
>  int migrate_pages(struct list_head *l, new_folio_t new, free_folio_t free,
> diff --git a/mm/migrate.c b/mm/migrate.c
> index cdae25b7105f..a51ceebbe3b1 100644
> --- a/mm/migrate.c
> +++ b/mm/migrate.c
> @@ -655,22 +655,24 @@ EXPORT_SYMBOL(folio_migrate_copy);
>   *                    Migration functions
>   ***********************************************************/
>  
> -int migrate_folio_extra(struct address_space *mapping, struct folio *dst,
> -		struct folio *src, enum migrate_mode mode, int extra_count)
> +static int __migrate_folio(struct address_space *mapping, struct folio *dst,
> +			   struct folio *src, enum migrate_mode mode,
> +			   void *src_private)
>  {
>  	int rc;
>  
> -	BUG_ON(folio_test_writeback(src));	/* Writeback must be complete */
> -
> -	rc = folio_migrate_mapping(mapping, dst, src, extra_count);
> -
> +	rc = folio_migrate_mapping(mapping, dst, src, 0);
>  	if (rc != MIGRATEPAGE_SUCCESS)
>  		return rc;
>  
> +	if (src_private)
> +		folio_attach_private(dst, folio_detach_private(src));
> +
>  	if (mode != MIGRATE_SYNC_NO_COPY)
>  		folio_migrate_copy(dst, src);
>  	else
>  		folio_migrate_flags(dst, src);
> +
>  	return MIGRATEPAGE_SUCCESS;
>  }
>  
> @@ -689,7 +691,8 @@ int migrate_folio_extra(struct address_space *mapping, struct folio *dst,
>  int migrate_folio(struct address_space *mapping, struct folio *dst,
>  		struct folio *src, enum migrate_mode mode)
>  {
> -	return migrate_folio_extra(mapping, dst, src, mode, 0);
> +	BUG_ON(folio_test_writeback(src));	/* Writeback must be complete */
> +	return __migrate_folio(mapping, dst, src, mode, NULL);
>  }
>  EXPORT_SYMBOL(migrate_folio);
>  
> @@ -843,20 +846,7 @@ EXPORT_SYMBOL_GPL(buffer_migrate_folio_norefs);
>  int filemap_migrate_folio(struct address_space *mapping,
>  		struct folio *dst, struct folio *src, enum migrate_mode mode)
>  {
> -	int ret;
> -
> -	ret = folio_migrate_mapping(mapping, dst, src, 0);
> -	if (ret != MIGRATEPAGE_SUCCESS)
> -		return ret;
> -
> -	if (folio_get_private(src))
> -		folio_attach_private(dst, folio_detach_private(src));
> -
> -	if (mode != MIGRATE_SYNC_NO_COPY)
> -		folio_migrate_copy(dst, src);
> -	else
> -		folio_migrate_flags(dst, src);
> -	return MIGRATEPAGE_SUCCESS;
> +	return __migrate_folio(mapping, dst, src, mode, folio_get_private(src));
>  }
>  EXPORT_SYMBOL_GPL(filemap_migrate_folio);
>  
> diff --git a/mm/migrate_device.c b/mm/migrate_device.c
> index d49a48d87d72..bea71d69295a 100644
> --- a/mm/migrate_device.c
> +++ b/mm/migrate_device.c
> @@ -695,7 +695,7 @@ static void __migrate_device_pages(unsigned long *src_pfns,
>  		struct page *page = migrate_pfn_to_page(src_pfns[i]);
>  		struct address_space *mapping;
>  		struct folio *newfolio, *folio;
> -		int r;
> +		int r, extra_cnt = 0;
>  
>  		if (!newpage) {
>  			src_pfns[i] &= ~MIGRATE_PFN_MIGRATE;
> @@ -757,14 +757,15 @@ static void __migrate_device_pages(unsigned long *src_pfns,
>  			continue;
>  		}
>  
> +		BUG_ON(folio_test_writeback(folio));
> +
>  		if (migrate && migrate->fault_page == page)
> -			r = migrate_folio_extra(mapping, newfolio, folio,
> -						MIGRATE_SYNC_NO_COPY, 1);
> -		else
> -			r = migrate_folio(mapping, newfolio, folio,
> -					  MIGRATE_SYNC_NO_COPY);
> +			extra_cnt = 1;
> +		r = folio_migrate_mapping(mapping, newfolio, folio, extra_cnt);
>  		if (r != MIGRATEPAGE_SUCCESS)
>  			src_pfns[i] &= ~MIGRATE_PFN_MIGRATE;
> +		else
> +			folio_migrate_flags(newfolio, folio);
>  	}
>  
>  	if (notified)
> -- 
> 2.27.0
> 

  reply	other threads:[~2024-02-01 20:10 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-29  7:09 [PATCH rfc 0/9] mm: migrate: support poison recover from migrate folio Kefeng Wang
2024-01-29  7:09 ` [PATCH rfc 1/9] mm: migrate: simplify __buffer_migrate_folio() Kefeng Wang
2024-02-01 19:12   ` Matthew Wilcox
2024-01-29  7:09 ` [PATCH rfc 2/9] mm: migrate_device: use more folio in __migrate_device_pages() Kefeng Wang
2024-02-01 19:27   ` Matthew Wilcox
2024-02-02  2:44     ` Kefeng Wang
2024-01-29  7:09 ` [PATCH rfc 3/9] mm: migrate: remove migrate_folio_extra() Kefeng Wang
2024-02-01 20:09   ` Matthew Wilcox [this message]
2024-02-02  2:46     ` Kefeng Wang
2024-01-29  7:09 ` [PATCH rfc 4/9] mm: remove MIGRATE_SYNC_NO_COPY mode Kefeng Wang
2024-02-01 20:23   ` Matthew Wilcox
2024-01-29  7:09 ` [PATCH rfc 5/9] mm: add folio_mc_copy() Kefeng Wang
2024-01-29  7:09 ` [PATCH rfc 6/9] mm: migrate: support poisoned recover from migrate folio Kefeng Wang
2024-02-01 20:34   ` Matthew Wilcox
2024-02-02  3:04     ` Kefeng Wang
2024-02-02  9:06       ` Kefeng Wang
2024-01-29  7:09 ` [PATCH rfc 7/9] fs: hugetlbfs: support poison recover from hugetlbfs_migrate_folio() Kefeng Wang
2024-01-29  7:09 ` [PATCH rfc 8/9] mm: migrate: remove folio_migrate_copy() Kefeng Wang
2024-01-29  7:09 ` [PATCH rfc 9/9] fs: aio: add explicit check for large folio in aio_migrate_folio() Kefeng Wang

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=Zbv6jSYvUhtNWlPk@casper.infradead.org \
    --to=willy@infradead.org \
    --cc=akpm@linux-foundation.org \
    --cc=bcrl@kvack.org \
    --cc=david@redhat.com \
    --cc=jglisse@redhat.com \
    --cc=linmiaohe@huawei.com \
    --cc=linux-aio@kvack.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=muchun.song@linux.dev \
    --cc=naoya.horiguchi@nec.com \
    --cc=tony.luck@intel.com \
    --cc=wangkefeng.wang@huawei.com \
    /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.