diff options
Diffstat (limited to 'fs/xfs/libxfs/xfs_bmap.c')
| -rw-r--r-- | fs/xfs/libxfs/xfs_bmap.c | 18 | 
1 files changed, 10 insertions, 8 deletions
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index de2d26d32844..86df952d3e24 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -5424,7 +5424,7 @@ xfs_bmap_shift_extents(  	struct xfs_bmap_free	*flist,  	int			num_exts)  { -	struct xfs_btree_cur		*cur; +	struct xfs_btree_cur		*cur = NULL;  	struct xfs_bmbt_rec_host	*gotp;  	struct xfs_bmbt_irec            got;  	struct xfs_bmbt_irec		left; @@ -5435,7 +5435,7 @@ xfs_bmap_shift_extents(  	int				error = 0;  	int				i;  	int				whichfork = XFS_DATA_FORK; -	int				logflags; +	int				logflags = 0;  	xfs_filblks_t			blockcount = 0;  	int				total_extents; @@ -5478,16 +5478,11 @@ xfs_bmap_shift_extents(  		}  	} -	/* We are going to change core inode */ -	logflags = XFS_ILOG_CORE;  	if (ifp->if_flags & XFS_IFBROOT) {  		cur = xfs_bmbt_init_cursor(mp, tp, ip, whichfork);  		cur->bc_private.b.firstblock = *firstblock;  		cur->bc_private.b.flist = flist;  		cur->bc_private.b.flags = 0; -	} else { -		cur = NULL; -		logflags |= XFS_ILOG_DEXT;  	}  	/* @@ -5545,11 +5540,14 @@ xfs_bmap_shift_extents(  			blockcount = left.br_blockcount +  				got.br_blockcount;  			xfs_iext_remove(ip, *current_ext, 1, 0); +			logflags |= XFS_ILOG_CORE;  			if (cur) {  				error = xfs_btree_delete(cur, &i);  				if (error)  					goto del_cursor;  				XFS_WANT_CORRUPTED_GOTO(i == 1, del_cursor); +			} else { +				logflags |= XFS_ILOG_DEXT;  			}  			XFS_IFORK_NEXT_SET(ip, whichfork,  				XFS_IFORK_NEXTENTS(ip, whichfork) - 1); @@ -5575,6 +5573,7 @@ xfs_bmap_shift_extents(  			got.br_startoff = startoff;  		} +		logflags |= XFS_ILOG_CORE;  		if (cur) {  			error = xfs_bmbt_update(cur, got.br_startoff,  						got.br_startblock, @@ -5582,6 +5581,8 @@ xfs_bmap_shift_extents(  						got.br_state);  			if (error)  				goto del_cursor; +		} else { +			logflags |= XFS_ILOG_DEXT;  		}  		(*current_ext)++; @@ -5597,6 +5598,7 @@ del_cursor:  		xfs_btree_del_cursor(cur,  			error ? XFS_BTREE_ERROR : XFS_BTREE_NOERROR); -	xfs_trans_log_inode(tp, ip, logflags); +	if (logflags) +		xfs_trans_log_inode(tp, ip, logflags);  	return error;  }  |