diff options
Diffstat (limited to 'fs/xfs/xfs_vnodeops.c')
| -rw-r--r-- | fs/xfs/xfs_vnodeops.c | 69 | 
1 files changed, 19 insertions, 50 deletions
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 161444e768b..130343a5d22 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -268,8 +268,7 @@ xfs_setattr(  		commit_flags = XFS_TRANS_RELEASE_LOG_RES;  		xfs_ilock(ip, XFS_ILOCK_EXCL); -		xfs_trans_ijoin(tp, ip, lock_flags); -		xfs_trans_ihold(tp, ip); +		xfs_trans_ijoin(tp, ip);  		/*  		 * Only change the c/mtime if we are changing the size @@ -319,8 +318,7 @@ xfs_setattr(  			xfs_iflags_set(ip, XFS_ITRUNCATED);  		}  	} else if (tp) { -		xfs_trans_ijoin(tp, ip, lock_flags); -		xfs_trans_ihold(tp, ip); +		xfs_trans_ijoin(tp, ip);  	}  	/* @@ -653,10 +651,7 @@ xfs_free_eofblocks(  		}  		xfs_ilock(ip, XFS_ILOCK_EXCL); -		xfs_trans_ijoin(tp, ip, -				XFS_IOLOCK_EXCL | -				XFS_ILOCK_EXCL); -		xfs_trans_ihold(tp, ip); +		xfs_trans_ijoin(tp, ip);  		error = xfs_itruncate_finish(&tp, ip,  					     ip->i_size, @@ -728,8 +723,7 @@ xfs_inactive_symlink_rmt(  	xfs_ilock(ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL);  	size = (int)ip->i_d.di_size;  	ip->i_d.di_size = 0; -	xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); -	xfs_trans_ihold(tp, ip); +	xfs_trans_ijoin(tp, ip);  	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);  	/*  	 * Find the block(s) so we can inval and unmap them. @@ -773,8 +767,7 @@ xfs_inactive_symlink_rmt(  	 * Mark it dirty so it will be logged and moved forward in the log as  	 * part of every commit.  	 */ -	xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); -	xfs_trans_ihold(tp, ip); +	xfs_trans_ijoin(tp, ip);  	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);  	/*  	 * Get a new, empty transaction to return to our caller. @@ -907,8 +900,7 @@ xfs_inactive_attrs(  		goto error_cancel;  	xfs_ilock(ip, XFS_ILOCK_EXCL); -	xfs_trans_ijoin(tp, ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); -	xfs_trans_ihold(tp, ip); +	xfs_trans_ijoin(tp, ip);  	xfs_idestroy_fork(ip, XFS_ATTR_FORK);  	ASSERT(ip->i_d.di_anextents == 0); @@ -1095,8 +1087,7 @@ xfs_inactive(  		}  		xfs_ilock(ip, XFS_ILOCK_EXCL); -		xfs_trans_ijoin(tp, ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); -		xfs_trans_ihold(tp, ip); +		xfs_trans_ijoin(tp, ip);  		/*  		 * normally, we have to run xfs_itruncate_finish sync. @@ -1129,8 +1120,7 @@ xfs_inactive(  			return VN_INACTIVE_CACHE;  		} -		xfs_trans_ijoin(tp, ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); -		xfs_trans_ihold(tp, ip); +		xfs_trans_ijoin(tp, ip);  	} else {  		error = xfs_trans_reserve(tp, 0,  					  XFS_IFREE_LOG_RES(mp), @@ -1143,8 +1133,7 @@ xfs_inactive(  		}  		xfs_ilock(ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); -		xfs_trans_ijoin(tp, ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); -		xfs_trans_ihold(tp, ip); +		xfs_trans_ijoin(tp, ip);  	}  	/* @@ -1392,8 +1381,7 @@ xfs_create(  	 * the transaction cancel unlocking dp so don't do it explicitly in the  	 * error path.  	 */ -	IHOLD(dp); -	xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); +	xfs_trans_ijoin_ref(tp, dp, XFS_ILOCK_EXCL);  	unlock_dp_on_error = B_FALSE;  	error = xfs_dir_createname(tp, dp, name, ip->i_ino, @@ -1730,15 +1718,8 @@ xfs_remove(  	xfs_lock_two_inodes(dp, ip, XFS_ILOCK_EXCL); -	/* -	 * At this point, we've gotten both the directory and the entry -	 * inodes locked. -	 */ -	IHOLD(ip); -	xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); - -	IHOLD(dp); -	xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); +	xfs_trans_ijoin_ref(tp, dp, XFS_ILOCK_EXCL); +	xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL);  	/*  	 * If we're removing a directory perform some additional validation. @@ -1884,15 +1865,8 @@ xfs_link(  	xfs_lock_two_inodes(sip, tdp, XFS_ILOCK_EXCL); -	/* -	 * Increment vnode ref counts since xfs_trans_commit & -	 * xfs_trans_cancel will both unlock the inodes and -	 * decrement the associated ref counts. -	 */ -	IHOLD(sip); -	IHOLD(tdp); -	xfs_trans_ijoin(tp, sip, XFS_ILOCK_EXCL); -	xfs_trans_ijoin(tp, tdp, XFS_ILOCK_EXCL); +	xfs_trans_ijoin_ref(tp, sip, XFS_ILOCK_EXCL); +	xfs_trans_ijoin_ref(tp, tdp, XFS_ILOCK_EXCL);  	/*  	 * If the source has too many links, we can't make any more to it. @@ -2087,8 +2061,7 @@ xfs_symlink(  	 * transaction cancel unlocking dp so don't do it explicitly in the  	 * error path.  	 */ -	IHOLD(dp); -	xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); +	xfs_trans_ijoin_ref(tp, dp, XFS_ILOCK_EXCL);  	unlock_dp_on_error = B_FALSE;  	/* @@ -2227,13 +2200,12 @@ xfs_set_dmattrs(  		return error;  	}  	xfs_ilock(ip, XFS_ILOCK_EXCL); -	xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); +	xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL);  	ip->i_d.di_dmevmask = evmask;  	ip->i_d.di_dmstate  = state;  	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); -	IHOLD(ip);  	error = xfs_trans_commit(tp, 0);  	return error; @@ -2366,8 +2338,7 @@ xfs_alloc_file_space(  		if (error)  			goto error1; -		xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); -		xfs_trans_ihold(tp, ip); +		xfs_trans_ijoin(tp, ip);  		/*  		 * Issue the xfs_bmapi() call to allocate the blocks @@ -2668,8 +2639,7 @@ xfs_free_file_space(  		if (error)  			goto error1; -		xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); -		xfs_trans_ihold(tp, ip); +		xfs_trans_ijoin(tp, ip);  		/*  		 * issue the bunmapi() call to free the blocks @@ -2839,8 +2809,7 @@ xfs_change_file_space(  	xfs_ilock(ip, XFS_ILOCK_EXCL); -	xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); -	xfs_trans_ihold(tp, ip); +	xfs_trans_ijoin(tp, ip);  	if ((attr_flags & XFS_ATTR_DMI) == 0) {  		ip->i_d.di_mode &= ~S_ISUID;  |