How to refer to the unamed structure in page struct
Dave Hylands
dhylands at gmail.com
Fri Nov 4 15:01:49 EDT 2011
Hi Jimmy,
On Fri, Nov 4, 2011 at 9:28 AM, Jimmy Pan <dspjm1 at gmail.com> wrote:
> On Sat, Nov 5, 2011 at 12:00 AM, Dave Hylands <dhylands at gmail.com> wrote:
>> 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
> Well, I see, but what is the use of the union and structure?
Unions and structures are basic elements of the C language.
http://en.wikipedia.org/wiki/Union_(computer_science)
http://publications.gbdirect.co.uk/c_book/chapter6/unions.html
--
Dave Hylands
Shuswap, BC, Canada
http://www.davehylands.com
More information about the Kernelnewbies
mailing list