Messages in this thread | | | Subject | Re: [PATCH 10/10] mm/migrate.c: call detach_page_private to cleanup code | From | Guoqing Jiang <> | Date | Sun, 24 May 2020 21:02:10 +0200 |
| |
On 5/23/20 1:53 AM, Andrew Morton wrote: > On Fri, 22 May 2020 09:18:25 +0200 Guoqing Jiang <guoqing.jiang@cloud.ionos.com> wrote: > >>>> - ClearPagePrivate(page); >>>> - set_page_private(newpage, page_private(page)); >>>> - set_page_private(page, 0); >>>> - put_page(page); >>>> + set_page_private(newpage, detach_page_private(page)); >>> attach_page_private(newpage, detach_page_private(page)); >> Mattew had suggested it as follows, but not sure if we can reorder of >> the setup of >> the bh and setting PagePrivate, so I didn't want to break the original >> syntax. >> >> @@ -797,11 +797,7 @@ static int __buffer_migrate_page(struct address_space *mapping, >> if (rc != MIGRATEPAGE_SUCCESS) >> goto unlock_buffers; >> >> - ClearPagePrivate(page); >> - set_page_private(newpage, page_private(page)); >> - set_page_private(page, 0); >> - put_page(page); >> - get_page(newpage); >> + attach_page_private(newpage, detach_page_private(page)); >> >> bh = head; >> do { >> @@ -810,8 +806,6 @@ static int __buffer_migrate_page(struct address_space *mapping, >> >> } while (bh != head); >> >> - SetPagePrivate(newpage); >> - >> if (mode != MIGRATE_SYNC_NO_COPY) > This is OK - coherency between PG_private and the page's buffer > ring is maintained by holding lock_page().
Appreciate for your explanation.
Thanks, Guoqing
> I have (effectively) applied the above change.
| |