Messages in this thread | | | Date | Sun, 29 Jun 2008 17:48:59 +0900 | From | KOSAKI Motohiro <> | Subject | Re: [PATCH] splitlru: BDI_CAP_SWAP_BACKED |
| |
> The split-lru patches put file and swap-backed pages on different lrus. > shmem/tmpfs pages are awkward because they are swap-backed file pages. > Since it's difficult to change lru midstream, they are treated as swap- > backed throughout, with SetPageSwapBacked on allocation in shmem_getpage. > > However, splice read (used by loop and sendfile) and readahead* allocate > pages first, add_to_page_cache_lru, and then call into the filesystem > through ->readpage. Under memory pressure, the shmem pages arrive at > add_to_swap_cache and hit its BUG_ON(!PageSwapBacked(page)). > > I've not yet found a better way to handle this than a "capability" > flag in shmem_backing_dev_info, tested by add_to_page_cache_lru. > And solely because it would look suspicious without it, set that > BDI_CAP_SWAP_BACKED in swap_backing_dev_info also. > > * readahead on shmem/tmpfs? I'd always thought ra_pages 0 prevented > that; but in fact readahead(2), fadvise(POSIX_FADV_WILLNEED) and > madvise(MADV_WILLNEED) all force_page_cache_readahead and get there. > > Signed-off-by: Hugh Dickins <hugh@veritas.com>
great.
I'm not sure about this patch is perfect. but it seems makes sense and very good code.
So, I'll testing this patch for a while.
Rik, What do you think about it?
| |