Messages in this thread |  | | Date | Tue, 21 Jul 2009 19:51:39 +0200 | From | Andrea Arcangeli <> | Subject | Re: [PATCH 06/10] ksm: identify PageKsm pages |
| |
On Fri, Jul 17, 2009 at 08:30:46PM +0300, Izik Eidus wrote: > +static inline int PageKsm(struct page *page) > +{ > + return ((unsigned long)page->mapping == PAGE_MAPPING_ANON); > +}
I'm unconvinced it's sane to have PageAnon return 1 on Ksm pages.
The above will also have short lifetime so not sure it's worth it, if we want to swap we'll have to move to something that to:
PageExternal() { return (unsigned long)page->mapping & PAGE_MAPPING_EXTERNAL != 0; }
> +static inline void page_add_ksm_rmap(struct page *page) > +{ > + if (atomic_inc_and_test(&page->_mapcount)) { > + page->mapping = (void *) PAGE_MAPPING_ANON; > + __inc_zone_page_state(page, NR_ANON_PAGES); > + } > +}
Is it correct to account them as anon pages?
> - if (PageAnon(old_page)) { > + if (PageAnon(old_page) && !PageKsm(old_page)) { > if (!trylock_page(old_page)) { > page_cache_get(old_page); > pte_unmap_unlock(page_table, ptl);
What exactly does it buy to have PageAnon return 1 on ksm pages, besides requiring the above additional check (that if we stick to the above code, I would find safer to move inside reuse_swap_page).
|  |