Re: [PATCH v1 04/11] mm: migrate: remove migrate_folio_extra()

Miaohe Lin <[email protected]>
Newsgroups gmane.linux.kernel.aio.general,gmane.linux.file-systems,gmane.linux.kernel.mm
Message-ID <[email protected]>
On 2024/4/17 9:43, Kefeng Wang wrote:
> 
> 
> On 2024/4/16 20:40, Miaohe Lin wrote:
>> On 2024/3/21 11:27, Kefeng Wang wrote:
>>> The migrate_folio_extra() only called in migrate.c now, convert it
>>> a static function and take a new src_private argument which could
>>> be shared by migrate_folio() and filemap_migrate_folio() to simplify
>>> code a bit.
>>>
>>> Signed-off-by: Kefeng Wang <[email protected]>
>>> ---
>>>   include/linux/migrate.h |  2 --
>>>   mm/migrate.c            | 33 +++++++++++----------------------
>>>   2 files changed, 11 insertions(+), 24 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 cb4cbaa42a35..c006b0b44013 100644
>>> --- a/mm/migrate.c
>>> +++ b/mm/migrate.c
>>> @@ -658,18 +658,19 @@ 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, void *src_private,
>>> +               enum migrate_mode mode)
>>>   {
>>>       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)
>>
>> src_private seems unneeded. It can be replaced with folio_get_private(src)?
>>
> 
> __migrate_folio() is used by migrate_folio() and filemap_migrate_folio(),
> but migrate_folio() is for LRU folio, when swapcache folio, the
> folio->private is handled from folio_migrate_mapping(), we should not
> try to call folio_detach_private/folio_attach_private().

I see. Swapcache folio will use private field while without using PagePrivate/PagePrivate2.
We can't handle this case if src_private is removed.
Thanks.
.

> 
>> Thanks.
>> .
> .


--
To unsubscribe, send a message with 'unsubscribe linux-aio' in
the body to [email protected].  For more info on Linux AIO,
see: http://www.kvack.org/aio/
Don't email: <a href=mailto:"[email protected]">[email protected]</a>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.