提交 28b8ca0b 编写于 作者: T Tao Ma 提交者: Mark Fasheh

ocfs2: bug-fix for journal extend in xattr.

In ocfs2_extend_trans, when we can't extend the current
transaction, it will commit current transaction and restart
a new one. So if the previous credits we have allocated aren't
used(the block isn't dirtied before our extend), we will not
have enough credits for any future operation(it will cause jbd
complain and bug out). So check this and re-extend it.
Signed-off-by: NTao Ma <tao.ma@oracle.com>
Signed-off-by: NMark Fasheh <mfasheh@suse.com>
上级 8d6220d6
......@@ -1336,8 +1336,9 @@ static int ocfs2_xattr_set_entry(struct inode *inode,
}
if (!(flag & OCFS2_INLINE_XATTR_FL)) {
/*set extended attribue in external blcok*/
/* set extended attribute in external block. */
ret = ocfs2_extend_trans(handle,
OCFS2_INODE_UPDATE_CREDITS +
OCFS2_XATTR_BLOCK_UPDATE_CREDITS);
if (ret) {
mlog_errno(ret);
......@@ -3701,6 +3702,18 @@ static int ocfs2_add_new_xattr_cluster(struct inode *inode,
}
}
if (handle->h_buffer_credits < credits) {
/*
* The journal has been restarted before, and don't
* have enough space for the insertion, so extend it
* here.
*/
ret = ocfs2_extend_trans(handle, credits);
if (ret) {
mlog_errno(ret);
goto leave;
}
}
mlog(0, "Insert %u clusters at block %llu for xattr at %u\n",
num_bits, block, v_start);
ret = ocfs2_insert_extent(osb, handle, inode, &et, v_start, block,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册