| From e1ccdbf457590a8a4b8496ca38fdded4d4d54735 Mon Sep 17 00:00:00 2001 |
| From: Tristan Ye <tristan.ye@oracle.com> |
| Date: Fri, 21 Jan 2011 18:20:18 +0800 |
| Subject: [PATCH] Ocfs2/refcounttree: Fix a bug for refcounttree to writeback |
| clusters in a right number. |
| |
| commit acf3bb007e5636ef4c17505affb0974175108553 upstream. |
| |
| Current refcounttree codes actually didn't writeback the new pages out in |
| write-back mode, due to a bug of always passing a ZERO number of clusters |
| to 'ocfs2_cow_sync_writeback', the patch tries to pass a proper one in. |
| |
| Signed-off-by: Tristan Ye <tristan.ye@oracle.com> |
| Signed-off-by: Joel Becker <jlbec@evilplan.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c |
| index 9e6dc1d..fe8d576 100644 |
| --- a/fs/ocfs2/refcounttree.c |
| +++ b/fs/ocfs2/refcounttree.c |
| @@ -3223,7 +3223,7 @@ static int ocfs2_make_clusters_writable(struct super_block *sb, |
| u32 num_clusters, unsigned int e_flags) |
| { |
| int ret, delete, index, credits = 0; |
| - u32 new_bit, new_len; |
| + u32 new_bit, new_len, orig_num_clusters; |
| unsigned int set_len; |
| struct ocfs2_super *osb = OCFS2_SB(sb); |
| handle_t *handle; |
| @@ -3256,6 +3256,8 @@ static int ocfs2_make_clusters_writable(struct super_block *sb, |
| goto out; |
| } |
| |
| + orig_num_clusters = num_clusters; |
| + |
| while (num_clusters) { |
| ret = ocfs2_get_refcount_rec(ref_ci, context->ref_root_bh, |
| p_cluster, num_clusters, |
| @@ -3343,7 +3345,8 @@ static int ocfs2_make_clusters_writable(struct super_block *sb, |
| * in write-back mode. |
| */ |
| if (context->get_clusters == ocfs2_di_get_clusters) { |
| - ret = ocfs2_cow_sync_writeback(sb, context, cpos, num_clusters); |
| + ret = ocfs2_cow_sync_writeback(sb, context, cpos, |
| + orig_num_clusters); |
| if (ret) |
| mlog_errno(ret); |
| } |
| -- |
| 1.7.4.4 |
| |