diff options
author | Mark Fasheh <mark.fasheh@oracle.com> | 2007-09-07 17:20:45 -0400 |
---|---|---|
committer | Mark Fasheh <mark.fasheh@oracle.com> | 2007-10-12 14:54:35 -0400 |
commit | 1d410a6e337a0d2d5543ad1d9bccb670a7a05312 (patch) | |
tree | 696f70750482a4a49b61c79e6499659ddb3635b4 /fs/ocfs2/aops.c | |
parent | 65ed39d6ca78f07d2958814e08440e4264b6b488 (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.c | 20 |
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 | ||
833 | static void ocfs2_free_write_ctxt(struct ocfs2_write_ctxt *wc) | 833 | void 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 | |||
846 | static 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); |