From: Nikita Danilov <nikita@clusterfs.com>
To: Badari Pulavarty <pbadari@us.ibm.com>
Cc: linux-fsdevel@vger.kernel.org,
ext2-devel <ext2-devel@lists.sourceforge.net>
Subject: Re: [RFC] [PATCH] Generic mpage_writepage() support
Date: Wed, 16 Feb 2005 14:41:41 +0300 [thread overview]
Message-ID: <16915.12661.494053.290059@gargle.gargle.HOWL> (raw)
In-Reply-To: <1108512141.20053.1490.camel@dyn318077bld.beaverton.ibm.com>
Badari Pulavarty writes:
> On Tue, 2005-02-15 at 09:54, Andrew Morton wrote:
> > Badari Pulavarty <pbadari@us.ibm.com> wrote:
> > >
> > > Yep. nobh_prepare_write() doesn't add any bufferheads. But
> > > we call block_write_full_page() even for "nobh" case, which
> > > does create bufferheads, attaches to the page and operates
> > > on them..
> >
> > hmm, yeah, OK, we'll attach bh's in that case. It's a rare case though -
> > when a dirty page falls off the end of the LRU. There's no particular
> > reason why we cannot have a real mpage_writepage() which doesn't use bh's
> > and employ that.
> >
> > I coulda sworn we used to have one.
>
> Hi Andrew,
>
> Here is my first version of mpage_writepage() patch.
> I haven't handle the "confused" case yet - I need to
> pass a function pointer to handle it. Just for
> initial code review. I am still testing it.
>
> Thanks,
> Badari
>
>
> diff -Narup -X dontdiff linux-2.6.10/fs/ext2/inode.c linux-2.6.10.nobh/fs/ext2/inode.c
> --- linux-2.6.10/fs/ext2/inode.c 2004-12-24 13:33:51.000000000 -0800
[...]
> return ret;
> }
> +
> +/*
> + * The generic ->writepage function for address_spaces
> + */
This function doesn't look generic. It only works correctly with file
systems that store pointer to buffer head ring in page->private (at
least temporarily), otherwise code after page_has_buffers(page) check in
__mpage_writepage() will corrupt page->private.
Actually, this looks confusing. I thought that main idea of mpage.c is
to get rid of buffer heads, and switch everything to bios. But looking
at the current code it seems that buffer heads are striking back: code
simply assumes that PG_private means "buffers in page->private", making
mpage.c effectively useless for file systems using page->private for
something else.
There is another reason why mpage_writepage() is a problematic choice
for ->writepage: __mpage_writepage() calls
page->mapping->a_ops->writepage() in "confused" case, which sounds like
infinite recursion.
[...]
> + if (page->index >= end_index+1 || !offset) {
> + /*
> + * The page may have dirty, unmapped buffers. For example,
> + * they may have been added in ext3_writepage(). Make them
> + * freeable here, so the page does not leak.
> + */
> + block_invalidatepage(page, 0);
Shouldn't this be
page->mapping->a_ops->invalidatepage(page, 0)
? To preserve external appearance of "genericity", that is. :)
> + unlock_page(page);
> + return 0; /* don't care */
> + }
> +
> + /*
> + * The page straddles i_size. It must be zeroed out on each and every
> + * writepage invokation because it may be mmapped. "A file is mapped
Typo: should be invocation (at least beyond Australia).
Nikita.
next prev parent reply other threads:[~2005-02-16 11:41 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-14 19:30 Bufferheads & page-cache reference Badari Pulavarty
2005-02-14 19:31 ` [Ext2-devel] " Sonny Rao
2005-02-14 21:40 ` Andrew Morton
2005-02-14 22:10 ` William Lee Irwin III
2005-02-14 22:31 ` Andrew Morton
2005-02-14 22:50 ` William Lee Irwin III
2005-02-15 0:22 ` Badari Pulavarty
2005-02-15 2:57 ` Andrew Morton
2005-02-15 16:03 ` Badari Pulavarty
2005-02-15 17:26 ` Andrew Morton
2005-02-15 1:27 ` Badari Pulavarty
2005-02-15 3:05 ` Andrew Morton
2005-02-15 16:46 ` Badari Pulavarty
2005-02-15 17:54 ` Andrew Morton
2005-02-15 18:15 ` Badari Pulavarty
2005-02-15 19:07 ` Nikita Danilov
2005-02-15 19:39 ` Badari Pulavarty
2005-02-15 20:00 ` Andrew Morton
2005-02-16 0:02 ` [RFC] [PATCH] Generic mpage_writepage() support Badari Pulavarty
2005-02-16 11:41 ` Nikita Danilov [this message]
2005-02-16 18:37 ` Badari Pulavarty
2005-02-16 19:09 ` Dave Kleikamp
2005-02-16 19:28 ` Badari Pulavarty
2005-02-16 19:43 ` Dave Kleikamp
2005-02-16 21:38 ` [Ext2-devel] " Badari Pulavarty
2005-02-16 21:46 ` Dave Kleikamp
2005-02-17 0:13 ` [RFC] [PATCH] nobh_write_page() support Badari Pulavarty
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=16915.12661.494053.290059@gargle.gargle.HOWL \
--to=nikita@clusterfs.com \
--cc=ext2-devel@lists.sourceforge.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=pbadari@us.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).