Re: [PATCH] libxfs: propagate transaction block reservations

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

 



On Wed, Jul 19, 2017 at 08:55:55AM -0700, Darrick J. Wong wrote:
> Certain parts of the libxfs preemptively refuse to run if the
> transaction block reservation has fallen to zero.  We leave t_blk_res at
> its default of zero, which means that these code paths always fail even
> if the transaction was allocated with a non-zero block reservation.  Set
> t_blk_res and maintain it through transaction rolls, even though we
> don't do much enforcement the transaction block limits.
> 
> Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>
> ---

Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx>

>  libxfs/trans.c |    7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/libxfs/trans.c b/libxfs/trans.c
> index fe22cb9..035248f 100644
> --- a/libxfs/trans.c
> +++ b/libxfs/trans.c
> @@ -106,6 +106,7 @@ libxfs_trans_roll(
>  	struct xfs_mount	*mp;
>  	struct xfs_trans	*trans;
>  	struct xfs_trans_res	tres;
> +	unsigned int		old_blk_res;
>  	int			error;
>  
>  	/*
> @@ -121,6 +122,7 @@ libxfs_trans_roll(
>  	mp = trans->t_mountp;
>  	tres.tr_logres = trans->t_log_res;
>  	tres.tr_logcount = trans->t_log_count;
> +	old_blk_res = trans->t_blk_res;
>  
>  	/*
>  	 * Commit the current transaction.
> @@ -145,6 +147,8 @@ libxfs_trans_roll(
>  	tres.tr_logflags = XFS_TRANS_PERM_LOG_RES;
>  	error = libxfs_trans_alloc(mp, &tres, 0, 0, 0, tpp);
>  	trans = *tpp;
> +	trans->t_blk_res = old_blk_res;
> +
>  	/*
>  	 *  Ensure that the inode is in the new transaction and locked.
>  	 */
> @@ -185,6 +189,7 @@ libxfs_trans_alloc(
>  		exit(1);
>  	}
>  	ptr->t_mountp = mp;
> +	ptr->t_blk_res = blocks;
>  	INIT_LIST_HEAD(&ptr->t_items);
>  #ifdef XACT_DEBUG
>  	fprintf(stderr, "allocated new transaction %p\n", ptr);
> @@ -750,7 +755,7 @@ trans_committed(
>          list_for_each_entry_safe(lidp, next, &tp->t_items, lid_trans) {
>  		struct xfs_log_item *lip = lidp->lid_item;
>  
> -                xfs_trans_del_item(lip);
> +		xfs_trans_del_item(lip);
>  
>  		if (lip->li_type == XFS_LI_BUF)
>  			buf_item_done((xfs_buf_log_item_t *)lip);
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux