@@ -7292,16 +7292,17 @@ void __mem_cgroup_uncharge_list(struct list_head *page_list)
7292
7292
}
7293
7293
7294
7294
/**
7295
- * mem_cgroup_migrate - Charge a folio's replacement.
7295
+ * mem_cgroup_replace_folio - Charge a folio's replacement.
7296
7296
* @old: Currently circulating folio.
7297
7297
* @new: Replacement folio.
7298
7298
*
7299
7299
* Charge @new as a replacement folio for @old. @old will
7300
- * be uncharged upon free.
7300
+ * be uncharged upon free. This is only used by the page cache
7301
+ * (in replace_page_cache_folio()).
7301
7302
*
7302
7303
* Both folios must be locked, @new->mapping must be set up.
7303
7304
*/
7304
- void mem_cgroup_migrate (struct folio * old , struct folio * new )
7305
+ void mem_cgroup_replace_folio (struct folio * old , struct folio * new )
7305
7306
{
7306
7307
struct mem_cgroup * memcg ;
7307
7308
long nr_pages = folio_nr_pages (new );
@@ -7340,6 +7341,39 @@ void mem_cgroup_migrate(struct folio *old, struct folio *new)
7340
7341
local_irq_restore (flags );
7341
7342
}
7342
7343
7344
+ /**
7345
+ * mem_cgroup_migrate - Transfer the memcg data from the old to the new folio.
7346
+ * @old: Currently circulating folio.
7347
+ * @new: Replacement folio.
7348
+ *
7349
+ * Transfer the memcg data from the old folio to the new folio for migration.
7350
+ * The old folio's data info will be cleared. Note that the memory counters
7351
+ * will remain unchanged throughout the process.
7352
+ *
7353
+ * Both folios must be locked, @new->mapping must be set up.
7354
+ */
7355
+ void mem_cgroup_migrate (struct folio * old , struct folio * new )
7356
+ {
7357
+ struct mem_cgroup * memcg ;
7358
+
7359
+ VM_BUG_ON_FOLIO (!folio_test_locked (old ), old );
7360
+ VM_BUG_ON_FOLIO (!folio_test_locked (new ), new );
7361
+ VM_BUG_ON_FOLIO (folio_test_anon (old ) != folio_test_anon (new ), new );
7362
+ VM_BUG_ON_FOLIO (folio_nr_pages (old ) != folio_nr_pages (new ), new );
7363
+
7364
+ if (mem_cgroup_disabled ())
7365
+ return ;
7366
+
7367
+ memcg = folio_memcg (old );
7368
+ VM_WARN_ON_ONCE_FOLIO (!memcg , old );
7369
+ if (!memcg )
7370
+ return ;
7371
+
7372
+ /* Transfer the charge and the css ref */
7373
+ commit_charge (new , memcg );
7374
+ old -> memcg_data = 0 ;
7375
+ }
7376
+
7343
7377
DEFINE_STATIC_KEY_FALSE (memcg_sockets_enabled_key );
7344
7378
EXPORT_SYMBOL (memcg_sockets_enabled_key );
7345
7379
0 commit comments