On Thu, May 24, 2007 at 03:46:46AM +0400, Vladimir V. Saveliev wrote: > Hello, Nick > > On Wednesday 16 May 2007 21:22, Vladimir V. Saveliev wrote: > > > > Two questions - first, is it possible to get rid of reiserfs_prepare_write / > > commit_write? > > I assume this is not a problem anymore as long as prepare_write and > commit_write of address space operations are NULL now > (with last version of reiserfs-convert-to-new-aops.patch).
Yes, that should be fine and allow us to remove some of the generic code now. > > Second, can you make use of AOP_FLAG_CONT_EXPAND in order to > > get rid of the special generic_cont_expand routine for reiserfs? > > Sorry for delay with this. Did you mean something like this? Yes I did, thanks very much, we can now get rid of that weird generic_cont_expand too (assuming these patches will ever get merged). Thanks for doing this Vladimir! > > From: Vladimir Saveliev <[EMAIL PROTECTED]> > > This patch makes reiserfs to use AOP_FLAG_CONT_EXPAND > in order to get rid of the special generic_cont_expand routine > > Signed-off-by: Vladimir Saveliev <[EMAIL PROTECTED]> > > > > > diff -puN fs/reiserfs/inode.c~fs-reiserfs-use-generic_cont_expand_simple > fs/reiserfs/inode.c > --- > linux-2.6.21-mm2/fs/reiserfs/inode.c~fs-reiserfs-use-generic_cont_expand_simple > 2007-05-24 02:29:52.000000000 +0300 > +++ linux-2.6.21-mm2-vs/fs/reiserfs/inode.c 2007-05-24 02:34:26.000000000 > +0300 > @@ -2561,13 +2561,20 @@ static int reiserfs_write_begin(struct f > int ret; > int old_ref = 0; > > + inode = mapping->host; > + *fsdata = 0; > + if (flags & AOP_FLAG_CONT_EXPAND && > + (pos & (inode->i_sb->s_blocksize - 1)) == 0) { > + pos ++; > + *fsdata = (void *)flags; > + } > + > index = pos >> PAGE_CACHE_SHIFT; > page = __grab_cache_page(mapping, index); > if (!page) > return -ENOMEM; > *pagep = page; > > - inode = mapping->host; > reiserfs_wait_on_write_block(inode->i_sb); > fix_tail_page_for_writing(page); > if (reiserfs_transaction_running(inode->i_sb)) { > @@ -2677,6 +2684,8 @@ static int reiserfs_write_end(struct fil > struct reiserfs_transaction_handle *th; > unsigned start; > > + if ((unsigned)fsdata & AOP_FLAG_CONT_EXPAND) > + pos ++; > > reiserfs_wait_on_write_block(inode->i_sb); > if (reiserfs_transaction_running(inode->i_sb)) > @@ -3065,7 +3074,7 @@ int reiserfs_setattr(struct dentry *dent > } > /* fill in hole pointers in the expanding truncate case. */ > if (attr->ia_size > inode->i_size) { > - error = generic_cont_expand(inode, attr->ia_size); > + error = generic_cont_expand_simple(inode, > attr->ia_size); > if (REISERFS_I(inode)->i_prealloc_count > 0) { > int err; > struct reiserfs_transaction_handle th; > > _