Thread (1 message) 1 message, 1 author, 2012-09-05

Re: Why page w/o buffers can not be released?

From: Jan Kara <jack@suse.cz>
Date: 2012-09-05 12:28:11
Also in: linux-ext4

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help