Hi Joel, Joel Becker wrote: > ocfs2_zero_extend() does its zeroing block by block, but it calls a > function named ocfs2_write_zero_page(). Let's have > ocfs2_write_zero_page() handle the page level. From > ocfs2_zero_extend()'s perspective, it is now page-at-a-time. > > Signed-off-by: Joel Becker <[email protected]> > --- > fs/ocfs2/aops.c | 30 -------------- > fs/ocfs2/file.c | 119 > +++++++++++++++++++++++++++++++++++++++---------------- > 2 files changed, 85 insertions(+), 64 deletions(-) > > diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c > index 3623ca2..9a5c931 100644 > --- a/fs/ocfs2/aops.c > +++ b/fs/ocfs2/aops.c > @@ -459,36 +459,6 @@ int walk_page_buffers( handle_t *handle, > return ret; > } > > -handle_t *ocfs2_start_walk_page_trans(struct inode *inode, > - struct page *page, > - unsigned from, > - unsigned to) > -{ > - struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); > - handle_t *handle; > - int ret = 0; > - > - handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS); > - if (IS_ERR(handle)) { > - ret = -ENOMEM; > - mlog_errno(ret); > - goto out; > - } > - > - if (ocfs2_should_order_data(inode)) { > - ret = ocfs2_jbd2_file_inode(handle, inode); > - if (ret < 0) > - mlog_errno(ret); > - } > -out: > - if (ret) { > - if (!IS_ERR(handle)) > - ocfs2_commit_trans(osb, handle); > - handle = ERR_PTR(ret); > - } > - return handle; > -} > - > static sector_t ocfs2_bmap(struct address_space *mapping, sector_t block) > { > sector_t status; > diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c > index 6a13ea6..a6e0eb6 100644 > --- a/fs/ocfs2/file.c > +++ b/fs/ocfs2/file.c > @@ -724,28 +724,55 @@ leave: > return status; > } > > +/* > + * While a write will already be ordering the data, a truncate will not. > + * Thus, we need to explicitly order the zeroed pages. > + */ > +static handle_t *ocfs2_zero_start_ordered_transaction(struct inode *inode) > +{ > + struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); > + handle_t *handle = NULL; > + int ret = 0; > + > + if (ocfs2_should_order_data(inode)) > This should be if (!ocfs2_should_order_data(inode)) I guess? ;) > + goto out; > + > + handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS); > + if (IS_ERR(handle)) { > + ret = -ENOMEM; > + mlog_errno(ret); > + goto out; > + } > + > Regards, Tao
_______________________________________________ Ocfs2-devel mailing list [email protected] http://oss.oracle.com/mailman/listinfo/ocfs2-devel
