Re: [PATCH 4/5] xfs: saner xfs_trans_commit interface

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, May 10, 2015 at 09:18:38PM +0200, Christoph Hellwig wrote:
> The flags argument to xfs_trans_commit is not useful for most callers, as
> a commit of a transaction without a permanent log reservation must pass
> 0 here, and all callers for a transaction with a permanent log reservation
> except for xfs_trans_roll must pass XFS_TRANS_RELEASE_LOG_RES.  So remove
> the flags argument from the public xfs_trans_commit interfaces, and
> introduce low-level __xfs_trans_commit variant just for xfs_trans_roll
> that regrants a log reservation instead of releasing it.
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> ---
>  fs/xfs/libxfs/xfs_attr.c   |  7 +++----
>  fs/xfs/libxfs/xfs_bmap.c   |  5 ++---
>  fs/xfs/libxfs/xfs_sb.c     |  2 +-
>  fs/xfs/libxfs/xfs_shared.h |  5 -----
>  fs/xfs/xfs_aops.c          |  2 +-
>  fs/xfs/xfs_attr_inactive.c |  2 +-
>  fs/xfs/xfs_bmap_util.c     | 11 +++++------
>  fs/xfs/xfs_dquot.c         |  2 +-
>  fs/xfs/xfs_file.c          |  2 +-
>  fs/xfs/xfs_fsops.c         |  2 +-
>  fs/xfs/xfs_inode.c         | 14 +++++++-------
>  fs/xfs/xfs_ioctl.c         |  6 +++---
>  fs/xfs/xfs_iomap.c         |  6 +++---
>  fs/xfs/xfs_iops.c          |  6 +++---
>  fs/xfs/xfs_log.h           |  2 +-
>  fs/xfs/xfs_log_cil.c       |  4 ++--
>  fs/xfs/xfs_log_recover.c   |  4 ++--
>  fs/xfs/xfs_pnfs.c          |  2 +-
>  fs/xfs/xfs_qm.c            |  2 +-
>  fs/xfs/xfs_qm_syscalls.c   |  9 ++++-----
>  fs/xfs/xfs_rtalloc.c       |  6 +++---
>  fs/xfs/xfs_symlink.c       |  4 ++--
>  fs/xfs/xfs_trans.c         | 35 +++++++++++++++++++----------------
>  fs/xfs/xfs_trans.h         |  2 +-
>  24 files changed, 68 insertions(+), 74 deletions(-)
> 
> diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
> index 126da7f..3349c9a 100644
> --- a/fs/xfs/libxfs/xfs_attr.c
> +++ b/fs/xfs/libxfs/xfs_attr.c
> @@ -320,8 +320,7 @@ xfs_attr_set(
>  				xfs_trans_ichgtime(args.trans, dp,
>  							XFS_ICHGTIME_CHG);
>  			}
> -			err2 = xfs_trans_commit(args.trans,
> -						 XFS_TRANS_RELEASE_LOG_RES);
> +			err2 = xfs_trans_commit(args.trans);
>  			xfs_iunlock(dp, XFS_ILOCK_EXCL);
>  
>  			return error ? error : err2;
> @@ -383,7 +382,7 @@ xfs_attr_set(
>  	 * Commit the last in the sequence of transactions.
>  	 */
>  	xfs_trans_log_inode(args.trans, dp, XFS_ILOG_CORE);
> -	error = xfs_trans_commit(args.trans, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(args.trans);
>  	xfs_iunlock(dp, XFS_ILOCK_EXCL);
>  
>  	return error;
> @@ -499,7 +498,7 @@ xfs_attr_remove(
>  	 * Commit the last in the sequence of transactions.
>  	 */
>  	xfs_trans_log_inode(args.trans, dp, XFS_ILOG_CORE);
> -	error = xfs_trans_commit(args.trans, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(args.trans);
>  	xfs_iunlock(dp, XFS_ILOCK_EXCL);
>  
>  	return error;
> diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
> index a07055a..caca2c5 100644
> --- a/fs/xfs/libxfs/xfs_bmap.c
> +++ b/fs/xfs/libxfs/xfs_bmap.c
> @@ -1215,7 +1215,7 @@ xfs_bmap_add_attrfork(
>  	error = xfs_bmap_finish(&tp, &flist, &committed);
>  	if (error)
>  		goto bmap_cancel;
> -	error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(tp);
>  	xfs_iunlock(ip, XFS_ILOCK_EXCL);
>  	return error;
>  
> @@ -5926,8 +5926,7 @@ xfs_bmap_split_extent(
>  	if (error)
>  		goto out;
>  
> -	return xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> -
> +	return xfs_trans_commit(tp);
>  
>  out:
>  	xfs_trans_cancel(tp);
> diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c
> index 3a5667d..fcc151f 100644
> --- a/fs/xfs/libxfs/xfs_sb.c
> +++ b/fs/xfs/libxfs/xfs_sb.c
> @@ -799,5 +799,5 @@ xfs_sync_sb(
>  	xfs_log_sb(tp);
>  	if (wait)
>  		xfs_trans_set_sync(tp);
> -	return xfs_trans_commit(tp, 0);
> +	return xfs_trans_commit(tp);
>  }
> diff --git a/fs/xfs/libxfs/xfs_shared.h b/fs/xfs/libxfs/xfs_shared.h
> index 930cc7d..5be5297 100644
> --- a/fs/xfs/libxfs/xfs_shared.h
> +++ b/fs/xfs/libxfs/xfs_shared.h
> @@ -182,11 +182,6 @@ int	xfs_log_calc_minimum_size(struct xfs_mount *);
>  #define XFS_TRANS_FREEZE_PROT	0x40	/* Transaction has elevated writer
>  					   count in superblock */
>  /*
> - * Values for call flags parameter.
> - */
> -#define	XFS_TRANS_RELEASE_LOG_RES	0x4
> -
> -/*
>   * Field values for xfs_trans_mod_sb.
>   */
>  #define	XFS_TRANS_SB_ICOUNT		0x00000001
> diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
> index 3890a38..7246a39 100644
> --- a/fs/xfs/xfs_aops.c
> +++ b/fs/xfs/xfs_aops.c
> @@ -155,7 +155,7 @@ xfs_setfilesize(
>  	xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
>  	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
>  
> -	return xfs_trans_commit(tp, 0);
> +	return xfs_trans_commit(tp);
>  }
>  
>  STATIC int
> diff --git a/fs/xfs/xfs_attr_inactive.c b/fs/xfs/xfs_attr_inactive.c
> index af7fce3..48f26ff 100644
> --- a/fs/xfs/xfs_attr_inactive.c
> +++ b/fs/xfs/xfs_attr_inactive.c
> @@ -438,7 +438,7 @@ xfs_attr_inactive(xfs_inode_t *dp)
>  	if (error)
>  		goto out;
>  
> -	error = xfs_trans_commit(trans, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(trans);
>  	xfs_iunlock(dp, XFS_ILOCK_EXCL);
>  
>  	return error;
> diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
> index 7e795cf..1f0215d 100644
> --- a/fs/xfs/xfs_bmap_util.c
> +++ b/fs/xfs/xfs_bmap_util.c
> @@ -893,8 +893,7 @@ xfs_free_eofblocks(
>  			 */
>  			xfs_trans_cancel(tp);
>  		} else {
> -			error = xfs_trans_commit(tp,
> -						XFS_TRANS_RELEASE_LOG_RES);
> +			error = xfs_trans_commit(tp);
>  			if (!error)
>  				xfs_inode_clear_eofblocks_tag(ip);
>  		}
> @@ -1034,7 +1033,7 @@ xfs_alloc_file_space(
>  			goto error0;
>  		}
>  
> -		error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +		error = xfs_trans_commit(tp);
>  		xfs_iunlock(ip, XFS_ILOCK_EXCL);
>  		if (error) {
>  			break;
> @@ -1301,7 +1300,7 @@ xfs_free_file_space(
>  			goto error0;
>  		}
>  
> -		error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +		error = xfs_trans_commit(tp);
>  		xfs_iunlock(ip, XFS_ILOCK_EXCL);
>  	}
>  
> @@ -1473,7 +1472,7 @@ xfs_shift_file_space(
>  		if (error)
>  			goto out;
>  
> -		error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +		error = xfs_trans_commit(tp);
>  	}
>  
>  	return error;
> @@ -1882,7 +1881,7 @@ xfs_swap_extents(
>  	if (mp->m_flags & XFS_MOUNT_WSYNC)
>  		xfs_trans_set_sync(tp);
>  
> -	error = xfs_trans_commit(tp, 0);
> +	error = xfs_trans_commit(tp);
>  
>  	trace_xfs_swap_extent_after(ip, 0);
>  	trace_xfs_swap_extent_after(tip, 1);
> diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c
> index ab0ae1f..4143dc7 100644
> --- a/fs/xfs/xfs_dquot.c
> +++ b/fs/xfs/xfs_dquot.c
> @@ -666,7 +666,7 @@ xfs_qm_dqread(
>  	xfs_trans_brelse(tp, bp);
>  
>  	if (tp) {
> -		error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +		error = xfs_trans_commit(tp);
>  		if (error)
>  			goto error0;
>  	}
> diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
> index 46598b7..0dec858 100644
> --- a/fs/xfs/xfs_file.c
> +++ b/fs/xfs/xfs_file.c
> @@ -160,7 +160,7 @@ xfs_update_prealloc_flags(
>  	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
>  	if (flags & XFS_PREALLOC_SYNC)
>  		xfs_trans_set_sync(tp);
> -	return xfs_trans_commit(tp, 0);
> +	return xfs_trans_commit(tp);
>  }
>  
>  /*
> diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c
> index 0bdcdb7..0932c15 100644
> --- a/fs/xfs/xfs_fsops.c
> +++ b/fs/xfs/xfs_fsops.c
> @@ -489,7 +489,7 @@ xfs_growfs_data_private(
>  	if (dpct)
>  		xfs_trans_mod_sb(tp, XFS_TRANS_SB_IMAXPCT, dpct);
>  	xfs_trans_set_sync(tp);
> -	error = xfs_trans_commit(tp, 0);
> +	error = xfs_trans_commit(tp);
>  	if (error)
>  		return error;
>  
> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> index 3f3f8a0..63cd400 100644
> --- a/fs/xfs/xfs_inode.c
> +++ b/fs/xfs/xfs_inode.c
> @@ -1230,7 +1230,7 @@ xfs_create(
>  	if (error)
>  		goto out_bmap_cancel;
>  
> -	error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(tp);
>  	if (error)
>  		goto out_release_inode;
>  
> @@ -1339,7 +1339,7 @@ xfs_create_tmpfile(
>  	if (error)
>  		goto out_trans_cancel;
>  
> -	error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(tp);
>  	if (error)
>  		goto out_release_inode;
>  
> @@ -1465,7 +1465,7 @@ xfs_link(
>  		goto error_return;
>  	}
>  
> -	return xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	return xfs_trans_commit(tp);
>  
>   error_return:
>  	xfs_trans_cancel(tp);
> @@ -1702,7 +1702,7 @@ xfs_inactive_truncate(
>  
>  	ASSERT(ip->i_d.di_nextents == 0);
>  
> -	error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(tp);
>  	if (error)
>  		goto error_unlock;
>  
> @@ -1799,7 +1799,7 @@ xfs_inactive_ifree(
>  	if (error)
>  		xfs_notice(mp, "%s: xfs_bmap_finish returned error %d",
>  			__func__, error);
> -	error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(tp);
>  	if (error)
>  		xfs_notice(mp, "%s: xfs_trans_commit returned error %d",
>  			__func__, error);
> @@ -2569,7 +2569,7 @@ xfs_remove(
>  	if (error)
>  		goto out_bmap_cancel;
>  
> -	error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(tp);
>  	if (error)
>  		goto std_return;
>  
> @@ -2659,7 +2659,7 @@ xfs_finish_rename(
>  		return error;
>  	}
>  
> -	return xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	return xfs_trans_commit(tp);
>  }
>  
>  /*
> diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
> index 3abd3c4..ea7d85a 100644
> --- a/fs/xfs/xfs_ioctl.c
> +++ b/fs/xfs/xfs_ioctl.c
> @@ -346,7 +346,7 @@ xfs_set_dmattrs(
>  	ip->i_d.di_dmstate  = state;
>  
>  	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
> -	error = xfs_trans_commit(tp, 0);
> +	error = xfs_trans_commit(tp);
>  
>  	return error;
>  }
> @@ -1253,7 +1253,7 @@ xfs_ioctl_setattr(
>  	else
>  		ip->i_d.di_extsize = 0;
>  
> -	code = xfs_trans_commit(tp, 0);
> +	code = xfs_trans_commit(tp);
>  
>  	/*
>  	 * Release any dquot(s) the inode had kept before chown.
> @@ -1342,7 +1342,7 @@ xfs_ioc_setxflags(
>  		goto out_drop_write;
>  	}
>  
> -	error = xfs_trans_commit(tp, 0);
> +	error = xfs_trans_commit(tp);
>  out_drop_write:
>  	mnt_drop_write_file(filp);
>  	return error;
> diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
> index 6ca842a..1f86033 100644
> --- a/fs/xfs/xfs_iomap.c
> +++ b/fs/xfs/xfs_iomap.c
> @@ -213,7 +213,7 @@ xfs_iomap_write_direct(
>  	error = xfs_bmap_finish(&tp, &free_list, &committed);
>  	if (error)
>  		goto out_bmap_cancel;
> -	error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(tp);
>  	if (error)
>  		goto out_unlock;
>  
> @@ -760,7 +760,7 @@ xfs_iomap_write_allocate(
>  			if (error)
>  				goto trans_cancel;
>  
> -			error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +			error = xfs_trans_commit(tp);
>  			if (error)
>  				goto error0;
>  
> @@ -890,7 +890,7 @@ xfs_iomap_write_unwritten(
>  		if (error)
>  			goto error_on_bmapi_transaction;
>  
> -		error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +		error = xfs_trans_commit(tp);
>  		xfs_iunlock(ip, XFS_ILOCK_EXCL);
>  		if (error)
>  			return error;
> diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
> index 8bd71f1..e440aed 100644
> --- a/fs/xfs/xfs_iops.c
> +++ b/fs/xfs/xfs_iops.c
> @@ -702,7 +702,7 @@ xfs_setattr_nonsize(
>  
>  	if (mp->m_flags & XFS_MOUNT_WSYNC)
>  		xfs_trans_set_sync(tp);
> -	error = xfs_trans_commit(tp, 0);
> +	error = xfs_trans_commit(tp);
>  
>  	xfs_iunlock(ip, XFS_ILOCK_EXCL);
>  
> @@ -926,7 +926,7 @@ xfs_setattr_size(
>  	if (mp->m_flags & XFS_MOUNT_WSYNC)
>  		xfs_trans_set_sync(tp);
>  
> -	error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(tp);
>  out_unlock:
>  	if (lock_flags)
>  		xfs_iunlock(ip, lock_flags);
> @@ -1002,7 +1002,7 @@ xfs_vn_update_time(
>  	}
>  	xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
>  	xfs_trans_log_inode(tp, ip, XFS_ILOG_TIMESTAMP);
> -	return xfs_trans_commit(tp, 0);
> +	return xfs_trans_commit(tp);
>  }
>  
>  #define XFS_FIEMAP_FLAGS	(FIEMAP_FLAG_SYNC|FIEMAP_FLAG_XATTR)
> diff --git a/fs/xfs/xfs_log.h b/fs/xfs/xfs_log.h
> index 84e0deb..4040c47 100644
> --- a/fs/xfs/xfs_log.h
> +++ b/fs/xfs/xfs_log.h
> @@ -183,7 +183,7 @@ struct xlog_ticket *xfs_log_ticket_get(struct xlog_ticket *ticket);
>  void	  xfs_log_ticket_put(struct xlog_ticket *ticket);
>  
>  void	xfs_log_commit_cil(struct xfs_mount *mp, struct xfs_trans *tp,
> -				xfs_lsn_t *commit_lsn, int flags);
> +				xfs_lsn_t *commit_lsn, bool regrant);
>  bool	xfs_log_item_in_current_chkpt(struct xfs_log_item *lip);
>  
>  void	xfs_log_work_queue(struct xfs_mount *mp);
> diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c
> index 7e0e63e..05d8223 100644
> --- a/fs/xfs/xfs_log_cil.c
> +++ b/fs/xfs/xfs_log_cil.c
> @@ -773,13 +773,13 @@ xfs_log_commit_cil(
>  	struct xfs_mount	*mp,
>  	struct xfs_trans	*tp,
>  	xfs_lsn_t		*commit_lsn,
> -	int			flags)
> +	bool			regrant)
>  {
>  	struct xlog		*log = mp->m_log;
>  	struct xfs_cil		*cil = log->l_cilp;
>  	int			log_flags = 0;
>  
> -	if (flags & XFS_TRANS_RELEASE_LOG_RES)
> +	if (regrant)
>  		log_flags = XFS_LOG_REL_PERM_RESERV;
>  
>  	/* lock out background commit */
> diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
> index 8f2923f..599de72 100644
> --- a/fs/xfs/xfs_log_recover.c
> +++ b/fs/xfs/xfs_log_recover.c
> @@ -3751,7 +3751,7 @@ xlog_recover_process_efi(
>  	}
>  
>  	set_bit(XFS_EFI_RECOVERED, &efip->efi_flags);
> -	error = xfs_trans_commit(tp, 0);
> +	error = xfs_trans_commit(tp);
>  	return error;
>  
>  abort_error:
> @@ -3857,7 +3857,7 @@ xlog_recover_clear_agi_bucket(
>  	xfs_trans_log_buf(tp, agibp, offset,
>  			  (offset + sizeof(xfs_agino_t) - 1));
>  
> -	error = xfs_trans_commit(tp, 0);
> +	error = xfs_trans_commit(tp);
>  	if (error)
>  		goto out_error;
>  	return;
> diff --git a/fs/xfs/xfs_pnfs.c b/fs/xfs/xfs_pnfs.c
> index 3bb6097..ab4a606 100644
> --- a/fs/xfs/xfs_pnfs.c
> +++ b/fs/xfs/xfs_pnfs.c
> @@ -321,7 +321,7 @@ xfs_fs_commit_blocks(
>  	}
>  
>  	xfs_trans_set_sync(tp);
> -	error = xfs_trans_commit(tp, 0);
> +	error = xfs_trans_commit(tp);
>  
>  out_drop_iolock:
>  	xfs_iunlock(ip, XFS_IOLOCK_EXCL);
> diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
> index c4ba36d..eac9549 100644
> --- a/fs/xfs/xfs_qm.c
> +++ b/fs/xfs/xfs_qm.c
> @@ -795,7 +795,7 @@ xfs_qm_qino_alloc(
>  	spin_unlock(&mp->m_sb_lock);
>  	xfs_log_sb(tp);
>  
> -	error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(tp);
>  	if (error) {
>  		ASSERT(XFS_FORCED_SHUTDOWN(mp));
>  		xfs_alert(mp, "%s failed (error %d)!", __func__, error);
> diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c
> index 92ad24f..3640c6e 100644
> --- a/fs/xfs/xfs_qm_syscalls.c
> +++ b/fs/xfs/xfs_qm_syscalls.c
> @@ -259,7 +259,7 @@ xfs_qm_scall_trunc_qfile(
>  	ASSERT(ip->i_d.di_nextents == 0);
>  
>  	xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
> -	error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(tp);
>  
>  out_unlock:
>  	xfs_iunlock(ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL);
> @@ -547,7 +547,7 @@ xfs_qm_scall_setqlim(
>  	dqp->dq_flags |= XFS_DQ_DIRTY;
>  	xfs_trans_log_dquot(tp, dqp);
>  
> -	error = xfs_trans_commit(tp, 0);
> +	error = xfs_trans_commit(tp);
>  
>  out_rele:
>  	xfs_qm_dqrele(dqp);
> @@ -584,8 +584,7 @@ xfs_qm_log_quotaoff_end(
>  	 * We don't care about quotoff's performance.
>  	 */
>  	xfs_trans_set_sync(tp);
> -	error = xfs_trans_commit(tp, 0);
> -	return error;
> +	return xfs_trans_commit(tp);
>  }
>  
>  
> @@ -623,7 +622,7 @@ xfs_qm_log_quotaoff(
>  	 * We don't care about quotoff's performance.
>  	 */
>  	xfs_trans_set_sync(tp);
> -	error = xfs_trans_commit(tp, 0);
> +	error = xfs_trans_commit(tp);
>  	if (error)
>  		goto out;
>  
> diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c
> index ff5af66..f4e8c06 100644
> --- a/fs/xfs/xfs_rtalloc.c
> +++ b/fs/xfs/xfs_rtalloc.c
> @@ -815,7 +815,7 @@ xfs_growfs_rt_alloc(
>  		error = xfs_bmap_finish(&tp, &flist, &committed);
>  		if (error)
>  			goto error_cancel;
> -		error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +		error = xfs_trans_commit(tp);
>  		if (error)
>  			goto error;
>  		/*
> @@ -855,7 +855,7 @@ error_cancel:
>  			/*
>  			 * Commit the transaction.
>  			 */
> -			error = xfs_trans_commit(tp, 0);
> +			error = xfs_trans_commit(tp);
>  			if (error)
>  				goto error;
>  		}
> @@ -1070,7 +1070,7 @@ error_cancel:
>  		mp->m_rsumlevels = nrsumlevels;
>  		mp->m_rsumsize = nrsumsize;
>  
> -		error = xfs_trans_commit(tp, 0);
> +		error = xfs_trans_commit(tp);
>  		if (error)
>  			break;
>  	}
> diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c
> index b5573bf..2d90452 100644
> --- a/fs/xfs/xfs_symlink.c
> +++ b/fs/xfs/xfs_symlink.c
> @@ -390,7 +390,7 @@ xfs_symlink(
>  	if (error)
>  		goto out_bmap_cancel;
>  
> -	error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(tp);
>  	if (error)
>  		goto out_release_inode;
>  
> @@ -528,7 +528,7 @@ xfs_inactive_symlink_rmt(
>  	/*
>  	 * Commit the transaction containing extent freeing and EFDs.
>  	 */
> -	error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
> +	error = xfs_trans_commit(tp);
>  	if (error) {
>  		ASSERT(XFS_FORCED_SHUTDOWN(mp));
>  		goto error_unlock;
> diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c
> index 6cca996..6504c75 100644
> --- a/fs/xfs/xfs_trans.c
> +++ b/fs/xfs/xfs_trans.c
> @@ -892,27 +892,17 @@ xfs_trans_committed_bulk(
>   * have already been unlocked as if the commit had succeeded.
>   * Do not reference the transaction structure after this call.
>   */
> -int
> -xfs_trans_commit(
> +static int
> +__xfs_trans_commit(
>  	struct xfs_trans	*tp,
> -	uint			flags)
> +	bool			regrant)
>  {
>  	struct xfs_mount	*mp = tp->t_mountp;
>  	xfs_lsn_t		commit_lsn = -1;
>  	int			error = 0;
> -	int			log_flags = 0;
>  	int			sync = tp->t_flags & XFS_TRANS_SYNC;
>  
>  	/*
> -	 * Determine whether this commit is releasing a permanent
> -	 * log reservation or not.
> -	 */
> -	if (flags & XFS_TRANS_RELEASE_LOG_RES) {
> -		ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES);
> -		log_flags = XFS_LOG_REL_PERM_RESERV;
> -	}
> -
> -	/*
>  	 * If there is nothing to be logged by the transaction,
>  	 * then unlock all of the items associated with the
>  	 * transaction and free the transaction structure.
> @@ -936,7 +926,7 @@ xfs_trans_commit(
>  		xfs_trans_apply_sb_deltas(tp);
>  	xfs_trans_apply_dquot_deltas(tp);
>  
> -	xfs_log_commit_cil(mp, tp, &commit_lsn, flags);
> +	xfs_log_commit_cil(mp, tp, &commit_lsn, regrant);
>  
>  	current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);
>  	xfs_trans_free(tp);
> @@ -964,6 +954,12 @@ out_unreserve:
>  	 */
>  	xfs_trans_unreserve_and_mod_dquots(tp);
>  	if (tp->t_ticket) {
> +		int			log_flags = 0;
> +
> +		if (regrant) {
> +			ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES);
> +			log_flags = XFS_LOG_REL_PERM_RESERV;
> +		}

Is the regrant logic here and in xfs_log_commit_cil() backwards or am I
misreading?

Brian

>  		commit_lsn = xfs_log_done(mp, tp->t_ticket, NULL, log_flags);
>  		if (commit_lsn == -1 && !error)
>  			error = -EIO;
> @@ -976,6 +972,13 @@ out_unreserve:
>  	return error;
>  }
>  
> +int
> +xfs_trans_commit(
> +	struct xfs_trans	*tp)
> +{
> +	return __xfs_trans_commit(tp, false);
> +}
> +
>  /*
>   * Unlock all of the transaction's items and free the transaction.
>   * The transaction must not have modified any of its items, because
> @@ -1029,7 +1032,7 @@ xfs_trans_cancel(
>  /*
>   * Roll from one trans in the sequence of PERMANENT transactions to
>   * the next: permanent transactions are only flushed out when
> - * committed with XFS_TRANS_RELEASE_LOG_RES, but we still want as soon
> + * committed with xfs_trans_commit(), but we still want as soon
>   * as possible to let chunks of it go to the log. So we commit the
>   * chunk we've been working on and get a new transaction to continue.
>   */
> @@ -1063,7 +1066,7 @@ xfs_trans_roll(
>  	 * is in progress. The caller takes the responsibility to cancel
>  	 * the duplicate transaction that gets returned.
>  	 */
> -	error = xfs_trans_commit(trans, 0);
> +	error = __xfs_trans_commit(trans, true);
>  	if (error)
>  		return error;
>  
> diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h
> index ca95b92..3b21b4e 100644
> --- a/fs/xfs/xfs_trans.h
> +++ b/fs/xfs/xfs_trans.h
> @@ -225,7 +225,7 @@ void		xfs_trans_log_efd_extent(xfs_trans_t *,
>  					 struct xfs_efd_log_item *,
>  					 xfs_fsblock_t,
>  					 xfs_extlen_t);
> -int		xfs_trans_commit(xfs_trans_t *, uint flags);
> +int		xfs_trans_commit(struct xfs_trans *);
>  int		xfs_trans_roll(struct xfs_trans **, struct xfs_inode *);
>  void		xfs_trans_cancel(xfs_trans_t *);
>  int		xfs_trans_ail_init(struct xfs_mount *);
> -- 
> 1.9.1
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs




[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux