Hi Jimmy, On Fri, Nov 4, 2011 at 8:27 AM, Jimmy Pan <dspjm1@xxxxxxxxx> 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 ÿôèº{.nÇ+?·?®??+%?Ëÿ±éݶ¥?wÿº{.nÇ+?·¤z¹Þ?øÚ?+h®Ïâ?Ø^n?r¡ö¦zË?ëh?¨èÚ&£ûàz¿äz¹Þ?ú+?Ê+zf£¢·h??§~??Ûiÿÿï?êÿ?êçz_è®æj:+v?¨þ)ߣøm