aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/aops.c
diff options
context:
space:
mode:
authorMark Fasheh <mark.fasheh@oracle.com>2007-09-07 17:20:45 -0400
committerMark Fasheh <mark.fasheh@oracle.com>2007-10-12 14:54:35 -0400
commit1d410a6e337a0d2d5543ad1d9bccb670a7a05312 (patch)
tree696f70750482a4a49b61c79e6499659ddb3635b4 /fs/ocfs2/aops.c
parent65ed39d6ca78f07d2958814e08440e4264b6b488 (diff)
ocfs2: Small refactor of truncate zeroing code
We'll want to reuse most of this when pushing inline data back out to an extent. Keeping this part as a seperate patch helps to keep the upcoming changes for write support uncluttered. The core portion of ocfs2_zero_cluster_pages() responsible for making sure a page is mapped and properly dirtied is abstracted out into it's own function, ocfs2_map_and_dirty_page(). Actual functionality doesn't change, though zeroing becomes optional. We also turn part of ocfs2_free_write_ctxt() into a common function for unlocking and freeing a page array. This operation is very common (and uniform) for Ocfs2 cluster sizes greater than page size, so it makes sense to keep the code in one place. Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com> Reviewed-by: Joel Becker <joel.becker@oracle.com>
Diffstat (limited to 'fs/ocfs2/aops.c')
-rw-r--r--fs/ocfs2/aops.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
index fae07672eb18..8416e383197c 100644
--- a/fs/ocfs2/aops.c
+++ b/fs/ocfs2/aops.c
@@ -830,18 +830,22 @@ struct ocfs2_write_ctxt {
830 struct ocfs2_cached_dealloc_ctxt w_dealloc; 830 struct ocfs2_cached_dealloc_ctxt w_dealloc;
831}; 831};
832 832
833static void ocfs2_free_write_ctxt(struct ocfs2_write_ctxt *wc) 833void ocfs2_unlock_and_free_pages(struct page **pages, int num_pages)
834{ 834{
835 int i; 835 int i;
836 836
837 for(i = 0; i < wc->w_num_pages; i++) { 837 for(i = 0; i < num_pages; i++) {
838 if (wc->w_pages[i] == NULL) 838 if (pages[i]) {
839 continue; 839 unlock_page(pages[i]);
840 840 mark_page_accessed(pages[i]);
841 unlock_page(wc->w_pages[i]); 841 page_cache_release(pages[i]);
842 mark_page_accessed(wc->w_pages[i]); 842 }
843 page_cache_release(wc->w_pages[i]);
844 } 843 }
844}
845
846static void ocfs2_free_write_ctxt(struct ocfs2_write_ctxt *wc)
847{
848 ocfs2_unlock_and_free_pages(wc->w_pages, wc->w_num_pages);
845 849
846 brelse(wc->w_di_bh); 850 brelse(wc->w_di_bh);
847 kfree(wc); 851 kfree(wc);