#include <linux/mm.h>
-static inline void set_page_refs(struct page *page, int order)
+static inline void set_page_count(struct page *page, int v)
{
-#ifdef CONFIG_MMU
- set_page_count(page, 1);
-#else
- int i;
+ atomic_set(&page->_count, v);
+}
- /*
- * We need to reference all the pages for this order, otherwise if
- * anyone accesses one of the pages with (get/put) it will be freed.
- * - eg: access_process_vm()
- */
- for (i = 0; i < (1 << order); i++)
- set_page_count(page + i, 1);
-#endif /* CONFIG_MMU */
+/*
+ * Turn a non-refcounted page (->_count == 0) into refcounted with
+ * a count of one.
+ */
+static inline void set_page_refcounted(struct page *page)
+{
+ VM_BUG_ON(PageCompound(page) && PageTail(page));
+ VM_BUG_ON(atomic_read(&page->_count));
+ set_page_count(page, 1);
}
static inline void __put_page(struct page *page)