|
@@ -1328,20 +1328,21 @@ static int ocfs2_xattr_get(struct inode *inode,
|
|
|
void *buffer,
|
|
|
size_t buffer_size)
|
|
|
{
|
|
|
- int ret;
|
|
|
+ int ret, had_lock;
|
|
|
struct buffer_head *di_bh = NULL;
|
|
|
+ struct ocfs2_lock_holder oh;
|
|
|
|
|
|
- ret = ocfs2_inode_lock(inode, &di_bh, 0);
|
|
|
- if (ret < 0) {
|
|
|
- mlog_errno(ret);
|
|
|
- return ret;
|
|
|
+ had_lock = ocfs2_inode_lock_tracker(inode, &di_bh, 0, &oh);
|
|
|
+ if (had_lock < 0) {
|
|
|
+ mlog_errno(had_lock);
|
|
|
+ return had_lock;
|
|
|
}
|
|
|
down_read(&OCFS2_I(inode)->ip_xattr_sem);
|
|
|
ret = ocfs2_xattr_get_nolock(inode, di_bh, name_index,
|
|
|
name, buffer, buffer_size);
|
|
|
up_read(&OCFS2_I(inode)->ip_xattr_sem);
|
|
|
|
|
|
- ocfs2_inode_unlock(inode, 0);
|
|
|
+ ocfs2_inode_unlock_tracker(inode, 0, &oh, had_lock);
|
|
|
|
|
|
brelse(di_bh);
|
|
|
|
|
@@ -3537,11 +3538,12 @@ int ocfs2_xattr_set(struct inode *inode,
|
|
|
{
|
|
|
struct buffer_head *di_bh = NULL;
|
|
|
struct ocfs2_dinode *di;
|
|
|
- int ret, credits, ref_meta = 0, ref_credits = 0;
|
|
|
+ int ret, credits, had_lock, ref_meta = 0, ref_credits = 0;
|
|
|
struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
|
|
|
struct inode *tl_inode = osb->osb_tl_inode;
|
|
|
struct ocfs2_xattr_set_ctxt ctxt = { NULL, NULL, NULL, };
|
|
|
struct ocfs2_refcount_tree *ref_tree = NULL;
|
|
|
+ struct ocfs2_lock_holder oh;
|
|
|
|
|
|
struct ocfs2_xattr_info xi = {
|
|
|
.xi_name_index = name_index,
|
|
@@ -3572,8 +3574,9 @@ int ocfs2_xattr_set(struct inode *inode,
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
- ret = ocfs2_inode_lock(inode, &di_bh, 1);
|
|
|
- if (ret < 0) {
|
|
|
+ had_lock = ocfs2_inode_lock_tracker(inode, &di_bh, 1, &oh);
|
|
|
+ if (had_lock < 0) {
|
|
|
+ ret = had_lock;
|
|
|
mlog_errno(ret);
|
|
|
goto cleanup_nolock;
|
|
|
}
|
|
@@ -3670,7 +3673,7 @@ cleanup:
|
|
|
if (ret)
|
|
|
mlog_errno(ret);
|
|
|
}
|
|
|
- ocfs2_inode_unlock(inode, 1);
|
|
|
+ ocfs2_inode_unlock_tracker(inode, 1, &oh, had_lock);
|
|
|
cleanup_nolock:
|
|
|
brelse(di_bh);
|
|
|
brelse(xbs.xattr_bh);
|