diff options
Diffstat (limited to 'fs/ocfs2/xattr.c')
| -rw-r--r-- | fs/ocfs2/xattr.c | 23 | 
1 files changed, 13 insertions, 10 deletions
| diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c index 3c5384d9b3a5..f70c3778d600 100644 --- a/fs/ocfs2/xattr.c +++ b/fs/ocfs2/xattr.c @@ -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); |