[Ocfs2-devel] [PATCH] ocfs2: clean up ocfs2_journal_dirty mess in xattr.c
Tao Ma
tao.ma at oracle.com
Sun Aug 31 11:40:13 PDT 2008
In xattr.c, ocfs2_journal_dirty is called in many places, but they
are quite a mess, some are called with their return value checked,
some are not and in ocfs2_half_xattr_bucket there is even a bug which
we don't set the return value while checking it. So this patch go
through all the places we call ocfs2_journal_dirty and add the check
for return value.
Signed-off-by: Tao Ma <tao.ma at oracle.com>
---
fs/ocfs2/xattr.c | 84 +++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 61 insertions(+), 23 deletions(-)
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
index 2ccffb1..f87bbf1 100644
--- a/fs/ocfs2/xattr.c
+++ b/fs/ocfs2/xattr.c
@@ -1842,7 +1842,9 @@ static int ocfs2_restore_xattr_block(struct inode *inode,
xb->xb_flags = cpu_to_le16(xb_flags & ~OCFS2_XATTR_INDEXED);
- ocfs2_journal_dirty(handle, xs->xattr_bh);
+ ret = ocfs2_journal_dirty(handle, xs->xattr_bh);
+ if (ret)
+ mlog_errno(ret);
out_commit:
ocfs2_commit_trans(osb, handle);
@@ -1928,7 +1930,6 @@ static int ocfs2_xattr_block_set(struct inode *inode,
xs->end = (void *)xblk + inode->i_sb->s_blocksize;
xs->here = xs->header->xh_entries;
-
ret = ocfs2_journal_dirty(handle, new_bh);
if (ret < 0) {
mlog_errno(ret);
@@ -2824,9 +2825,19 @@ static int ocfs2_xattr_create_index_block(struct inode *inode,
ocfs2_cp_xattr_block_to_bucket(inode, xb_bh, xh_bh, data_bh);
- ocfs2_journal_dirty(handle, xh_bh);
- if (data_bh)
- ocfs2_journal_dirty(handle, data_bh);
+ ret = ocfs2_journal_dirty(handle, xh_bh);
+ if (ret) {
+ mlog_errno(ret);
+ goto out_commit;
+ }
+
+ if (data_bh) {
+ ret = ocfs2_journal_dirty(handle, data_bh);
+ if (ret) {
+ mlog_errno(ret);
+ goto out_commit;
+ }
+ }
ocfs2_xattr_update_xattr_search(inode, xs, xb_bh, xh_bh);
@@ -2848,10 +2859,8 @@ static int ocfs2_xattr_create_index_block(struct inode *inode,
xb->xb_flags = cpu_to_le16(xb_flags | OCFS2_XATTR_INDEXED);
ret = ocfs2_journal_dirty(handle, xb_bh);
- if (ret) {
+ if (ret)
mlog_errno(ret);
- goto out_commit;
- }
out_commit:
ocfs2_commit_trans(osb, handle);
@@ -3015,7 +3024,11 @@ static int ocfs2_defrag_xattr_bucket(struct inode *inode,
buf = bucket_buf;
for (i = 0; i < blk_per_bucket; i++, buf += blocksize) {
memcpy(bhs[i]->b_data, buf, blocksize);
- ocfs2_journal_dirty(handle, bhs[i]);
+ ret = ocfs2_journal_dirty(handle, bhs[i]);
+ if (ret) {
+ mlog_errno(ret);
+ goto commit;
+ }
}
commit:
@@ -3131,7 +3144,11 @@ static int ocfs2_mv_xattr_bucket_cross_cluster(struct inode *inode,
get_bh(new_first_bh);
}
- ocfs2_journal_dirty(handle, new_bh);
+ ret = ocfs2_journal_dirty(handle, new_bh);
+ if (ret) {
+ mlog_errno(ret);
+ goto out;
+ }
if (*header_bh == old_bh) {
brelse(*header_bh);
@@ -3148,7 +3165,9 @@ static int ocfs2_mv_xattr_bucket_cross_cluster(struct inode *inode,
le16_add_cpu(&xh->xh_num_buckets, -(num_buckets / 2));
- ocfs2_journal_dirty(handle, prev_bh);
+ ret = ocfs2_journal_dirty(handle, prev_bh);
+ if (ret)
+ mlog_errno(ret);
out:
brelse(prev_bh);
brelse(new_first_bh);
@@ -3312,9 +3331,11 @@ static int ocfs2_half_xattr_bucket(struct inode *inode,
xh->xh_num_buckets = 0;
for (i = 0; i < blk_per_bucket; i++) {
- ocfs2_journal_dirty(handle, t_bhs[i]);
- if (ret)
+ ret = ocfs2_journal_dirty(handle, t_bhs[i]);
+ if (ret) {
mlog_errno(ret);
+ goto out;
+ }
}
/* store the first_hash of the new bucket. */
@@ -3332,7 +3353,7 @@ static int ocfs2_half_xattr_bucket(struct inode *inode,
xh->xh_free_start = cpu_to_le16(name_offset);
xh->xh_name_value_len = cpu_to_le16(name_value_len);
- ocfs2_journal_dirty(handle, s_bhs[0]);
+ ret = ocfs2_journal_dirty(handle, s_bhs[0]);
if (ret)
mlog_errno(ret);
@@ -3403,7 +3424,11 @@ static int ocfs2_cp_xattr_bucket(struct inode *inode,
for (i = 0; i < blk_per_bucket; i++) {
memcpy(t_bhs[i]->b_data, s_bhs[i]->b_data, blocksize);
- ocfs2_journal_dirty(handle, t_bhs[i]);
+ ret = ocfs2_journal_dirty(handle, t_bhs[i]);
+ if (ret) {
+ mlog_errno(ret);
+ goto out;
+ }
}
out:
@@ -3478,7 +3503,11 @@ static int ocfs2_cp_xattr_cluster(struct inode *inode,
xh = (struct ocfs2_xattr_header *)first_bh->b_data;
le16_add_cpu(&xh->xh_num_buckets, -num_buckets);
- ocfs2_journal_dirty(handle, first_bh);
+ ret = ocfs2_journal_dirty(handle, first_bh);
+ if (ret) {
+ mlog_errno(ret);
+ goto out;
+ }
/* update the new bucket header. */
ret = ocfs2_read_block(osb, to_blk_start, &bh, OCFS2_BH_CACHED, inode);
@@ -3497,7 +3526,11 @@ static int ocfs2_cp_xattr_cluster(struct inode *inode,
xh = (struct ocfs2_xattr_header *)bh->b_data;
xh->xh_num_buckets = cpu_to_le16(num_buckets);
- ocfs2_journal_dirty(handle, bh);
+ ret = ocfs2_journal_dirty(handle, bh);
+ if (ret) {
+ mlog_errno(ret);
+ goto out;
+ }
if (first_hash)
*first_hash = le32_to_cpu(xh->xh_entries[0].xe_name_hash);
@@ -3727,10 +3760,8 @@ static int ocfs2_add_new_xattr_cluster(struct inode *inode,
}
ret = ocfs2_journal_dirty(handle, root_bh);
- if (ret < 0) {
+ if (ret < 0)
mlog_errno(ret);
- goto leave;
- }
leave:
if (handle)
@@ -3803,7 +3834,9 @@ static int ocfs2_extend_xattr_bucket(struct inode *inode,
start_blk + blk_per_bucket, NULL, 0);
le16_add_cpu(&first_xh->xh_num_buckets, 1);
- ocfs2_journal_dirty(handle, first_bh);
+ ret = ocfs2_journal_dirty(handle, first_bh);
+ if (ret)
+ mlog_errno(ret);
commit:
ocfs2_commit_trans(osb, handle);
@@ -4057,8 +4090,10 @@ static int ocfs2_xattr_bucket_handle_journal(struct inode *inode,
* and journal_dirty. The first block should always be touched.
*/
ret = ocfs2_journal_dirty(handle, bhs[0]);
- if (ret)
+ if (ret) {
mlog_errno(ret);
+ goto out;
+ }
/* calc the data. */
off = le16_to_cpu(xe->xe_name_offset);
@@ -4067,6 +4102,7 @@ static int ocfs2_xattr_bucket_handle_journal(struct inode *inode,
if (ret)
mlog_errno(ret);
+out:
return ret;
}
@@ -4325,7 +4361,9 @@ static int ocfs2_rm_xattr_bucket(struct inode *inode,
/* update the first_bh. */
xh->xh_num_buckets = cpu_to_le16(bucket_num - 1);
- ocfs2_journal_dirty(handle, first_bh);
+ ret = ocfs2_journal_dirty(handle, first_bh);
+ if (ret)
+ mlog_errno(ret);
out_commit:
ocfs2_commit_trans(osb, handle);
--
1.5.4.GIT
More information about the Ocfs2-devel
mailing list