Messages in this thread | | | From | Chris Mason <> | Subject | RE: [PATCH 1/14] mm: invalidate_mapping_pages flush cleancache | Date | Tue, 31 May 2011 17:08:25 -0400 |
| |
Excerpts from Hugh Dickins's message of 2011-05-31 13:05:27 -0400: > On Tue, 31 May 2011, Dan Magenheimer wrote: > > > > > > truncate_inode_pages_range() and invalidate_inode_pages2_range() > > > call cleancache_flush_inode(mapping) before and after: shouldn't > > > invalidate_mapping_pages() be doing the same? > > > > I don't claim to be an expert on VFS, and so I have cc'ed > > Chris Mason who originally placed the cleancache hooks > > in VFS, but I think this patch is unnecessary. Instead > > of flushing ALL of the cleancache pages belonging to > > the inode with cleancache_flush_inode, the existing code > > eventually calls __delete_from_page_cache on EACH page > > that is being invalidated. > > On each one that's in pagecache (and satisfies the other "can we > do it easily?" conditions peculiar to invalidate_mapping_pages()). > But there may be other slots in the range that don't reach > __delete_from_page_cache() e.g. because not currently in pagecache, > but whose cleancache ought to be flushed. I think that's what a > caller of invalidate_mapping_pages(), e.g. drop caches, expects.
We call invalidate_mapping_pages from prune_icache, so if we drop the cleancache there we lose the cache entries any time the inode is dropped from ram.
Is there a specific case you're thinking of where we want to drop the cleancache but don't have the pages?
O_DIRECT perhaps?
-chris
| |