ocfs2: Narrow the transaction for deleting xattrs from a bucket.
We move the transaction into the loop because in ocfs2_remove_extent, we will double the credits in function ocfs2_extend_rotate_transaction. So if we have a large loop number, we will soon waste much the journal space. Signed-off-by: Tao Ma <tao.ma@oracle.com> Signed-off-by: Joel Becker <joel.becker@oracle.com> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
This commit is contained in:
parent
548b0f22bb
commit
88c3b0622a
|
@ -5094,30 +5094,30 @@ static int ocfs2_delete_xattr_in_bucket(struct inode *inode,
|
|||
|
||||
ocfs2_init_dealloc_ctxt(&ctxt.dealloc);
|
||||
|
||||
ctxt.handle = ocfs2_start_trans(osb, credits);
|
||||
if (IS_ERR(ctxt.handle)) {
|
||||
ret = PTR_ERR(ctxt.handle);
|
||||
mlog_errno(ret);
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (i = 0; i < le16_to_cpu(xh->xh_count); i++) {
|
||||
xe = &xh->xh_entries[i];
|
||||
if (ocfs2_xattr_is_local(xe))
|
||||
continue;
|
||||
|
||||
ctxt.handle = ocfs2_start_trans(osb, credits);
|
||||
if (IS_ERR(ctxt.handle)) {
|
||||
ret = PTR_ERR(ctxt.handle);
|
||||
mlog_errno(ret);
|
||||
break;
|
||||
}
|
||||
|
||||
ret = ocfs2_xattr_bucket_value_truncate(inode, bucket,
|
||||
i, 0, &ctxt);
|
||||
|
||||
ocfs2_commit_trans(osb, ctxt.handle);
|
||||
if (ret) {
|
||||
mlog_errno(ret);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ret = ocfs2_commit_trans(osb, ctxt.handle);
|
||||
ocfs2_schedule_truncate_log_flush(osb, 1);
|
||||
ocfs2_run_deallocs(osb, &ctxt.dealloc);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue