diff --git a/include/linux/vm_event_item.h b/include/linux/vm_event_item.h index 8958827baa49..83ecc8762747 100644 --- a/include/linux/vm_event_item.h +++ b/include/linux/vm_event_item.h @@ -22,7 +22,7 @@ #define FOR_ALL_ZONES(xx) DMA_ZONE(xx) DMA32_ZONE(xx) xx##_NORMAL, HIGHMEM_ZONE(xx) xx##_MOVABLE -enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, +enum vm_event_item { PGPGIN, PGPGOUT, PGPGOUTCLEAN, PSWPIN, PSWPOUT, FOR_ALL_ZONES(PGALLOC), FOR_ALL_ZONES(ALLOCSTALL), FOR_ALL_ZONES(PGSCAN_SKIP), diff --git a/mm/filemap.c b/mm/filemap.c index b464f9589ba5..aea71dc89dcd 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -194,10 +194,12 @@ static void unaccount_page_cache_page(struct address_space *mapping, * invalidate any existing cleancache entries. We can't leave * stale data around in the cleancache once our page is gone */ - if (PageUptodate(page) && PageMappedToDisk(page)) + if (PageUptodate(page) && PageMappedToDisk(page)) { + count_vm_event(PGPGOUTCLEAN); cleancache_put_page(page); - else + } else { cleancache_invalidate_page(mapping, page); + } VM_BUG_ON_PAGE(PageTail(page), page); VM_BUG_ON_PAGE(page_mapped(page), page); diff --git a/mm/vmstat.c b/mm/vmstat.c index 3ce0b102dc43..544c5213aca2 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1176,6 +1176,7 @@ const char * const vmstat_text[] = { /* enum vm_event_item counters */ "pgpgin", "pgpgout", + "pgpgoutclean", "pswpin", "pswpout",