From: Fengguang Wu Always check for unbalanced aging in thrashing_recovery_readahead(), and account RA_EVENT_READAHEAD_MUTILATE/RA_EVENT_READAHEAD_THRASHING events. Unbalanced zone/node aging can come from abnormal system loads, or misconfigured NUMA policies. Thrashings are rare events, hence the cost of probe_page() is not a concern. Signed-off-by: Fengguang Wu Signed-off-by: Andrew Morton --- mm/readahead.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff -puN mm/readahead.c~readahead-thrashing-recovery-method-check-unbalanced-aging mm/readahead.c --- a/mm/readahead.c~readahead-thrashing-recovery-method-check-unbalanced-aging +++ a/mm/readahead.c @@ -1546,14 +1546,11 @@ thrashing_recovery_readahead(struct addr pgoff_t offset, unsigned long ra_max) { unsigned long ra_size; + int unbalanced_aging = probe_page(mapping, offset - 1); -#ifdef CONFIG_DEBUG_READAHEAD - if (probe_page(mapping, offset - 1)) - ra_account(ra, RA_EVENT_READAHEAD_MUTILATE, - ra->readahead_index - offset); - ra_account(ra, RA_EVENT_READAHEAD_THRASHING, - ra->readahead_index - offset); -#endif + ra_account(ra, unbalanced_aging ? RA_EVENT_READAHEAD_MUTILATE : + RA_EVENT_READAHEAD_THRASHING, + ra->readahead_index - offset); if (offset < ra->ra_index) { /* _