--- initial
+++ final
@@ -1,186 +1,186 @@
 STATIC int xfs_attr_node_addname(struct xfs_da_args *args) {
   struct xfs_da_state *state;
   struct xfs_da_state_blk *blk;
   struct xfs_inode *dp;
   struct xfs_mount *mp;
   int retval, error;
   trace_xfs_attr_node_addname(args);
   /*
    * Fill in bucket of arguments/results/context to carry around.
    */
   dp = args->dp;
   mp = dp->i_mount;
 restart:
   state = xfs_da_state_alloc();
   state->args = args;
   state->mp = mp;
   /*
    * Search to see if name already exists, and get back a pointer
    * to where it should go.
    */
   error = xfs_da3_node_lookup_int(state, &retval);
   if (error) goto out;
   blk = &state->path.blk[state->path.active - 1];
   ASSERT(blk->magic == XFS_ATTR_LEAF_MAGIC);
   if ((args->flags & ATTR_REPLACE) && (retval == -ENOATTR)) {
     goto out;
   } else if (retval == -EEXIST) {
     if (args->flags & ATTR_CREATE) goto out;
     trace_xfs_attr_node_replace(args);
     /* save the attribute state for later removal*/
     args->op_flags |= XFS_DA_OP_RENAME; /* atomic rename op */
     args->blkno2 = args->blkno;         /* set 2nd entry info*/
     args->index2 = args->index;
     args->rmtblkno2 = args->rmtblkno;
     args->rmtblkcnt2 = args->rmtblkcnt;
     args->rmtvaluelen2 = args->rmtvaluelen;
     /*
      * clear the remote attr state now that it is saved so that the
      * values reflect the state of the attribute we are about to
      * add, not the attribute we just found and will remove later.
      */
     args->rmtblkno = 0;
     args->rmtblkcnt = 0;
     args->rmtvaluelen = 0;
   }
   retval = xfs_attr3_leaf_add(blk->bp, state->args);
   if (retval == -ENOSPC) {
     if (state->path.active == 1) {
       /*
        * Its really a single leaf node, but it had
        * out-of-line values so it looked like it *might*
        * have been a b-tree.
        */
       xfs_da_state_free(state);
       state = NULL;
-      xfs_defer_init(args->trans, args->trans->t_dfops, &args->trans->t_firstblock);
+      xfs_defer_init(args->trans, args->trans->t_dfops);
       error = xfs_attr3_leaf_to_node(args);
       if (error) goto out_defer_cancel;
       xfs_defer_ijoin(args->trans->t_dfops, dp);
       error = xfs_defer_finish(&args->trans, args->trans->t_dfops);
       if (error) goto out_defer_cancel;
       /*
        * Commit the node conversion and start the next
        * trans in the chain.
        */
       error = xfs_trans_roll_inode(&args->trans, dp);
       if (error) goto out;
       goto restart;
     }
     /*
      * Split as many Btree elements as required.
      * This code tracks the new and old attr's location
      * in the index/blkno/rmtblkno/rmtblkcnt fields and
      * in the index2/blkno2/rmtblkno2/rmtblkcnt2 fields.
      */
-    xfs_defer_init(args->trans, args->trans->t_dfops, &args->trans->t_firstblock);
+    xfs_defer_init(args->trans, args->trans->t_dfops);
     error = xfs_da3_split(state);
     if (error) goto out_defer_cancel;
     xfs_defer_ijoin(args->trans->t_dfops, dp);
     error = xfs_defer_finish(&args->trans, args->trans->t_dfops);
     if (error) goto out_defer_cancel;
   } else {
     /*
      * Addition succeeded, update Btree hashvals.
      */
     xfs_da3_fixhashpath(state, &state->path);
   }
   /*
    * Kill the state structure, we're done with it and need to
    * allow the buffers to come back later.
    */
   xfs_da_state_free(state);
   state = NULL;
   /*
    * Commit the leaf addition or btree split and start the next
    * trans in the chain.
    */
   error = xfs_trans_roll_inode(&args->trans, dp);
   if (error) goto out;
   /*
    * If there was an out-of-line value, allocate the blocks we
    * identified for its storage and copy the value.  This is done
    * after we create the attribute so that we don't overflow the
    * maximum size of a transaction and/or hit a deadlock.
    */
   if (args->rmtblkno > 0) {
     error = xfs_attr_rmtval_set(args);
     if (error) return error;
   }
   /*
    * If this is an atomic rename operation, we must "flip" the
    * incomplete flags on the "new" and "old" attribute/value pairs
    * so that one disappears and one appears atomically.  Then we
    * must remove the "old" attribute/value pair.
    */
   if (args->op_flags & XFS_DA_OP_RENAME) {
     /*
      * In a separate transaction, set the incomplete flag on the
      * "old" attr and clear the incomplete flag on the "new" attr.
      */
     error = xfs_attr3_leaf_flipflags(args);
     if (error) goto out;
     /*
      * Dismantle the "old" attribute/value pair by removing
      * a "remote" value (if it exists).
      */
     args->index = args->index2;
     args->blkno = args->blkno2;
     args->rmtblkno = args->rmtblkno2;
     args->rmtblkcnt = args->rmtblkcnt2;
     args->rmtvaluelen = args->rmtvaluelen2;
     if (args->rmtblkno) {
       error = xfs_attr_rmtval_remove(args);
       if (error) return error;
     }
     /*
      * Re-find the "old" attribute entry after any split ops.
      * The INCOMPLETE flag means that we will find the "old"
      * attr, not the "new" one.
      */
     args->flags |= XFS_ATTR_INCOMPLETE;
     state = xfs_da_state_alloc();
     state->args = args;
     state->mp = mp;
     state->inleaf = 0;
     error = xfs_da3_node_lookup_int(state, &retval);
     if (error) goto out;
     /*
      * Remove the name and update the hashvals in the tree.
      */
     blk = &state->path.blk[state->path.active - 1];
     ASSERT(blk->magic == XFS_ATTR_LEAF_MAGIC);
     error = xfs_attr3_leaf_remove(blk->bp, args);
     xfs_da3_fixhashpath(state, &state->path);
     /*
      * Check to see if the tree needs to be collapsed.
      */
     if (retval && (state->path.active > 1)) {
-      xfs_defer_init(args->trans, args->trans->t_dfops, &args->trans->t_firstblock);
+      xfs_defer_init(args->trans, args->trans->t_dfops);
       error = xfs_da3_join(state);
       if (error) goto out_defer_cancel;
       xfs_defer_ijoin(args->trans->t_dfops, dp);
       error = xfs_defer_finish(&args->trans, args->trans->t_dfops);
       if (error) goto out_defer_cancel;
     }
     /*
      * Commit and start the next trans in the chain.
      */
     error = xfs_trans_roll_inode(&args->trans, dp);
     if (error) goto out;
   } else if (args->rmtblkno > 0) {
     /*
      * Added a "remote" value, just clear the incomplete flag.
      */
     error = xfs_attr3_leaf_clearflag(args);
     if (error) goto out;
   }
   retval = error = 0;
 out:
   if (state) xfs_da_state_free(state);
   if (error) return error;
   return retval;
 out_defer_cancel:
   xfs_defer_cancel(args->trans->t_dfops);
   goto out;
 }<sep>@@
expression e1,e2,e3;
@@
  xfs_defer_init(e1,e2
- 		, e3
	)