On Wed 05-09-12 15:30:29, Dmitry Monakhov wrote:
ext3, ext4 and ocfs2 do not allow to release page w/o buffers.
Can some one please explain me why?
ext4_releasepage(struct page *page, gfp_t wait)
{
if (!page_has_buffers(page))
return 0;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^( zero means fail to release)
if (journal)
return jbd2_journal_try_to_free_buffers(journal, page, wait);
else
return try_to_free_buffers(page);
}
This is looks very strange because if page has not buffers then
it has no fs-specific data associated with it. Am I right?
IMHO code should looks like follows:
xxx_releasepage() {
if(PageWriteback(page))
return 0;
if (!page_has_buffers(page))
return 1;
return do_fs_specific_stuff()
}
Yeah, I agree. Although this is mostly a harmless thing because all call
sites test for page_has_private(page) before calling try_to_release_page(page)
so !page_has_buffers(page) is impossible. But a cleanup (remove the test) would
be nice.
Also PageWriteback() is checked in try_to_release_page() so filesystems
don't have to care...
Honza
--
Jan Kara [off-list ref]
SUSE Labs, CR