|
@@ -42,18 +42,22 @@ struct page {
|
|
|
/* First double word block */
|
|
|
unsigned long flags; /* Atomic flags, some possibly
|
|
|
* updated asynchronously */
|
|
|
- struct address_space *mapping; /* If low bit clear, points to
|
|
|
- * inode address_space, or NULL.
|
|
|
- * If page mapped as anonymous
|
|
|
- * memory, low bit is set, and
|
|
|
- * it points to anon_vma object:
|
|
|
- * see PAGE_MAPPING_ANON below.
|
|
|
- */
|
|
|
+ union {
|
|
|
+ struct address_space *mapping; /* If low bit clear, points to
|
|
|
+ * inode address_space, or NULL.
|
|
|
+ * If page mapped as anonymous
|
|
|
+ * memory, low bit is set, and
|
|
|
+ * it points to anon_vma object:
|
|
|
+ * see PAGE_MAPPING_ANON below.
|
|
|
+ */
|
|
|
+ void *s_mem; /* slab first object */
|
|
|
+ };
|
|
|
+
|
|
|
/* Second double word */
|
|
|
struct {
|
|
|
union {
|
|
|
pgoff_t index; /* Our offset within mapping. */
|
|
|
- void *freelist; /* slub/slob first free object */
|
|
|
+ void *freelist; /* sl[aou]b first free object */
|
|
|
bool pfmemalloc; /* If set by the page allocator,
|
|
|
* ALLOC_NO_WATERMARKS was set
|
|
|
* and the low watermark was not
|
|
@@ -109,6 +113,7 @@ struct page {
|
|
|
};
|
|
|
atomic_t _count; /* Usage count, see below. */
|
|
|
};
|
|
|
+ unsigned int active; /* SLAB */
|
|
|
};
|
|
|
};
|
|
|
|
|
@@ -130,6 +135,9 @@ struct page {
|
|
|
|
|
|
struct list_head list; /* slobs list of pages */
|
|
|
struct slab *slab_page; /* slab fields */
|
|
|
+ struct rcu_head rcu_head; /* Used by SLAB
|
|
|
+ * when destroying via RCU
|
|
|
+ */
|
|
|
};
|
|
|
|
|
|
/* Remainder is not double word aligned */
|