From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: Josef Bacik <josef@redhat.com>
Cc: Jan Kara <jack@suse.cz>, LKML <linux-kernel@vger.kernel.org>,
npiggin@suse.de, linux-ext4@vger.kernel.org
Subject: Re: [PATCH 03/11] vfs: Add better VFS support for page_mkwrite when blocksize < pagesize
Date: Wed, 27 May 2009 22:15:04 +0530 [thread overview]
Message-ID: <20090527164504.GC19989@skywalker> (raw)
In-Reply-To: <20090527160005.GA14035@dhcp231-156.rdu.redhat.com>
On Wed, May 27, 2009 at 12:00:06PM -0400, Josef Bacik wrote:
> On Wed, May 27, 2009 at 03:01:00PM +0200, Jan Kara wrote:
.....
....
> > if (offset > inode->i_sb->s_maxbytes)
> > goto out_big;
> > - i_size_write(inode, offset);
> > + do_extend_i_size(inode, offset, 0);
> > } else {
> > struct address_space *mapping = inode->i_mapping;
> >
>
> Sorry if I'm being a bit dense, I'm just kind of confused. In the case you
> outlined, we only allocate one block, as we should, but then the truncate
> extends i_size so that when writepage() comes along, its valid to write the
> whole page out, except we didn't allocate blocks for the whole page sine
> blocksize < pagesize.
We can't do block allocation in writepage because we can't handler
ENOSPC during writepage. So the patch attempt to make sure we do
all block allocation in the process context. For mmap we should
do it in page_mkwrite and for write in write_begin.
>
> But if we didn't extend i_size, writepage would only have written the block's
> worth of data correct? If thats the case, why don't we just make it so that
> happens in this case as well?
That is what is done in the patch i posted
http://article.gmane.org/gmane.comp.file-systems.ext4/13468
But that is not just enough. We also need to make sure we get a
page_fault when we try to write at another offset via mmap address so
that we can do block allocation via page_mkwrite. To do that all code
path that extend i_size should mark the page write protect.
>Technically only one part of the page is dirty,
> so we just need to write that out, not the whole thing. I assume there is a way
> to do this, since it presumably happens in the case where i_size < page size.
> If thats not possible then I guess this way is a good answer, it just seems
> overly complicated to me.
__block_write_full_page already does that. It looks at the last_block
>
> Also, on the actualy patch, you only check the return value of
> block_lock_hole_extend in block_extend_i_size, but sinze
> block_unlock_hole_extend doesn't really do anything if we didn't do anything in
> block_lock_hole_extend, you might as well make it a void as well, since you
> unconditionally lock/unlock in every other instance. Thanks,
>
> Josef
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
-aneesh
next prev parent reply other threads:[~2009-05-27 16:45 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-27 13:00 [PATCH 0/11] Fix page_mkwrite() for blocksize < pagesize Jan Kara
2009-05-27 13:00 ` [PATCH 01/11] ext3: Get rid of extenddisksize parameter of ext3_get_blocks_handle() Jan Kara
2009-05-27 13:00 ` [PATCH 02/11] ext4: Get rid of extend_disksize parameter of ext4_get_blocks_handle() Jan Kara
2009-05-27 13:01 ` [PATCH 03/11] vfs: Add better VFS support for page_mkwrite when blocksize < pagesize Jan Kara
2009-05-27 16:00 ` Josef Bacik
2009-05-27 16:45 ` Aneesh Kumar K.V [this message]
2009-05-27 17:06 ` Josef Bacik
2009-05-28 13:03 ` Josef Bacik
2009-05-28 13:10 ` Aneesh Kumar K.V
2009-05-30 11:23 ` Pavel Machek
2009-06-01 9:44 ` Jan Kara
2009-06-01 11:33 ` Goswin von Brederlow
2009-06-01 14:00 ` Jan Kara
2009-06-01 14:46 ` Goswin von Brederlow
2009-06-01 15:02 ` Jan Kara
2009-06-01 15:35 ` Goswin von Brederlow
2009-05-27 13:01 ` [PATCH 04/11] ext2: Allocate space for mmaped file on page fault Jan Kara
2009-05-27 13:01 ` [PATCH 05/11] ext4: Make sure blocks are properly allocated under mmaped page even when blocksize < pagesize Jan Kara
2009-05-27 14:30 ` Theodore Tso
2009-05-27 14:52 ` Jan Kara
2009-06-04 14:09 ` Theodore Tso
2009-05-27 13:01 ` [PATCH 06/11] ext3: Allocate space for mmaped file on page fault Jan Kara
2009-05-27 13:01 ` [PATCH 07/11] vfs: Implement generic per-cpu counters for delayed allocation Jan Kara
2009-05-27 13:01 ` [PATCH 08/11] vfs: Unmap underlying metadata of new data buffers only when buffer is mapped Jan Kara
2009-05-27 15:35 ` Aneesh Kumar K.V
2009-05-28 9:44 ` Jan Kara
2009-05-28 10:15 ` Aneesh Kumar K.V
2009-05-28 13:50 ` Jan Kara
2009-05-27 13:01 ` [PATCH 09/11] fs: Don't clear dirty bits in block_write_full_page() Jan Kara
2009-05-27 13:01 ` [PATCH 10/11] vfs: Export wakeup_pdflush Jan Kara
2009-05-27 13:01 ` [PATCH 11/11] ext3: Implement delayed allocation on page_mkwrite time Jan Kara
2009-05-27 14:23 ` [PATCH 0/11] Fix page_mkwrite() for blocksize < pagesize Theodore Tso
2009-05-27 14:59 ` Jan Kara
2009-06-04 17:11 ` Theodore Tso
2009-06-05 23:23 ` Jan Kara
2009-05-27 15:33 ` Aneesh Kumar K.V
2009-05-28 9:36 ` Jan Kara
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=20090527164504.GC19989@skywalker \
--to=aneesh.kumar@linux.vnet.ibm.com \
--cc=jack@suse.cz \
--cc=josef@redhat.com \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=npiggin@suse.de \
/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).