Re: [PATCH 13/15] xfs: pass transaction to xfs_defer_add()

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

 



On Mon, Jul 30, 2018 at 12:45:18PM -0400, Brian Foster wrote:
> The majority of remaining references to struct xfs_defer_ops in XFS
> are associated with xfs_defer_add(). At this point, there are no
> more external xfs_defer_ops users left. All instances of
> xfs_defer_ops are embedded in the transaction, which means we can
> safely pass the transaction down to the dfops add interface.
> 
> Update xfs_defer_add() to receive the transaction as a parameter.
> Various subsystems implement wrappers to allocate and construct the
> context specific data structures for the associated deferred
> operation type. Update these to also carry the transaction down as
> needed and clean up unused dfops parameters along the way.
> 
> This removes most of the remaining references to struct
> xfs_defer_ops throughout the code and facilitates removal of the
> structure.
> 
> Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx>

Looks ok,
Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>

--D

> ---
>  fs/xfs/libxfs/xfs_alloc.c      |  9 ++--
>  fs/xfs/libxfs/xfs_bmap.c       | 75 +++++++++++++++------------------
>  fs/xfs/libxfs/xfs_bmap.h       | 19 ++++-----
>  fs/xfs/libxfs/xfs_bmap_btree.c |  2 +-
>  fs/xfs/libxfs/xfs_defer.c      |  3 +-
>  fs/xfs/libxfs/xfs_defer.h      |  2 +-
>  fs/xfs/libxfs/xfs_ialloc.c     | 25 +++++------
>  fs/xfs/libxfs/xfs_refcount.c   | 76 ++++++++++++++--------------------
>  fs/xfs/libxfs/xfs_refcount.h   | 18 ++++----
>  fs/xfs/libxfs/xfs_rmap.c       | 53 ++++++++++++------------
>  fs/xfs/libxfs/xfs_rmap.h       | 22 ++++------
>  fs/xfs/xfs_bmap_item.c         |  3 +-
>  fs/xfs/xfs_bmap_util.c         | 13 ++----
>  fs/xfs/xfs_refcount_item.c     | 14 ++-----
>  fs/xfs/xfs_reflink.c           | 21 ++++------
>  15 files changed, 156 insertions(+), 199 deletions(-)
> 
> diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c
> index 3c3f2d5119ea..6bacdc31a439 100644
> --- a/fs/xfs/libxfs/xfs_alloc.c
> +++ b/fs/xfs/libxfs/xfs_alloc.c
> @@ -2198,12 +2198,12 @@ xfs_agfl_reset(
>   */
>  STATIC void
>  xfs_defer_agfl_block(
> -	struct xfs_mount		*mp,
> -	struct xfs_defer_ops		*dfops,
> +	struct xfs_trans		*tp,
>  	xfs_agnumber_t			agno,
>  	xfs_fsblock_t			agbno,
>  	struct xfs_owner_info		*oinfo)
>  {
> +	struct xfs_mount		*mp = tp->t_mountp;
>  	struct xfs_extent_free_item	*new;		/* new element */
>  
>  	ASSERT(xfs_bmap_free_item_zone != NULL);
> @@ -2216,7 +2216,7 @@ xfs_defer_agfl_block(
>  
>  	trace_xfs_agfl_free_defer(mp, agno, 0, agbno, 1);
>  
> -	xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_AGFL_FREE, &new->xefi_list);
> +	xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_AGFL_FREE, &new->xefi_list);
>  }
>  
>  /*
> @@ -2325,8 +2325,7 @@ xfs_alloc_fix_freelist(
>  
>  		/* defer agfl frees if dfops is provided */
>  		if (tp->t_dfops) {
> -			xfs_defer_agfl_block(mp, tp->t_dfops, args->agno,
> -					     bno, &targs.oinfo);
> +			xfs_defer_agfl_block(tp, args->agno, bno, &targs.oinfo);
>  		} else {
>  			error = xfs_free_agfl_block(tp, args->agno, bno, agbp,
>  						    &targs.oinfo);
> diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
> index d20f541b7061..f5f1fc47923e 100644
> --- a/fs/xfs/libxfs/xfs_bmap.c
> +++ b/fs/xfs/libxfs/xfs_bmap.c
> @@ -533,13 +533,13 @@ xfs_bmap_validate_ret(
>   */
>  void
>  __xfs_bmap_add_free(
> -	struct xfs_mount		*mp,
> -	struct xfs_defer_ops		*dfops,
> +	struct xfs_trans		*tp,
>  	xfs_fsblock_t			bno,
>  	xfs_filblks_t			len,
>  	struct xfs_owner_info		*oinfo,
>  	bool				skip_discard)
>  {
> +	struct xfs_mount		*mp = tp->t_mountp;
>  	struct xfs_extent_free_item	*new;		/* new element */
>  #ifdef DEBUG
>  	xfs_agnumber_t		agno;
> @@ -568,7 +568,7 @@ __xfs_bmap_add_free(
>  	new->xefi_skip_discard = skip_discard;
>  	trace_xfs_bmap_free_defer(mp, XFS_FSB_TO_AGNO(mp, bno), 0,
>  			XFS_FSB_TO_AGBNO(mp, bno), len);
> -	xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_FREE, &new->xefi_list);
> +	xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_FREE, &new->xefi_list);
>  }
>  
>  /*
> @@ -624,7 +624,7 @@ xfs_bmap_btree_to_extents(
>  	if ((error = xfs_btree_check_block(cur, cblock, 0, cbp)))
>  		return error;
>  	xfs_rmap_ino_bmbt_owner(&oinfo, ip->i_ino, whichfork);
> -	xfs_bmap_add_free(mp, cur->bc_tp->t_dfops, cbno, 1, &oinfo);
> +	xfs_bmap_add_free(cur->bc_tp, cbno, 1, &oinfo);
>  	ip->i_d.di_nblocks--;
>  	xfs_trans_mod_dquot_byino(tp, ip, XFS_TRANS_DQ_BCOUNT, -1L);
>  	xfs_trans_binval(tp, cbp);
> @@ -1961,8 +1961,7 @@ xfs_bmap_add_extent_delay_real(
>  
>  	/* add reverse mapping unless caller opted out */
>  	if (!(bma->flags & XFS_BMAPI_NORMAP)) {
> -		error = xfs_rmap_map_extent(mp, bma->tp->t_dfops, bma->ip,
> -				whichfork, new);
> +		error = xfs_rmap_map_extent(bma->tp, bma->ip, whichfork, new);
>  		if (error)
>  			goto done;
>  	}
> @@ -2026,7 +2025,6 @@ xfs_bmap_add_extent_unwritten_real(
>  	int			state = xfs_bmap_fork_to_state(whichfork);
>  	struct xfs_mount	*mp = ip->i_mount;
>  	struct xfs_bmbt_irec	old;
> -	struct xfs_defer_ops	*dfops = tp ? tp->t_dfops : NULL;
>  
>  	*logflagsp = 0;
>  
> @@ -2445,7 +2443,7 @@ xfs_bmap_add_extent_unwritten_real(
>  	}
>  
>  	/* update reverse mappings */
> -	error = xfs_rmap_convert_extent(mp, dfops, ip, whichfork, new);
> +	error = xfs_rmap_convert_extent(mp, tp, ip, whichfork, new);
>  	if (error)
>  		goto done;
>  
> @@ -2806,8 +2804,7 @@ xfs_bmap_add_extent_hole_real(
>  
>  	/* add reverse mapping unless caller opted out */
>  	if (!(flags & XFS_BMAPI_NORMAP)) {
> -		error = xfs_rmap_map_extent(mp, tp->t_dfops, ip, whichfork,
> -				new);
> +		error = xfs_rmap_map_extent(tp, ip, whichfork, new);
>  		if (error)
>  			goto done;
>  	}
> @@ -4364,9 +4361,8 @@ xfs_bmapi_write(
>  			 * the refcount btree for orphan recovery.
>  			 */
>  			if (whichfork == XFS_COW_FORK) {
> -				error = xfs_refcount_alloc_cow_extent(mp,
> -						tp->t_dfops, bma.blkno,
> -						bma.length);
> +				error = xfs_refcount_alloc_cow_extent(tp,
> +						bma.blkno, bma.length);
>  				if (error)
>  					goto error0;
>  			}
> @@ -4852,7 +4848,6 @@ xfs_bmap_del_extent_real(
>  	uint			qfield;	/* quota field to update */
>  	int			state = xfs_bmap_fork_to_state(whichfork);
>  	struct xfs_bmbt_irec	old;
> -	struct xfs_defer_ops	*dfops = tp ? tp->t_dfops : NULL;
>  
>  	mp = ip->i_mount;
>  	XFS_STATS_INC(mp, xs_del_exlist);
> @@ -5036,7 +5031,7 @@ xfs_bmap_del_extent_real(
>  	}
>  
>  	/* remove reverse mapping */
> -	error = xfs_rmap_unmap_extent(mp, dfops, ip, whichfork, del);
> +	error = xfs_rmap_unmap_extent(tp, ip, whichfork, del);
>  	if (error)
>  		goto done;
>  
> @@ -5045,11 +5040,11 @@ xfs_bmap_del_extent_real(
>  	 */
>  	if (do_fx && !(bflags & XFS_BMAPI_REMAP)) {
>  		if (xfs_is_reflink_inode(ip) && whichfork == XFS_DATA_FORK) {
> -			error = xfs_refcount_decrease_extent(mp, dfops, del);
> +			error = xfs_refcount_decrease_extent(tp, del);
>  			if (error)
>  				goto done;
>  		} else {
> -			__xfs_bmap_add_free(mp, dfops, del->br_startblock,
> +			__xfs_bmap_add_free(tp, del->br_startblock,
>  					del->br_blockcount, NULL,
>  					(bflags & XFS_BMAPI_NODISCARD) ||
>  					del->br_state == XFS_EXT_UNWRITTEN);
> @@ -5489,6 +5484,7 @@ xfs_bmse_can_merge(
>   */
>  STATIC int
>  xfs_bmse_merge(
> +	struct xfs_trans		*tp,
>  	struct xfs_inode		*ip,
>  	int				whichfork,
>  	xfs_fileoff_t			shift,		/* shift fsb */
> @@ -5496,8 +5492,7 @@ xfs_bmse_merge(
>  	struct xfs_bmbt_irec		*got,		/* extent to shift */
>  	struct xfs_bmbt_irec		*left,		/* preceding extent */
>  	struct xfs_btree_cur		*cur,
> -	int				*logflags,	/* output */
> -	struct xfs_defer_ops		*dfops)
> +	int				*logflags)	/* output */
>  {
>  	struct xfs_bmbt_irec		new;
>  	xfs_filblks_t			blockcount;
> @@ -5553,23 +5548,23 @@ xfs_bmse_merge(
>  			&new);
>  
>  	/* update reverse mapping. rmap functions merge the rmaps for us */
> -	error = xfs_rmap_unmap_extent(mp, dfops, ip, whichfork, got);
> +	error = xfs_rmap_unmap_extent(tp, ip, whichfork, got);
>  	if (error)
>  		return error;
>  	memcpy(&new, got, sizeof(new));
>  	new.br_startoff = left->br_startoff + left->br_blockcount;
> -	return xfs_rmap_map_extent(mp, dfops, ip, whichfork, &new);
> +	return xfs_rmap_map_extent(tp, ip, whichfork, &new);
>  }
>  
>  static int
>  xfs_bmap_shift_update_extent(
> +	struct xfs_trans	*tp,
>  	struct xfs_inode	*ip,
>  	int			whichfork,
>  	struct xfs_iext_cursor	*icur,
>  	struct xfs_bmbt_irec	*got,
>  	struct xfs_btree_cur	*cur,
>  	int			*logflags,
> -	struct xfs_defer_ops	*dfops,
>  	xfs_fileoff_t		startoff)
>  {
>  	struct xfs_mount	*mp = ip->i_mount;
> @@ -5597,10 +5592,10 @@ xfs_bmap_shift_update_extent(
>  			got);
>  
>  	/* update reverse mapping */
> -	error = xfs_rmap_unmap_extent(mp, dfops, ip, whichfork, &prev);
> +	error = xfs_rmap_unmap_extent(tp, ip, whichfork, &prev);
>  	if (error)
>  		return error;
> -	return xfs_rmap_map_extent(mp, dfops, ip, whichfork, got);
> +	return xfs_rmap_map_extent(tp, ip, whichfork, got);
>  }
>  
>  int
> @@ -5660,9 +5655,9 @@ xfs_bmap_collapse_extents(
>  		}
>  
>  		if (xfs_bmse_can_merge(&prev, &got, offset_shift_fsb)) {
> -			error = xfs_bmse_merge(ip, whichfork, offset_shift_fsb,
> -					&icur, &got, &prev, cur, &logflags,
> -					tp->t_dfops);
> +			error = xfs_bmse_merge(tp, ip, whichfork,
> +					offset_shift_fsb, &icur, &got, &prev,
> +					cur, &logflags);
>  			if (error)
>  				goto del_cursor;
>  			goto done;
> @@ -5674,8 +5669,8 @@ xfs_bmap_collapse_extents(
>  		}
>  	}
>  
> -	error = xfs_bmap_shift_update_extent(ip, whichfork, &icur, &got, cur,
> -			&logflags, tp->t_dfops, new_startoff);
> +	error = xfs_bmap_shift_update_extent(tp, ip, whichfork, &icur, &got,
> +			cur, &logflags, new_startoff);
>  	if (error)
>  		goto del_cursor;
>  
> @@ -5801,8 +5796,8 @@ xfs_bmap_insert_extents(
>  			WARN_ON_ONCE(1);
>  	}
>  
> -	error = xfs_bmap_shift_update_extent(ip, whichfork, &icur, &got, cur,
> -			&logflags, tp->t_dfops, new_startoff);
> +	error = xfs_bmap_shift_update_extent(tp, ip, whichfork, &icur, &got,
> +			cur, &logflags, new_startoff);
>  	if (error)
>  		goto del_cursor;
>  
> @@ -5979,13 +5974,13 @@ xfs_bmap_is_update_needed(
>  /* Record a bmap intent. */
>  static int
>  __xfs_bmap_add(
> -	struct xfs_mount		*mp,
> -	struct xfs_defer_ops		*dfops,
> +	struct xfs_trans		*tp,
>  	enum xfs_bmap_intent_type	type,
>  	struct xfs_inode		*ip,
>  	int				whichfork,
>  	struct xfs_bmbt_irec		*bmap)
>  {
> +	struct xfs_mount		*mp = tp->t_mountp;
>  	struct xfs_bmap_intent		*bi;
>  
>  	trace_xfs_bmap_defer(mp,
> @@ -6004,38 +5999,34 @@ __xfs_bmap_add(
>  	bi->bi_whichfork = whichfork;
>  	bi->bi_bmap = *bmap;
>  
> -	xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_BMAP, &bi->bi_list);
> +	xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_BMAP, &bi->bi_list);
>  	return 0;
>  }
>  
>  /* Map an extent into a file. */
>  int
>  xfs_bmap_map_extent(
> -	struct xfs_mount	*mp,
> -	struct xfs_defer_ops	*dfops,
> +	struct xfs_trans	*tp,
>  	struct xfs_inode	*ip,
>  	struct xfs_bmbt_irec	*PREV)
>  {
>  	if (!xfs_bmap_is_update_needed(PREV))
>  		return 0;
>  
> -	return __xfs_bmap_add(mp, dfops, XFS_BMAP_MAP, ip,
> -			XFS_DATA_FORK, PREV);
> +	return __xfs_bmap_add(tp, XFS_BMAP_MAP, ip, XFS_DATA_FORK, PREV);
>  }
>  
>  /* Unmap an extent out of a file. */
>  int
>  xfs_bmap_unmap_extent(
> -	struct xfs_mount	*mp,
> -	struct xfs_defer_ops	*dfops,
> +	struct xfs_trans	*tp,
>  	struct xfs_inode	*ip,
>  	struct xfs_bmbt_irec	*PREV)
>  {
>  	if (!xfs_bmap_is_update_needed(PREV))
>  		return 0;
>  
> -	return __xfs_bmap_add(mp, dfops, XFS_BMAP_UNMAP, ip,
> -			XFS_DATA_FORK, PREV);
> +	return __xfs_bmap_add(tp, XFS_BMAP_UNMAP, ip, XFS_DATA_FORK, PREV);
>  }
>  
>  /*
> diff --git a/fs/xfs/libxfs/xfs_bmap.h b/fs/xfs/libxfs/xfs_bmap.h
> index 9165a878edcd..b6e9b639e731 100644
> --- a/fs/xfs/libxfs/xfs_bmap.h
> +++ b/fs/xfs/libxfs/xfs_bmap.h
> @@ -184,9 +184,9 @@ void	xfs_trim_extent(struct xfs_bmbt_irec *irec, xfs_fileoff_t bno,
>  void	xfs_trim_extent_eof(struct xfs_bmbt_irec *, struct xfs_inode *);
>  int	xfs_bmap_add_attrfork(struct xfs_inode *ip, int size, int rsvd);
>  void	xfs_bmap_local_to_extents_empty(struct xfs_inode *ip, int whichfork);
> -void	__xfs_bmap_add_free(struct xfs_mount *mp, struct xfs_defer_ops *dfops,
> -			  xfs_fsblock_t bno, xfs_filblks_t len,
> -			  struct xfs_owner_info *oinfo, bool skip_discard);
> +void	__xfs_bmap_add_free(struct xfs_trans *tp, xfs_fsblock_t bno,
> +		xfs_filblks_t len, struct xfs_owner_info *oinfo,
> +		bool skip_discard);
>  void	xfs_bmap_compute_maxlevels(struct xfs_mount *mp, int whichfork);
>  int	xfs_bmap_first_unused(struct xfs_trans *tp, struct xfs_inode *ip,
>  		xfs_extlen_t len, xfs_fileoff_t *unused, int whichfork);
> @@ -230,13 +230,12 @@ int	xfs_bmapi_reserve_delalloc(struct xfs_inode *ip, int whichfork,
>  
>  static inline void
>  xfs_bmap_add_free(
> -	struct xfs_mount		*mp,
> -	struct xfs_defer_ops		*dfops,
> +	struct xfs_trans		*tp,
>  	xfs_fsblock_t			bno,
>  	xfs_filblks_t			len,
>  	struct xfs_owner_info		*oinfo)
>  {
> -	__xfs_bmap_add_free(mp, dfops, bno, len, oinfo, false);
> +	__xfs_bmap_add_free(tp, bno, len, oinfo, false);
>  }
>  
>  enum xfs_bmap_intent_type {
> @@ -256,10 +255,10 @@ int	xfs_bmap_finish_one(struct xfs_trans *tp, struct xfs_inode *ip,
>  		enum xfs_bmap_intent_type type, int whichfork,
>  		xfs_fileoff_t startoff, xfs_fsblock_t startblock,
>  		xfs_filblks_t *blockcount, xfs_exntst_t state);
> -int	xfs_bmap_map_extent(struct xfs_mount *mp, struct xfs_defer_ops *dfops,
> -		struct xfs_inode *ip, struct xfs_bmbt_irec *imap);
> -int	xfs_bmap_unmap_extent(struct xfs_mount *mp, struct xfs_defer_ops *dfops,
> -		struct xfs_inode *ip, struct xfs_bmbt_irec *imap);
> +int	xfs_bmap_map_extent(struct xfs_trans *tp, struct xfs_inode *ip,
> +		struct xfs_bmbt_irec *imap);
> +int	xfs_bmap_unmap_extent(struct xfs_trans *tp, struct xfs_inode *ip,
> +		struct xfs_bmbt_irec *imap);
>  
>  static inline int xfs_bmap_fork_to_state(int whichfork)
>  {
> diff --git a/fs/xfs/libxfs/xfs_bmap_btree.c b/fs/xfs/libxfs/xfs_bmap_btree.c
> index 955e29de8cae..cdb74d2e2a43 100644
> --- a/fs/xfs/libxfs/xfs_bmap_btree.c
> +++ b/fs/xfs/libxfs/xfs_bmap_btree.c
> @@ -289,7 +289,7 @@ xfs_bmbt_free_block(
>  	struct xfs_owner_info	oinfo;
>  
>  	xfs_rmap_ino_bmbt_owner(&oinfo, ip->i_ino, cur->bc_private.b.whichfork);
> -	xfs_bmap_add_free(mp, cur->bc_tp->t_dfops, fsbno, 1, &oinfo);
> +	xfs_bmap_add_free(cur->bc_tp, fsbno, 1, &oinfo);
>  	ip->i_d.di_nblocks--;
>  
>  	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
> diff --git a/fs/xfs/libxfs/xfs_defer.c b/fs/xfs/libxfs/xfs_defer.c
> index 6bf792e2d61b..152190a69432 100644
> --- a/fs/xfs/libxfs/xfs_defer.c
> +++ b/fs/xfs/libxfs/xfs_defer.c
> @@ -493,10 +493,11 @@ xfs_defer_cancel(
>  /* Add an item for later deferred processing. */
>  void
>  xfs_defer_add(
> -	struct xfs_defer_ops		*dop,
> +	struct xfs_trans		*tp,
>  	enum xfs_defer_ops_type		type,
>  	struct list_head		*li)
>  {
> +	struct xfs_defer_ops		*dop = tp->t_dfops;
>  	struct xfs_defer_pending	*dfp = NULL;
>  
>  	/*
> diff --git a/fs/xfs/libxfs/xfs_defer.h b/fs/xfs/libxfs/xfs_defer.h
> index 363af16328cb..295703737272 100644
> --- a/fs/xfs/libxfs/xfs_defer.h
> +++ b/fs/xfs/libxfs/xfs_defer.h
> @@ -35,7 +35,7 @@ enum xfs_defer_ops_type {
>  	XFS_DEFER_OPS_TYPE_MAX,
>  };
>  
> -void xfs_defer_add(struct xfs_defer_ops *dop, enum xfs_defer_ops_type type,
> +void xfs_defer_add(struct xfs_trans *tp, enum xfs_defer_ops_type type,
>  		struct list_head *h);
>  int xfs_defer_finish_noroll(struct xfs_trans **tp);
>  int xfs_defer_finish(struct xfs_trans **tp);
> diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c
> index 295304ad1bc1..a8f6db735d5d 100644
> --- a/fs/xfs/libxfs/xfs_ialloc.c
> +++ b/fs/xfs/libxfs/xfs_ialloc.c
> @@ -1838,23 +1838,24 @@ xfs_dialloc(
>   */
>  STATIC void
>  xfs_difree_inode_chunk(
> -	struct xfs_mount		*mp,
> +	struct xfs_trans		*tp,
>  	xfs_agnumber_t			agno,
> -	struct xfs_inobt_rec_incore	*rec,
> -	struct xfs_defer_ops		*dfops)
> +	struct xfs_inobt_rec_incore	*rec)
>  {
> -	xfs_agblock_t	sagbno = XFS_AGINO_TO_AGBNO(mp, rec->ir_startino);
> -	int		startidx, endidx;
> -	int		nextbit;
> -	xfs_agblock_t	agbno;
> -	int		contigblk;
> -	struct xfs_owner_info	oinfo;
> +	struct xfs_mount		*mp = tp->t_mountp;
> +	xfs_agblock_t			sagbno = XFS_AGINO_TO_AGBNO(mp,
> +							rec->ir_startino);
> +	int				startidx, endidx;
> +	int				nextbit;
> +	xfs_agblock_t			agbno;
> +	int				contigblk;
> +	struct xfs_owner_info		oinfo;
>  	DECLARE_BITMAP(holemask, XFS_INOBT_HOLEMASK_BITS);
>  	xfs_rmap_ag_owner(&oinfo, XFS_RMAP_OWN_INODES);
>  
>  	if (!xfs_inobt_issparse(rec->ir_holemask)) {
>  		/* not sparse, calculate extent info directly */
> -		xfs_bmap_add_free(mp, dfops, XFS_AGB_TO_FSB(mp, agno, sagbno),
> +		xfs_bmap_add_free(tp, XFS_AGB_TO_FSB(mp, agno, sagbno),
>  				  mp->m_ialloc_blks, &oinfo);
>  		return;
>  	}
> @@ -1898,7 +1899,7 @@ xfs_difree_inode_chunk(
>  
>  		ASSERT(agbno % mp->m_sb.sb_spino_align == 0);
>  		ASSERT(contigblk % mp->m_sb.sb_spino_align == 0);
> -		xfs_bmap_add_free(mp, dfops, XFS_AGB_TO_FSB(mp, agno, agbno),
> +		xfs_bmap_add_free(tp, XFS_AGB_TO_FSB(mp, agno, agbno),
>  				  contigblk, &oinfo);
>  
>  		/* reset range to current bit and carry on... */
> @@ -2002,7 +2003,7 @@ xfs_difree_inobt(
>  			goto error0;
>  		}
>  
> -		xfs_difree_inode_chunk(mp, agno, &rec, tp->t_dfops);
> +		xfs_difree_inode_chunk(tp, agno, &rec);
>  	} else {
>  		xic->deleted = false;
>  
> diff --git a/fs/xfs/libxfs/xfs_refcount.c b/fs/xfs/libxfs/xfs_refcount.c
> index 86f297ca90cd..c713c49200d3 100644
> --- a/fs/xfs/libxfs/xfs_refcount.c
> +++ b/fs/xfs/libxfs/xfs_refcount.c
> @@ -34,11 +34,9 @@ enum xfs_refc_adjust_op {
>  };
>  
>  STATIC int __xfs_refcount_cow_alloc(struct xfs_btree_cur *rcur,
> -		xfs_agblock_t agbno, xfs_extlen_t aglen,
> -		struct xfs_defer_ops *dfops);
> +		xfs_agblock_t agbno, xfs_extlen_t aglen);
>  STATIC int __xfs_refcount_cow_free(struct xfs_btree_cur *rcur,
> -		xfs_agblock_t agbno, xfs_extlen_t aglen,
> -		struct xfs_defer_ops *dfops);
> +		xfs_agblock_t agbno, xfs_extlen_t aglen);
>  
>  /*
>   * Look up the first record less than or equal to [bno, len] in the btree
> @@ -870,7 +868,6 @@ xfs_refcount_adjust_extents(
>  	xfs_agblock_t		*agbno,
>  	xfs_extlen_t		*aglen,
>  	enum xfs_refc_adjust_op	adj,
> -	struct xfs_defer_ops	*dfops,
>  	struct xfs_owner_info	*oinfo)
>  {
>  	struct xfs_refcount_irec	ext, tmp;
> @@ -925,8 +922,8 @@ xfs_refcount_adjust_extents(
>  				fsbno = XFS_AGB_TO_FSB(cur->bc_mp,
>  						cur->bc_private.a.agno,
>  						tmp.rc_startblock);
> -				xfs_bmap_add_free(cur->bc_mp, dfops, fsbno,
> -						tmp.rc_blockcount, oinfo);
> +				xfs_bmap_add_free(cur->bc_tp, fsbno,
> +						  tmp.rc_blockcount, oinfo);
>  			}
>  
>  			(*agbno) += tmp.rc_blockcount;
> @@ -968,8 +965,8 @@ xfs_refcount_adjust_extents(
>  			fsbno = XFS_AGB_TO_FSB(cur->bc_mp,
>  					cur->bc_private.a.agno,
>  					ext.rc_startblock);
> -			xfs_bmap_add_free(cur->bc_mp, dfops, fsbno,
> -					ext.rc_blockcount, oinfo);
> +			xfs_bmap_add_free(cur->bc_tp, fsbno, ext.rc_blockcount,
> +					  oinfo);
>  		}
>  
>  skip:
> @@ -998,7 +995,6 @@ xfs_refcount_adjust(
>  	xfs_agblock_t		*new_agbno,
>  	xfs_extlen_t		*new_aglen,
>  	enum xfs_refc_adjust_op	adj,
> -	struct xfs_defer_ops	*dfops,
>  	struct xfs_owner_info	*oinfo)
>  {
>  	bool			shape_changed;
> @@ -1043,7 +1039,7 @@ xfs_refcount_adjust(
>  
>  	/* Now that we've taken care of the ends, adjust the middle extents */
>  	error = xfs_refcount_adjust_extents(cur, new_agbno, new_aglen,
> -			adj, dfops, oinfo);
> +			adj, oinfo);
>  	if (error)
>  		goto out_error;
>  
> @@ -1090,7 +1086,6 @@ xfs_refcount_finish_one(
>  	struct xfs_btree_cur		**pcur)
>  {
>  	struct xfs_mount		*mp = tp->t_mountp;
> -	struct xfs_defer_ops		*dfops = tp->t_dfops;
>  	struct xfs_btree_cur		*rcur;
>  	struct xfs_buf			*agbp = NULL;
>  	int				error = 0;
> @@ -1145,23 +1140,23 @@ xfs_refcount_finish_one(
>  	switch (type) {
>  	case XFS_REFCOUNT_INCREASE:
>  		error = xfs_refcount_adjust(rcur, bno, blockcount, &new_agbno,
> -			new_len, XFS_REFCOUNT_ADJUST_INCREASE, dfops, NULL);
> +			new_len, XFS_REFCOUNT_ADJUST_INCREASE, NULL);
>  		*new_fsb = XFS_AGB_TO_FSB(mp, agno, new_agbno);
>  		break;
>  	case XFS_REFCOUNT_DECREASE:
>  		error = xfs_refcount_adjust(rcur, bno, blockcount, &new_agbno,
> -			new_len, XFS_REFCOUNT_ADJUST_DECREASE, dfops, NULL);
> +			new_len, XFS_REFCOUNT_ADJUST_DECREASE, NULL);
>  		*new_fsb = XFS_AGB_TO_FSB(mp, agno, new_agbno);
>  		break;
>  	case XFS_REFCOUNT_ALLOC_COW:
>  		*new_fsb = startblock + blockcount;
>  		*new_len = 0;
> -		error = __xfs_refcount_cow_alloc(rcur, bno, blockcount, dfops);
> +		error = __xfs_refcount_cow_alloc(rcur, bno, blockcount);
>  		break;
>  	case XFS_REFCOUNT_FREE_COW:
>  		*new_fsb = startblock + blockcount;
>  		*new_len = 0;
> -		error = __xfs_refcount_cow_free(rcur, bno, blockcount, dfops);
> +		error = __xfs_refcount_cow_free(rcur, bno, blockcount);
>  		break;
>  	default:
>  		ASSERT(0);
> @@ -1183,12 +1178,12 @@ xfs_refcount_finish_one(
>   */
>  static int
>  __xfs_refcount_add(
> -	struct xfs_mount		*mp,
> -	struct xfs_defer_ops		*dfops,
> +	struct xfs_trans		*tp,
>  	enum xfs_refcount_intent_type	type,
>  	xfs_fsblock_t			startblock,
>  	xfs_extlen_t			blockcount)
>  {
> +	struct xfs_mount		*mp = tp->t_mountp;
>  	struct xfs_refcount_intent	*ri;
>  
>  	trace_xfs_refcount_defer(mp, XFS_FSB_TO_AGNO(mp, startblock),
> @@ -1202,7 +1197,7 @@ __xfs_refcount_add(
>  	ri->ri_startblock = startblock;
>  	ri->ri_blockcount = blockcount;
>  
> -	xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_REFCOUNT, &ri->ri_list);
> +	xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_REFCOUNT, &ri->ri_list);
>  	return 0;
>  }
>  
> @@ -1211,14 +1206,13 @@ __xfs_refcount_add(
>   */
>  int
>  xfs_refcount_increase_extent(
> -	struct xfs_mount		*mp,
> -	struct xfs_defer_ops		*dfops,
> +	struct xfs_trans		*tp,
>  	struct xfs_bmbt_irec		*PREV)
>  {
> -	if (!xfs_sb_version_hasreflink(&mp->m_sb))
> +	if (!xfs_sb_version_hasreflink(&tp->t_mountp->m_sb))
>  		return 0;
>  
> -	return __xfs_refcount_add(mp, dfops, XFS_REFCOUNT_INCREASE,
> +	return __xfs_refcount_add(tp, XFS_REFCOUNT_INCREASE,
>  			PREV->br_startblock, PREV->br_blockcount);
>  }
>  
> @@ -1227,14 +1221,13 @@ xfs_refcount_increase_extent(
>   */
>  int
>  xfs_refcount_decrease_extent(
> -	struct xfs_mount		*mp,
> -	struct xfs_defer_ops		*dfops,
> +	struct xfs_trans		*tp,
>  	struct xfs_bmbt_irec		*PREV)
>  {
> -	if (!xfs_sb_version_hasreflink(&mp->m_sb))
> +	if (!xfs_sb_version_hasreflink(&tp->t_mountp->m_sb))
>  		return 0;
>  
> -	return __xfs_refcount_add(mp, dfops, XFS_REFCOUNT_DECREASE,
> +	return __xfs_refcount_add(tp, XFS_REFCOUNT_DECREASE,
>  			PREV->br_startblock, PREV->br_blockcount);
>  }
>  
> @@ -1522,8 +1515,7 @@ STATIC int
>  __xfs_refcount_cow_alloc(
>  	struct xfs_btree_cur	*rcur,
>  	xfs_agblock_t		agbno,
> -	xfs_extlen_t		aglen,
> -	struct xfs_defer_ops	*dfops)
> +	xfs_extlen_t		aglen)
>  {
>  	trace_xfs_refcount_cow_increase(rcur->bc_mp, rcur->bc_private.a.agno,
>  			agbno, aglen);
> @@ -1540,8 +1532,7 @@ STATIC int
>  __xfs_refcount_cow_free(
>  	struct xfs_btree_cur	*rcur,
>  	xfs_agblock_t		agbno,
> -	xfs_extlen_t		aglen,
> -	struct xfs_defer_ops	*dfops)
> +	xfs_extlen_t		aglen)
>  {
>  	trace_xfs_refcount_cow_decrease(rcur->bc_mp, rcur->bc_private.a.agno,
>  			agbno, aglen);
> @@ -1554,47 +1545,45 @@ __xfs_refcount_cow_free(
>  /* Record a CoW staging extent in the refcount btree. */
>  int
>  xfs_refcount_alloc_cow_extent(
> -	struct xfs_mount		*mp,
> -	struct xfs_defer_ops		*dfops,
> +	struct xfs_trans		*tp,
>  	xfs_fsblock_t			fsb,
>  	xfs_extlen_t			len)
>  {
> +	struct xfs_mount		*mp = tp->t_mountp;
>  	int				error;
>  
>  	if (!xfs_sb_version_hasreflink(&mp->m_sb))
>  		return 0;
>  
> -	error = __xfs_refcount_add(mp, dfops, XFS_REFCOUNT_ALLOC_COW,
> -			fsb, len);
> +	error = __xfs_refcount_add(tp, XFS_REFCOUNT_ALLOC_COW, fsb, len);
>  	if (error)
>  		return error;
>  
>  	/* Add rmap entry */
> -	return xfs_rmap_alloc_extent(mp, dfops, XFS_FSB_TO_AGNO(mp, fsb),
> +	return xfs_rmap_alloc_extent(tp, XFS_FSB_TO_AGNO(mp, fsb),
>  			XFS_FSB_TO_AGBNO(mp, fsb), len, XFS_RMAP_OWN_COW);
>  }
>  
>  /* Forget a CoW staging event in the refcount btree. */
>  int
>  xfs_refcount_free_cow_extent(
> -	struct xfs_mount		*mp,
> -	struct xfs_defer_ops		*dfops,
> +	struct xfs_trans		*tp,
>  	xfs_fsblock_t			fsb,
>  	xfs_extlen_t			len)
>  {
> +	struct xfs_mount		*mp = tp->t_mountp;
>  	int				error;
>  
>  	if (!xfs_sb_version_hasreflink(&mp->m_sb))
>  		return 0;
>  
>  	/* Remove rmap entry */
> -	error = xfs_rmap_free_extent(mp, dfops, XFS_FSB_TO_AGNO(mp, fsb),
> +	error = xfs_rmap_free_extent(tp, XFS_FSB_TO_AGNO(mp, fsb),
>  			XFS_FSB_TO_AGBNO(mp, fsb), len, XFS_RMAP_OWN_COW);
>  	if (error)
>  		return error;
>  
> -	return __xfs_refcount_add(mp, dfops, XFS_REFCOUNT_FREE_COW,
> -			fsb, len);
> +	return __xfs_refcount_add(tp, XFS_REFCOUNT_FREE_COW, fsb, len);
>  }
>  
>  struct xfs_refcount_recovery {
> @@ -1692,14 +1681,13 @@ xfs_refcount_recover_cow_leftovers(
>  		/* Free the orphan record */
>  		agbno = rr->rr_rrec.rc_startblock - XFS_REFC_COW_START;
>  		fsb = XFS_AGB_TO_FSB(mp, agno, agbno);
> -		error = xfs_refcount_free_cow_extent(mp, tp->t_dfops, fsb,
> +		error = xfs_refcount_free_cow_extent(tp, fsb,
>  				rr->rr_rrec.rc_blockcount);
>  		if (error)
>  			goto out_trans;
>  
>  		/* Free the block. */
> -		xfs_bmap_add_free(mp, tp->t_dfops, fsb,
> -				rr->rr_rrec.rc_blockcount, NULL);
> +		xfs_bmap_add_free(tp, fsb, rr->rr_rrec.rc_blockcount, NULL);
>  
>  		error = xfs_trans_commit(tp);
>  		if (error)
> diff --git a/fs/xfs/libxfs/xfs_refcount.h b/fs/xfs/libxfs/xfs_refcount.h
> index 3b72c6dbf6ad..1d9c518575e7 100644
> --- a/fs/xfs/libxfs/xfs_refcount.h
> +++ b/fs/xfs/libxfs/xfs_refcount.h
> @@ -29,10 +29,10 @@ struct xfs_refcount_intent {
>  	xfs_extlen_t				ri_blockcount;
>  };
>  
> -extern int xfs_refcount_increase_extent(struct xfs_mount *mp,
> -		struct xfs_defer_ops *dfops, struct xfs_bmbt_irec *irec);
> -extern int xfs_refcount_decrease_extent(struct xfs_mount *mp,
> -		struct xfs_defer_ops *dfops, struct xfs_bmbt_irec *irec);
> +extern int xfs_refcount_increase_extent(struct xfs_trans *tp,
> +		struct xfs_bmbt_irec *irec);
> +extern int xfs_refcount_decrease_extent(struct xfs_trans *tp,
> +		struct xfs_bmbt_irec *irec);
>  
>  extern void xfs_refcount_finish_one_cleanup(struct xfs_trans *tp,
>  		struct xfs_btree_cur *rcur, int error);
> @@ -45,12 +45,10 @@ extern int xfs_refcount_find_shared(struct xfs_btree_cur *cur,
>  		xfs_agblock_t agbno, xfs_extlen_t aglen, xfs_agblock_t *fbno,
>  		xfs_extlen_t *flen, bool find_end_of_shared);
>  
> -extern int xfs_refcount_alloc_cow_extent(struct xfs_mount *mp,
> -		struct xfs_defer_ops *dfops, xfs_fsblock_t fsb,
> -		xfs_extlen_t len);
> -extern int xfs_refcount_free_cow_extent(struct xfs_mount *mp,
> -		struct xfs_defer_ops *dfops, xfs_fsblock_t fsb,
> -		xfs_extlen_t len);
> +extern int xfs_refcount_alloc_cow_extent(struct xfs_trans *tp,
> +		xfs_fsblock_t fsb, xfs_extlen_t len);
> +extern int xfs_refcount_free_cow_extent(struct xfs_trans *tp,
> +		xfs_fsblock_t fsb, xfs_extlen_t len);
>  extern int xfs_refcount_recover_cow_leftovers(struct xfs_mount *mp,
>  		xfs_agnumber_t agno);
>  
> diff --git a/fs/xfs/libxfs/xfs_rmap.c b/fs/xfs/libxfs/xfs_rmap.c
> index fb266fa2cc45..aa683eda6b70 100644
> --- a/fs/xfs/libxfs/xfs_rmap.c
> +++ b/fs/xfs/libxfs/xfs_rmap.c
> @@ -2277,14 +2277,14 @@ xfs_rmap_update_is_needed(
>   */
>  static int
>  __xfs_rmap_add(
> -	struct xfs_mount		*mp,
> -	struct xfs_defer_ops		*dfops,
> +	struct xfs_trans		*tp,
>  	enum xfs_rmap_intent_type	type,
>  	uint64_t			owner,
>  	int				whichfork,
>  	struct xfs_bmbt_irec		*bmap)
>  {
> -	struct xfs_rmap_intent	*ri;
> +	struct xfs_mount		*mp = tp->t_mountp;
> +	struct xfs_rmap_intent		*ri;
>  
>  	trace_xfs_rmap_defer(mp, XFS_FSB_TO_AGNO(mp, bmap->br_startblock),
>  			type,
> @@ -2301,23 +2301,22 @@ __xfs_rmap_add(
>  	ri->ri_whichfork = whichfork;
>  	ri->ri_bmap = *bmap;
>  
> -	xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_RMAP, &ri->ri_list);
> +	xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_RMAP, &ri->ri_list);
>  	return 0;
>  }
>  
>  /* Map an extent into a file. */
>  int
>  xfs_rmap_map_extent(
> -	struct xfs_mount	*mp,
> -	struct xfs_defer_ops	*dfops,
> +	struct xfs_trans	*tp,
>  	struct xfs_inode	*ip,
>  	int			whichfork,
>  	struct xfs_bmbt_irec	*PREV)
>  {
> -	if (!xfs_rmap_update_is_needed(mp, whichfork))
> +	if (!xfs_rmap_update_is_needed(tp->t_mountp, whichfork))
>  		return 0;
>  
> -	return __xfs_rmap_add(mp, dfops, xfs_is_reflink_inode(ip) ?
> +	return __xfs_rmap_add(tp, xfs_is_reflink_inode(ip) ?
>  			XFS_RMAP_MAP_SHARED : XFS_RMAP_MAP, ip->i_ino,
>  			whichfork, PREV);
>  }
> @@ -2325,25 +2324,29 @@ xfs_rmap_map_extent(
>  /* Unmap an extent out of a file. */
>  int
>  xfs_rmap_unmap_extent(
> -	struct xfs_mount	*mp,
> -	struct xfs_defer_ops	*dfops,
> +	struct xfs_trans	*tp,
>  	struct xfs_inode	*ip,
>  	int			whichfork,
>  	struct xfs_bmbt_irec	*PREV)
>  {
> -	if (!xfs_rmap_update_is_needed(mp, whichfork))
> +	if (!xfs_rmap_update_is_needed(tp->t_mountp, whichfork))
>  		return 0;
>  
> -	return __xfs_rmap_add(mp, dfops, xfs_is_reflink_inode(ip) ?
> +	return __xfs_rmap_add(tp, xfs_is_reflink_inode(ip) ?
>  			XFS_RMAP_UNMAP_SHARED : XFS_RMAP_UNMAP, ip->i_ino,
>  			whichfork, PREV);
>  }
>  
> -/* Convert a data fork extent from unwritten to real or vice versa. */
> +/*
> + * Convert a data fork extent from unwritten to real or vice versa.
> + *
> + * Note that tp can be NULL here as no transaction is used for COW fork
> + * unwritten conversion.
> + */
>  int
>  xfs_rmap_convert_extent(
>  	struct xfs_mount	*mp,
> -	struct xfs_defer_ops	*dfops,
> +	struct xfs_trans	*tp,
>  	struct xfs_inode	*ip,
>  	int			whichfork,
>  	struct xfs_bmbt_irec	*PREV)
> @@ -2351,7 +2354,7 @@ xfs_rmap_convert_extent(
>  	if (!xfs_rmap_update_is_needed(mp, whichfork))
>  		return 0;
>  
> -	return __xfs_rmap_add(mp, dfops, xfs_is_reflink_inode(ip) ?
> +	return __xfs_rmap_add(tp, xfs_is_reflink_inode(ip) ?
>  			XFS_RMAP_CONVERT_SHARED : XFS_RMAP_CONVERT, ip->i_ino,
>  			whichfork, PREV);
>  }
> @@ -2359,8 +2362,7 @@ xfs_rmap_convert_extent(
>  /* Schedule the creation of an rmap for non-file data. */
>  int
>  xfs_rmap_alloc_extent(
> -	struct xfs_mount	*mp,
> -	struct xfs_defer_ops	*dfops,
> +	struct xfs_trans	*tp,
>  	xfs_agnumber_t		agno,
>  	xfs_agblock_t		bno,
>  	xfs_extlen_t		len,
> @@ -2368,23 +2370,21 @@ xfs_rmap_alloc_extent(
>  {
>  	struct xfs_bmbt_irec	bmap;
>  
> -	if (!xfs_rmap_update_is_needed(mp, XFS_DATA_FORK))
> +	if (!xfs_rmap_update_is_needed(tp->t_mountp, XFS_DATA_FORK))
>  		return 0;
>  
> -	bmap.br_startblock = XFS_AGB_TO_FSB(mp, agno, bno);
> +	bmap.br_startblock = XFS_AGB_TO_FSB(tp->t_mountp, agno, bno);
>  	bmap.br_blockcount = len;
>  	bmap.br_startoff = 0;
>  	bmap.br_state = XFS_EXT_NORM;
>  
> -	return __xfs_rmap_add(mp, dfops, XFS_RMAP_ALLOC, owner,
> -			XFS_DATA_FORK, &bmap);
> +	return __xfs_rmap_add(tp, XFS_RMAP_ALLOC, owner, XFS_DATA_FORK, &bmap);
>  }
>  
>  /* Schedule the deletion of an rmap for non-file data. */
>  int
>  xfs_rmap_free_extent(
> -	struct xfs_mount	*mp,
> -	struct xfs_defer_ops	*dfops,
> +	struct xfs_trans	*tp,
>  	xfs_agnumber_t		agno,
>  	xfs_agblock_t		bno,
>  	xfs_extlen_t		len,
> @@ -2392,16 +2392,15 @@ xfs_rmap_free_extent(
>  {
>  	struct xfs_bmbt_irec	bmap;
>  
> -	if (!xfs_rmap_update_is_needed(mp, XFS_DATA_FORK))
> +	if (!xfs_rmap_update_is_needed(tp->t_mountp, XFS_DATA_FORK))
>  		return 0;
>  
> -	bmap.br_startblock = XFS_AGB_TO_FSB(mp, agno, bno);
> +	bmap.br_startblock = XFS_AGB_TO_FSB(tp->t_mountp, agno, bno);
>  	bmap.br_blockcount = len;
>  	bmap.br_startoff = 0;
>  	bmap.br_state = XFS_EXT_NORM;
>  
> -	return __xfs_rmap_add(mp, dfops, XFS_RMAP_FREE, owner,
> -			XFS_DATA_FORK, &bmap);
> +	return __xfs_rmap_add(tp, XFS_RMAP_FREE, owner, XFS_DATA_FORK, &bmap);
>  }
>  
>  /* Compare rmap records.  Returns -1 if a < b, 1 if a > b, and 0 if equal. */
> diff --git a/fs/xfs/libxfs/xfs_rmap.h b/fs/xfs/libxfs/xfs_rmap.h
> index 9f19454768b2..157dc722ad35 100644
> --- a/fs/xfs/libxfs/xfs_rmap.h
> +++ b/fs/xfs/libxfs/xfs_rmap.h
> @@ -185,21 +185,17 @@ struct xfs_rmap_intent {
>  };
>  
>  /* functions for updating the rmapbt based on bmbt map/unmap operations */
> -int xfs_rmap_map_extent(struct xfs_mount *mp, struct xfs_defer_ops *dfops,
> +int xfs_rmap_map_extent(struct xfs_trans *tp, struct xfs_inode *ip,
> +		int whichfork, struct xfs_bmbt_irec *imap);
> +int xfs_rmap_unmap_extent(struct xfs_trans *tp, struct xfs_inode *ip,
> +		int whichfork, struct xfs_bmbt_irec *imap);
> +int xfs_rmap_convert_extent(struct xfs_mount *mp, struct xfs_trans *tp,
>  		struct xfs_inode *ip, int whichfork,
>  		struct xfs_bmbt_irec *imap);
> -int xfs_rmap_unmap_extent(struct xfs_mount *mp, struct xfs_defer_ops *dfops,
> -		struct xfs_inode *ip, int whichfork,
> -		struct xfs_bmbt_irec *imap);
> -int xfs_rmap_convert_extent(struct xfs_mount *mp, struct xfs_defer_ops *dfops,
> -		struct xfs_inode *ip, int whichfork,
> -		struct xfs_bmbt_irec *imap);
> -int xfs_rmap_alloc_extent(struct xfs_mount *mp, struct xfs_defer_ops *dfops,
> -		xfs_agnumber_t agno, xfs_agblock_t bno, xfs_extlen_t len,
> -		uint64_t owner);
> -int xfs_rmap_free_extent(struct xfs_mount *mp, struct xfs_defer_ops *dfops,
> -		xfs_agnumber_t agno, xfs_agblock_t bno, xfs_extlen_t len,
> -		uint64_t owner);
> +int xfs_rmap_alloc_extent(struct xfs_trans *tp, xfs_agnumber_t agno,
> +		xfs_agblock_t bno, xfs_extlen_t len, uint64_t owner);
> +int xfs_rmap_free_extent(struct xfs_trans *tp, xfs_agnumber_t agno,
> +		xfs_agblock_t bno, xfs_extlen_t len, uint64_t owner);
>  
>  void xfs_rmap_finish_one_cleanup(struct xfs_trans *tp,
>  		struct xfs_btree_cur *rcur, int error);
> diff --git a/fs/xfs/xfs_bmap_item.c b/fs/xfs/xfs_bmap_item.c
> index 328a5c60000b..ffe42147a032 100644
> --- a/fs/xfs/xfs_bmap_item.c
> +++ b/fs/xfs/xfs_bmap_item.c
> @@ -486,8 +486,7 @@ xfs_bui_recover(
>  		irec.br_blockcount = count;
>  		irec.br_startoff = bmap->me_startoff;
>  		irec.br_state = state;
> -		error = xfs_bmap_unmap_extent(tp->t_mountp, tp->t_dfops, ip,
> -					      &irec);
> +		error = xfs_bmap_unmap_extent(tp, ip, &irec);
>  		if (error)
>  			goto err_inode;
>  	}
> diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
> index d9dad399440a..addbd74ecd8e 100644
> --- a/fs/xfs/xfs_bmap_util.c
> +++ b/fs/xfs/xfs_bmap_util.c
> @@ -1534,7 +1534,6 @@ xfs_swap_extent_rmap(
>  	struct xfs_inode		*tip)
>  {
>  	struct xfs_trans		*tp = *tpp;
> -	struct xfs_mount		*mp = tp->t_mountp;
>  	struct xfs_bmbt_irec		irec;
>  	struct xfs_bmbt_irec		uirec;
>  	struct xfs_bmbt_irec		tirec;
> @@ -1598,26 +1597,22 @@ xfs_swap_extent_rmap(
>  			trace_xfs_swap_extent_rmap_remap_piece(tip, &uirec);
>  
>  			/* Remove the mapping from the donor file. */
> -			error = xfs_bmap_unmap_extent(mp, tp->t_dfops, tip,
> -					&uirec);
> +			error = xfs_bmap_unmap_extent(tp, tip, &uirec);
>  			if (error)
>  				goto out_defer;
>  
>  			/* Remove the mapping from the source file. */
> -			error = xfs_bmap_unmap_extent(mp, tp->t_dfops, ip,
> -					&irec);
> +			error = xfs_bmap_unmap_extent(tp, ip, &irec);
>  			if (error)
>  				goto out_defer;
>  
>  			/* Map the donor file's blocks into the source file. */
> -			error = xfs_bmap_map_extent(mp, tp->t_dfops, ip,
> -					&uirec);
> +			error = xfs_bmap_map_extent(tp, ip, &uirec);
>  			if (error)
>  				goto out_defer;
>  
>  			/* Map the source file's blocks into the donor file. */
> -			error = xfs_bmap_map_extent(mp, tp->t_dfops, tip,
> -					&irec);
> +			error = xfs_bmap_map_extent(tp, tip, &irec);
>  			if (error)
>  				goto out_defer;
>  
> diff --git a/fs/xfs/xfs_refcount_item.c b/fs/xfs/xfs_refcount_item.c
> index f6a3249aa2d4..c626fc5d3464 100644
> --- a/fs/xfs/xfs_refcount_item.c
> +++ b/fs/xfs/xfs_refcount_item.c
> @@ -490,24 +490,18 @@ xfs_cui_recover(
>  			irec.br_blockcount = new_len;
>  			switch (type) {
>  			case XFS_REFCOUNT_INCREASE:
> -				error = xfs_refcount_increase_extent(
> -						tp->t_mountp, tp->t_dfops,
> -						&irec);
> +				error = xfs_refcount_increase_extent(tp, &irec);
>  				break;
>  			case XFS_REFCOUNT_DECREASE:
> -				error = xfs_refcount_decrease_extent(
> -						tp->t_mountp, tp->t_dfops,
> -						&irec);
> +				error = xfs_refcount_decrease_extent(tp, &irec);
>  				break;
>  			case XFS_REFCOUNT_ALLOC_COW:
> -				error = xfs_refcount_alloc_cow_extent(
> -						tp->t_mountp, tp->t_dfops,
> +				error = xfs_refcount_alloc_cow_extent(tp,
>  						irec.br_startblock,
>  						irec.br_blockcount);
>  				break;
>  			case XFS_REFCOUNT_FREE_COW:
> -				error = xfs_refcount_free_cow_extent(
> -						tp->t_mountp, tp->t_dfops,
> +				error = xfs_refcount_free_cow_extent(tp,
>  						irec.br_startblock,
>  						irec.br_blockcount);
>  				break;
> diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c
> index 2ec562d75494..cbceb320a2e7 100644
> --- a/fs/xfs/xfs_reflink.c
> +++ b/fs/xfs/xfs_reflink.c
> @@ -506,15 +506,13 @@ xfs_reflink_cancel_cow_blocks(
>  			ASSERT((*tpp)->t_firstblock == NULLFSBLOCK);
>  
>  			/* Free the CoW orphan record. */
> -			error = xfs_refcount_free_cow_extent(ip->i_mount,
> -					(*tpp)->t_dfops, del.br_startblock,
> -					del.br_blockcount);
> +			error = xfs_refcount_free_cow_extent(*tpp,
> +					del.br_startblock, del.br_blockcount);
>  			if (error)
>  				break;
>  
> -			xfs_bmap_add_free(ip->i_mount, (*tpp)->t_dfops,
> -					del.br_startblock, del.br_blockcount,
> -					NULL);
> +			xfs_bmap_add_free(*tpp, del.br_startblock,
> +					  del.br_blockcount, NULL);
>  
>  			/* Roll the transaction */
>  			error = xfs_defer_finish(tpp);
> @@ -694,14 +692,13 @@ xfs_reflink_end_cow(
>  		trace_xfs_reflink_cow_remap(ip, &del);
>  
>  		/* Free the CoW orphan record. */
> -		error = xfs_refcount_free_cow_extent(tp->t_mountp, tp->t_dfops,
> -				del.br_startblock, del.br_blockcount);
> +		error = xfs_refcount_free_cow_extent(tp, del.br_startblock,
> +				del.br_blockcount);
>  		if (error)
>  			goto out_cancel;
>  
>  		/* Map the new blocks into the data fork. */
> -		error = xfs_bmap_map_extent(tp->t_mountp, tp->t_dfops, ip,
> -					    &del);
> +		error = xfs_bmap_map_extent(tp, ip, &del);
>  		if (error)
>  			goto out_cancel;
>  
> @@ -1046,12 +1043,12 @@ xfs_reflink_remap_extent(
>  				uirec.br_blockcount, uirec.br_startblock);
>  
>  		/* Update the refcount tree */
> -		error = xfs_refcount_increase_extent(mp, tp->t_dfops, &uirec);
> +		error = xfs_refcount_increase_extent(tp, &uirec);
>  		if (error)
>  			goto out_cancel;
>  
>  		/* Map the new blocks into the data fork. */
> -		error = xfs_bmap_map_extent(mp, tp->t_dfops, ip, &uirec);
> +		error = xfs_bmap_map_extent(tp, ip, &uirec);
>  		if (error)
>  			goto out_cancel;
>  
> -- 
> 2.17.1
> 
> --
> 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