Re: invalidate_inode_pages in 2.5.32/3

Andrew Morton
2002-09-11T01:29:45Z

Daniel Phillips wrote:
>
> On Wednesday 11 September 2002 02:38, Andrew Morton wrote:
> > Daniel Phillips wrote:
> > >
> > > > ...
> > > We do get
> > > around to walking the ptes at file close I believe. Is that not driven by
> > > zap_page_range, which moves any orphaned pte dirty bits down into the struct
> > > page?
> >
> > Nope, close will just leave all the pages pte-dirty or PageDirty in
> > memory. truncate will nuke all the ptes and then the pagecache.
> >
> > But the normal way in which pte-dirty pages find their way to the
> > backing file is:
> >
> > - page reclaim runs try_to_unmap or
> >
> > - user runs msync(). (Which will only clean that mm's ptes!)
> >
> > These will run set_page_dirty(), making the page visible to
> > one of the many things which run writeback.
>
> So we just quietly drop any dirty memory mapped to a file if the user doesn't
> run msync? Is that correct behaviour? It sure sounds wrong.
>

If the page is truncated then yes. (indirectly: the pte dirty
state gets flushed into PG_dirty which is then invalidated).

Otherwise, no. The pte dirtiness is propagated into PG_dirty when
the pte is detached from the page. See try_to_unmap_one() - it is
quite straightforward.