--- initial
+++ final
@@ -1,82 +1,82 @@
 STATIC int xfs_swap_extent_rmap(struct xfs_trans **tpp, struct xfs_inode *ip, 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;
   xfs_fileoff_t offset_fsb;
   xfs_fileoff_t end_fsb;
   xfs_filblks_t count_fsb;
   int error;
   xfs_filblks_t ilen;
   xfs_filblks_t rlen;
   int nimaps;
   uint64_t tip_flags2;
   /*
    * If the source file has shared blocks, we must flag the donor
    * file as having shared blocks so that we get the shared-block
    * rmap functions when we go to fix up the rmaps.  The flags
    * will be switch for reals later.
    */
   tip_flags2 = tip->i_d.di_flags2;
   if (ip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK) tip->i_d.di_flags2 |= XFS_DIFLAG2_REFLINK;
   offset_fsb = 0;
   end_fsb = XFS_B_TO_FSB(ip->i_mount, i_size_read(VFS_I(ip)));
   count_fsb = (xfs_filblks_t)(end_fsb - offset_fsb);
   while (count_fsb) {
     /* Read extent from the donor file */
     nimaps = 1;
     error = xfs_bmapi_read(tip, offset_fsb, count_fsb, &tirec, &nimaps, 0);
     if (error) goto out;
     ASSERT(nimaps == 1);
     ASSERT(tirec.br_startblock != DELAYSTARTBLOCK);
     trace_xfs_swap_extent_rmap_remap(tip, &tirec);
     ilen = tirec.br_blockcount;
     /* Unmap the old blocks in the source file. */
     while (tirec.br_blockcount) {
-      xfs_defer_init(tp, tp->t_dfops, &tp->t_firstblock);
+      xfs_defer_init(tp, tp->t_dfops);
       trace_xfs_swap_extent_rmap_remap_piece(tip, &tirec);
       /* Read extent from the source file */
       nimaps = 1;
       error = xfs_bmapi_read(ip, tirec.br_startoff, tirec.br_blockcount, &irec, &nimaps, 0);
       if (error) goto out_defer;
       ASSERT(nimaps == 1);
       ASSERT(tirec.br_startoff == irec.br_startoff);
       trace_xfs_swap_extent_rmap_remap_piece(ip, &irec);
       /* Trim the extent. */
       uirec = tirec;
       uirec.br_blockcount = rlen = min_t(xfs_filblks_t, tirec.br_blockcount, irec.br_blockcount);
       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);
       if (error) goto out_defer;
       /* Remove the mapping from the source file. */
       error = xfs_bmap_unmap_extent(mp, tp->t_dfops, 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);
       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);
       if (error) goto out_defer;
       xfs_defer_ijoin(tp->t_dfops, ip);
       error = xfs_defer_finish(tpp, tp->t_dfops);
       tp = *tpp;
       if (error) goto out_defer;
       tirec.br_startoff += rlen;
       if (tirec.br_startblock != HOLESTARTBLOCK && tirec.br_startblock != DELAYSTARTBLOCK) tirec.br_startblock += rlen;
       tirec.br_blockcount -= rlen;
     }
     /* Roll on... */
     count_fsb -= ilen;
     offset_fsb += ilen;
   }
   tip->i_d.di_flags2 = tip_flags2;
   return 0;
 out_defer:
   xfs_defer_cancel(tp->t_dfops);
 out:
   trace_xfs_swap_extent_rmap_error(ip, error, _RET_IP_);
   tip->i_d.di_flags2 = tip_flags2;
   return error;
 }<sep>@@
expression e1,e2,e3;
@@
  xfs_defer_init(e1,e2
- 		, e3
	)