Re: How to refer to the unamed structure in page struct

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Nov 5, 2011 at 12:00 AM, Dave Hylands <dhylands@xxxxxxxxx> wrote:
> 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
>

Well, I see, but what is the use of the union and structure?
��.n��������+%������w��{.n����z�ޗ�����n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�

[Index of Archives]     [Kernel Development]     [Kernel Announce]     [Kernel Newbies]     [Linux Networking Development]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Device Mapper]

  Powered by Linux