mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
mm/migrate: make migrate_pages_batch() stats consistent
As Ying pointed out in [1], stats->nr_thp_failed needs to be updated to
avoid stats inconsistency between MIGRATE_SYNC and MIGRATE_ASYNC when
calling migrate_pages_batch().
Because if not, when migrate_pages_batch() is called via
migrate_pages(MIGRATE_ASYNC), nr_thp_failed will not be increased and when
migrate_pages_batch() is called via migrate_pages(MIGRATE_SYNC*),
nr_thp_failed will be increase in migrate_pages_sync() by
stats->nr_thp_failed += astats.nr_thp_split.
[1] https://lore.kernel.org/linux-mm/87msnq7key.fsf@yhuang6-desk2.ccr.corp.intel.com/
Link: https://lkml.kernel.org/r/20240620012712.19804-1-zi.yan@sent.com
Link: https://lkml.kernel.org/r/20240618134151.29214-1-zi.yan@sent.com
Fixes: 7262f208ca
("mm/migrate: split source folio if it is on deferred split list")
Signed-off-by: Zi Yan <ziy@nvidia.com>
Suggested-by: "Huang, Ying" <ying.huang@intel.com>
Reviewed-by: "Huang, Ying" <ying.huang@intel.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Yang Shi <shy828301@gmail.com>
Cc: Yin Fengwei <fengwei.yin@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
f3228a2d4c
commit
c640825070
@ -1659,6 +1659,10 @@ static int migrate_pages_batch(struct list_head *from,
|
||||
* migrate_pages() may report success with (split but
|
||||
* unmigrated) pages still on its fromlist; whereas it
|
||||
* always reports success when its fromlist is empty.
|
||||
* stats->nr_thp_failed should be increased too,
|
||||
* otherwise stats inconsistency will happen when
|
||||
* migrate_pages_batch is called via migrate_pages()
|
||||
* with MIGRATE_SYNC and MIGRATE_ASYNC.
|
||||
*
|
||||
* Only check it without removing it from the list.
|
||||
* Since the folio can be on deferred_split_scan()
|
||||
@ -1675,6 +1679,7 @@ static int migrate_pages_batch(struct list_head *from,
|
||||
!list_empty(&folio->_deferred_list)) {
|
||||
if (try_split_folio(folio, split_folios) == 0) {
|
||||
nr_failed++;
|
||||
stats->nr_thp_failed += is_thp;
|
||||
stats->nr_thp_split += is_thp;
|
||||
stats->nr_split++;
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user