summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Fasheh <mark.fasheh@oracle.com>2007-09-18 17:49:29 -0700
committerMark Fasheh <mark.fasheh@oracle.com>2007-09-20 15:06:10 -0700
commit5c26a7b70f89c36e8d9acc95cb896c3cd205fc8d (patch)
tree83471ee744573481ffb2ffee09e0fe7fcf9643bd
parentdb56246c6980e376b02d2da568d119da71f82fb9 (diff)
downloadlinux-stable-5c26a7b70f89c36e8d9acc95cb896c3cd205fc8d.tar.gz
linux-stable-5c26a7b70f89c36e8d9acc95cb896c3cd205fc8d.tar.bz2
linux-stable-5c26a7b70f89c36e8d9acc95cb896c3cd205fc8d.zip
ocfs2: Don't double set write parameters
The target page offsets were being incorrectly set a second time in ocfs2_prepare_page_for_write(), which was causing problems on a 16k page size kernel. Additionally, ocfs2_write_failure() was incorrectly using those parameters instead of the parameters for the individual page being cleaned up. Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
-rw-r--r--fs/ocfs2/aops.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
index fa43810e5970..f37f25c931f5 100644
--- a/fs/ocfs2/aops.c
+++ b/fs/ocfs2/aops.c
@@ -930,18 +930,11 @@ static void ocfs2_write_failure(struct inode *inode,
loff_t user_pos, unsigned user_len)
{
int i;
- unsigned from, to;
+ unsigned from = user_pos & (PAGE_CACHE_SIZE - 1),
+ to = user_pos + user_len;
struct page *tmppage;
- ocfs2_zero_new_buffers(wc->w_target_page, user_pos, user_len);
-
- if (wc->w_large_pages) {
- from = wc->w_target_from;
- to = wc->w_target_to;
- } else {
- from = 0;
- to = PAGE_CACHE_SIZE;
- }
+ ocfs2_zero_new_buffers(wc->w_target_page, from, to);
for(i = 0; i < wc->w_num_pages; i++) {
tmppage = wc->w_pages[i];
@@ -991,9 +984,6 @@ static int ocfs2_prepare_page_for_write(struct inode *inode, u64 *p_blkno,
map_from = cluster_start;
map_to = cluster_end;
}
-
- wc->w_target_from = map_from;
- wc->w_target_to = map_to;
} else {
/*
* If we haven't allocated the new page yet, we