History

mm/swap: fix swap cache memcg accounting

The swap readahead path was recently refactored and while doing this, the order between the charging of the folio in the memcg and the addition of the folio in the swap cache was inverted. Since the accounting of the folio is done while adding the folio to the swap cache and the folio is not charged in the memcg yet, the accounting is then done at the node level, which is wrong. Fix this by charging the folio in the memcg before adding it to the swap cache.

Alexandre Ghiti committed 8 months ago

Commit 9e0d0dd1 parent 26d3dca1 file · +4 −5Browse files

Unified · Split

mm/swap_state.c+4−5
@@ -494,6 +494,10 @@ static struct folio *__swap_cache_prepare_and_add(swp_entry_t entry, · 493 unmodified lines
494494
495495 __folio_set_locked(folio);
496496 __folio_set_swapbacked(folio);
497+
498+ if (!charged && mem_cgroup_swapin_charge_folio(folio, NULL, gfp, entry))
499+ goto failed;
500+
497501 for (;;) {
498502 ret = swap_cache_add_folio(folio, entry, &shadow);
499503 if (!ret)
@@ -514,11 +518,6 @@ static struct folio *__swap_cache_prepare_and_add(swp_entry_t entry, · 14 unmodified lines
514518 goto failed;
515519 }
516520
517− if (!charged && mem_cgroup_swapin_charge_folio(folio, NULL, gfp, entry)) {
518− swap_cache_del_folio(folio);
519− goto failed;
520− }
521−
522521 memcg1_swapin(entry, folio_nr_pages(folio));
523522 if (shadow)
524523 workingset_refault(folio, shadow);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t