/* When a unknown page type is encountered drain as many buffers as possible in the hope to turn the page into a LRU or free page, which we can handle.  */
void shake_page(struct page *p, int access)
/* When a unknown page type is encountered drain as many buffers as possible in the hope to turn the page into a LRU or free page, which we can handle.  */
void shake_page(struct page *p, int access)
{
	if (!PageSlab(p)) {
		lru_add_drain_all();
		if (PageLRU(p))
			return;
		drain_all_pages();
		if (PageLRU(p) || is_free_buddy_page(p))
			return;
	}
	if (access) {
		int nr;
		do {
			nr = shrink_slab(1000, GFP_KERNEL, 1000);
			if (page_count(p) == 0)
				break;
		} while (nr > 10);
	}
}