On Wed, 15 Jun 2011, [email protected] wrote:
> From: Andrea Arcangeli <[email protected]>
>
> swapcache will reach the below code path in migrate_page_move_mapping,
> and swapcache is accounted as NR_FILE_PAGES but it's not accounted as
> NR_SHMEM.
>
> This can make the NR_SHMEM counter underflow.
>
> Signed-off-by: Andrea Arcangeli <[email protected]>
> Reviewed-by: Minchan Kim <[email protected]>
> Acked-by: Mel Gorman <[email protected]>
> Cc: KOSAKI Motohiro <[email protected]>
> Cc: Hugh Dickins <[email protected]>
> Cc: <[email protected]>
> Signed-off-by: Andrew Morton <[email protected]>
> ---
>
> mm/migrate.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff -puN mm/migrate.c~mm-migratec-dont-account-swapcache-as-shmem
> mm/migrate.c
> --- a/mm/migrate.c~mm-migratec-dont-account-swapcache-as-shmem
> +++ a/mm/migrate.c
> @@ -288,7 +288,7 @@ static int migrate_page_move_mapping(str
> */
> __dec_zone_page_state(page, NR_FILE_PAGES);
> __inc_zone_page_state(newpage, NR_FILE_PAGES);
> - if (PageSwapBacked(page)) {
> + if (mapping != &swapper_space && PageSwapBacked(page)) {
> __dec_zone_page_state(page, NR_SHMEM);
> __inc_zone_page_state(newpage, NR_SHMEM);
> }
> _
This one breaks the CONFIG_MIGRATION=y CONFIG_SWAP=n build,
because of the reference to swapper_space.
Noticing that now, I was about to follow up with a patch changing test to
if (PageSwapBacked(page) && !PageSwapCache(page)) {
as Mel had the good instinct to suggest originally.
But then I read the comment above it which says "Note that anonymous
pages are accounted for via NR_FILE_PAGES and NR_ANON_PAGES if they
are mapped to swap space". So shouldn't we actually be adjusting
NR_ANON_PAGES in that case??
If I'm not too late, let's hold back this patch for the moment.
Hugh
_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable