How to refer to the unamed structure in page struct
Dave Hylands
dhylands at gmail.com
Fri Nov 4 12:00:42 EDT 2011
Hi Jimmy,
On Fri, Nov 4, 2011 at 8:27 AM, Jimmy Pan <dspjm1 at gmail.com> wrote:
> truct page {
> unsigned long flags; /* Atomic flags, some possibly
> * updated asynchronously */
> atomic_t _count; /* Usage count, see below. */
> union {
> atomic_t _mapcount; /* Count of ptes mapped in mms,
> * to show when page is mapped
> * & limit reverse map searches.
> */
> struct { /* SLUB */
> u16 inuse;
> u16 objects;
> };
> };
> union {
> struct {
> unsigned long private; /* Mapping-private opaque data:
> * usually used for buffer_heads
> * if PagePrivate set; used for
> * swp_entry_t if PageSwapCache;
> * indicates order in the buddy
> * system if PG_buddy is set.
> */
> 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.
> */
> };
> #if USE_SPLIT_PTLOCKS
> spinlock_t ptl;
> #endif
> struct kmem_cache *slab; /* SLUB: Pointer to slab */
> struct page *first_page; /* Compound tail pages */
> };
You just reference the variable as if the unnamed union weren't there
(i.e. just like unnamed unions in C++).
Here's an example from the kernel source tree:
http://lxr.linux.no/linux+v3.1/include/linux/mm.h#L419
--
Dave Hylands
Shuswap, BC, Canada
http://www.davehylands.com
More information about the Kernelnewbies
mailing list