From: Jan Kara <jack@suse.cz> To: linux-mm@kvack.org Cc: mhocko@suse.cz, mgorman@suse.de, Jan Kara <jack@suse.cz> Subject: [PATCH 1/6] mm: migration: Factor out code to compute expected number of page references Date: Tue, 11 Dec 2018 18:21:38 +0100 [thread overview] Message-ID: <20181211172143.7358-2-jack@suse.cz> (raw) In-Reply-To: <20181211172143.7358-1-jack@suse.cz> Factor out function to compute number of expected page references in migrate_page_move_mapping(). Note that we move hpage_nr_pages() and page_has_private() checks from under xas_lock_irq() however this is safe since we hold page lock. Signed-off-by: Jan Kara <jack@suse.cz> --- mm/migrate.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/mm/migrate.c b/mm/migrate.c index f7e4bfdc13b7..789c7bc90a0c 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -428,6 +428,22 @@ static inline bool buffer_migrate_lock_buffers(struct buffer_head *head, } #endif /* CONFIG_BLOCK */ +static int expected_page_refs(struct page *page) +{ + int expected_count = 1; + + /* + * Device public or private pages have an extra refcount as they are + * ZONE_DEVICE pages. + */ + expected_count += is_device_private_page(page); + expected_count += is_device_public_page(page); + if (page->mapping) + expected_count += hpage_nr_pages(page) + page_has_private(page); + + return expected_count; +} + /* * Replace the page in the mapping. * @@ -444,14 +460,7 @@ int migrate_page_move_mapping(struct address_space *mapping, XA_STATE(xas, &mapping->i_pages, page_index(page)); struct zone *oldzone, *newzone; int dirty; - int expected_count = 1 + extra_count; - - /* - * Device public or private pages have an extra refcount as they are - * ZONE_DEVICE pages. - */ - expected_count += is_device_private_page(page); - expected_count += is_device_public_page(page); + int expected_count = expected_page_refs(page) + extra_count; if (!mapping) { /* Anonymous page without mapping */ @@ -471,8 +480,6 @@ int migrate_page_move_mapping(struct address_space *mapping, newzone = page_zone(newpage); xas_lock_irq(&xas); - - expected_count += hpage_nr_pages(page) + page_has_private(page); if (page_count(page) != expected_count || xas_load(&xas) != page) { xas_unlock_irq(&xas); return -EAGAIN; -- 2.16.4
next prev parent reply other threads:[~2018-12-11 17:21 UTC|newest] Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-12-11 17:21 mm: migrate: Fix page migration stalls for blkdev pages Jan Kara 2018-12-11 17:21 ` Jan Kara [this message] 2018-12-13 13:05 ` [PATCH 1/6] mm: migration: Factor out code to compute expected number of page references Mel Gorman 2018-12-14 15:10 ` Mel Gorman 2018-12-14 15:53 ` Jan Kara 2018-12-14 16:24 ` Mel Gorman 2018-12-17 13:11 ` Jan Kara 2018-12-11 17:21 ` [PATCH 2/6] mm: migrate: Lock buffers before migrate_page_move_mapping() Jan Kara 2018-12-13 14:19 ` Mel Gorman 2018-12-11 17:21 ` [PATCH 3/6] mm: migrate: Move migrate_page_lock_buffers() Jan Kara 2018-12-13 14:57 ` Mel Gorman 2018-12-11 17:21 ` [PATCH 4/6] mm: migrate: Provide buffer_migrate_page_norefs() Jan Kara 2018-12-13 15:34 ` Mel Gorman 2018-12-14 4:53 ` Andrew Morton 2018-12-14 9:26 ` Jan Kara 2018-12-11 17:21 ` [PATCH 5/6] blkdev: Avoid migration stalls for blkdev pages Jan Kara 2018-12-13 15:35 ` Mel Gorman 2018-12-11 17:21 ` [PATCH 6/6] mm: migrate: Drop unused argument of migrate_page_move_mapping() Jan Kara 2018-12-13 15:35 ` Mel Gorman 2018-12-13 16:17 ` Jan Kara 2018-12-17 13:17 ` Jan Kara
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=20181211172143.7358-2-jack@suse.cz \ --to=jack@suse.cz \ --cc=linux-mm@kvack.org \ --cc=mgorman@suse.de \ --cc=mhocko@suse.cz \ --subject='Re: [PATCH 1/6] mm: migration: Factor out code to compute expected number of page references' \ /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
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.