@@ -5420,6 +5420,8 @@ static int mem_cgroup_move_account(struct page *page,
5420
5420
struct mem_cgroup * from ,
5421
5421
struct mem_cgroup * to )
5422
5422
{
5423
+ struct lruvec * from_vec , * to_vec ;
5424
+ struct pglist_data * pgdat ;
5423
5425
unsigned long flags ;
5424
5426
unsigned int nr_pages = compound ? hpage_nr_pages (page ) : 1 ;
5425
5427
int ret ;
@@ -5443,11 +5445,15 @@ static int mem_cgroup_move_account(struct page *page,
5443
5445
5444
5446
anon = PageAnon (page );
5445
5447
5448
+ pgdat = page_pgdat (page );
5449
+ from_vec = mem_cgroup_lruvec (pgdat , from );
5450
+ to_vec = mem_cgroup_lruvec (pgdat , to );
5451
+
5446
5452
spin_lock_irqsave (& from -> move_lock , flags );
5447
5453
5448
5454
if (!anon && page_mapped (page )) {
5449
- __mod_memcg_state ( from , NR_FILE_MAPPED , - nr_pages );
5450
- __mod_memcg_state ( to , NR_FILE_MAPPED , nr_pages );
5455
+ __mod_lruvec_state ( from_vec , NR_FILE_MAPPED , - nr_pages );
5456
+ __mod_lruvec_state ( to_vec , NR_FILE_MAPPED , nr_pages );
5451
5457
}
5452
5458
5453
5459
/*
@@ -5459,14 +5465,14 @@ static int mem_cgroup_move_account(struct page *page,
5459
5465
struct address_space * mapping = page_mapping (page );
5460
5466
5461
5467
if (mapping_cap_account_dirty (mapping )) {
5462
- __mod_memcg_state ( from , NR_FILE_DIRTY , - nr_pages );
5463
- __mod_memcg_state ( to , NR_FILE_DIRTY , nr_pages );
5468
+ __mod_lruvec_state ( from_vec , NR_FILE_DIRTY , - nr_pages );
5469
+ __mod_lruvec_state ( to_vec , NR_FILE_DIRTY , nr_pages );
5464
5470
}
5465
5471
}
5466
5472
5467
5473
if (PageWriteback (page )) {
5468
- __mod_memcg_state ( from , NR_WRITEBACK , - nr_pages );
5469
- __mod_memcg_state ( to , NR_WRITEBACK , nr_pages );
5474
+ __mod_lruvec_state ( from_vec , NR_WRITEBACK , - nr_pages );
5475
+ __mod_lruvec_state ( to_vec , NR_WRITEBACK , nr_pages );
5470
5476
}
5471
5477
5472
5478
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
0 commit comments