On Fri, Aug 29, 2008 at 12:33:24PM +0400, Dmitri Monakhov wrote: > "Aneesh Kumar K.V" <aneesh.kumar@xxxxxxxxxxxxxxxxxx> writes: > > > For blocksize < pagesize we need to remove blocks that > > got allocte in block_wirte_begin if we fail with ENOSPC > > for later blocks. block_write_begin internally does > > this if it allocated page locally. This make sure > > we don't have blocks outisde inode.i_size during > > ENOSPC > BTW why this check was moved from generic_XXX_write to fs speciffic code? Not quite sure what you mean by that ? block_write_begin generic code already does the vmtruncate if it had allocated page locally. ext3/4 allocate/grab_cache_page in write_begin and pass the page pointer to block_write_begin. That implies block_write_begin won't do the truncate. So we have to do it in filesystem write_begin. also we have to do it after unlocking the page. > > > > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx> > > --- > > fs/ext3/inode.c | 7 +++++++ > > 1 files changed, 7 insertions(+), 0 deletions(-) > > > > diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c > > index ebfec4d..f8424ad 100644 > > --- a/fs/ext3/inode.c > > +++ b/fs/ext3/inode.c > > @@ -1186,6 +1186,13 @@ static int ext3_write_begin(struct file *file, struct address_space *mapping, > > ext3_journal_stop(handle); > > unlock_page(page); > > page_cache_release(page); > > + /* > > + * block_write_begin may have instantiated a few blocks > > + * outside i_size. Trim these off again. Don't need > > + * i_size_read because we hold i_mutex. > > + */ > > + if (pos + len > inode->i_size) > > + vmtruncate(inode, inode->i_size); > > } > > if (ret == -ENOSPC && ext3_should_retry_alloc(inode->i_sb, &retries)) > > goto retry; > > -- > > 1.6.0.1.90.g27a6e > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html