From: "Martin J. Bligh" <mbligh@aracnet.com>,
Guillaume Morin <guillaume@morinfr.org>
We need to clear the software dirty bit on the tail pages of a compound page
when freeing it up.
The tail pages can become dirtied by mmap'ing /dev/mem, and writing into
any clustered page group (that a driver might have created or whatever).
Plus it's better to run all these pages through the free_pages_check checks
anyway.
void __free_pages_ok(struct page *page, unsigned int order)
{
LIST_HEAD(list);
+ int i;
mod_page_state(pgfree, 1 << order);
- free_pages_check(__FUNCTION__, page);
+ for (i = 0 ; i < (1 << order) ; ++i)
+ free_pages_check(__FUNCTION__, page + i);
list_add(&page->list, &list);
kernel_map_pages(page, 1<<order, 0);
free_pages_bulk(page_zone(page), 1, &list, order);