On Wed, Mar 09, 2011 at 04:58:19PM -0500, Chris Mason wrote:
> Excerpts from Dave Chinner's message of 2011-03-09 16:51:48 -0500:
> > On Wed, Mar 09, 2011 at 01:44:24PM -0600, Steve French wrote:
> > > Have alternative approaches, other than using wait_on_page_writeback,
> > > been considered for solving the stable page write problem in similar
> > > cases (since only about 1 out of 5 linux file systems uses this call
> > > today).
> >
> > I think that is incorrect. write_cache_pages() does:
> >
> > 929 lock_page(page);
> > .....
> > 950 if (PageWriteback(page)) {
> > 951 if (wbc->sync_mode != WB_SYNC_NONE)
> > 952 wait_on_page_writeback(page);
> > 953 else
> > 954 goto continue_unlock;
> > 955 }
> > 956
> > 957 BUG_ON(PageWriteback(page));
> > 958 if (!clear_page_dirty_for_io(page))
> > 959 goto continue_unlock;
> > 960
> > 961 trace_wbc_writepage(wbc,
> > mapping->backing_dev_info);
> > 962 ret = (*writepage)(page, wbc, data);
> >
> > so every filesystem using the generic_writepages code already does
> > this check and wait before .writepage is called. Hence only the
> > filesystems that do not use generic_writepages() or
> > mpage_writepages() need a specific check, and that means most
> > filesystems are actually waiting on writeback pages correctly.
>
> But checking here just means we don't start writeback on a page that is
> writeback, which is a good idea but not really related to stable pages?
True - but the context of the original question was w.r.t. use of
wait_on_page_writeback in .writepage[s], which was what I assumed
(based on a quick cscope lookup) that the "1 out of 5" was then
referring to....
> stable pages means we don't let mmap'd pages or file_write muck around
> with the pages while they are in writeback, so we need to wait in
> file_write and page_mkwrite.
.... as I think it's much fewer than "1 in 5 linux filesystems" that
actually implement these waits to ensure pages stay stable once
under writeback. i.e. only BTRFS does them, IIRC.
Cheers,
Dave.
--
Dave Chinner
[email protected]
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html