* Internal routines when attribute list is one block.
  */
 STATIC int xfs_attr_leaf_get(xfs_da_args_t *args);
-STATIC int xfs_attr_leaf_addname(xfs_da_args_t *args);
 STATIC int xfs_attr_leaf_removename(xfs_da_args_t *args);
 STATIC int xfs_attr_leaf_hasname(struct xfs_da_args *args, struct xfs_buf **bp);
+STATIC int xfs_attr_leaf_try_add(struct xfs_da_args *args, struct xfs_buf *bp);
 
 /*
  * Internal routines when attribute list is more than one block.
        struct xfs_da_args      *args)
 {
        struct xfs_inode        *dp = args->dp;
+       struct xfs_buf          *bp = NULL;
        struct xfs_da_state     *state = NULL;
-       int                     error = 0;
+       int                     forkoff, error = 0;
 
        /*
         * If the attribute list is already in leaf format, jump straight to
        }
 
        if (xfs_attr_is_leaf(dp)) {
-               error = xfs_attr_leaf_addname(args);
-               if (error != -ENOSPC)
+               error = xfs_attr_leaf_try_add(args, bp);
+               if (error == -ENOSPC)
+                       goto node;
+               else if (error)
+                       return error;
+
+               /*
+                * Commit the transaction that added the attr name so that
+                * later routines can manage their own transactions.
+                */
+               error = xfs_trans_roll_inode(&args->trans, dp);
+               if (error)
+                       return error;
+
+               /*
+                * 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 (!(args->op_flags & XFS_DA_OP_RENAME)) {
+                       /*
+                        * Added a "remote" value, just clear the incomplete
+                        *flag.
+                        */
+                       if (args->rmtblkno > 0)
+                               error = xfs_attr3_leaf_clearflag(args);
+
+                       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.
+                *
+                * 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)
+                       return error;
+               /*
+                * Commit the flag value change and start the next trans in
+                * series.
+                */
+               error = xfs_trans_roll_inode(&args->trans, args->dp);
+               if (error)
+                       return error;
+
+               /*
+                * Dismantle the "old" attribute/value pair by removing a
+                * "remote" value (if it exists).
+                */
+               xfs_attr_restore_rmt_blk(args);
+
+               if (args->rmtblkno) {
+                       error = xfs_attr_rmtval_invalidate(args);
+                       if (error)
+                               return error;
+
+                       error = xfs_attr_rmtval_remove(args);
+                       if (error)
+                               return error;
+               }
+
+               /*
+                * Read in the block containing the "old" attr, then remove the
+                * "old" attr from that block (neat, huh!)
+                */
+               error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno,
+                                          &bp);
+               if (error)
                        return error;
 
+               xfs_attr3_leaf_remove(bp, args);
+
+               /*
+                * If the result is small enough, shrink it all into the inode.
+                */
+               forkoff = xfs_attr_shortform_allfit(bp, dp);
+               if (forkoff)
+                       error = xfs_attr3_leaf_to_shortform(bp, args, forkoff);
+                       /* bp is gone due to xfs_da_shrink_inode */
+
+               return error;
+node:
                /*
                 * Promote the attribute list to the Btree format.
                 */
        return retval;
 }
 
-
-/*
- * Add a name to the leaf attribute list structure
- *
- * This leaf block cannot have a "remote" value, we only call this routine
- * if bmap_one_block() says there is only one block (ie: no remote blks).
- */
-STATIC int
-xfs_attr_leaf_addname(
-       struct xfs_da_args      *args)
-{
-       int                     error, forkoff;
-       struct xfs_buf          *bp = NULL;
-       struct xfs_inode        *dp = args->dp;
-
-       trace_xfs_attr_leaf_addname(args);
-
-       error = xfs_attr_leaf_try_add(args, bp);
-       if (error)
-               return error;
-
-       /*
-        * Commit the transaction that added the attr name so that
-        * later routines can manage their own transactions.
-        */
-       error = xfs_trans_roll_inode(&args->trans, dp);
-       if (error)
-               return error;
-
-       /*
-        * 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 (!(args->op_flags & XFS_DA_OP_RENAME)) {
-               /*
-                * Added a "remote" value, just clear the incomplete flag.
-                */
-               if (args->rmtblkno > 0)
-                       error = xfs_attr3_leaf_clearflag(args);
-
-               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.
-        *
-        * 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)
-               return error;
-       /*
-        * Commit the flag value change and start the next trans in series.
-        */
-       error = xfs_trans_roll_inode(&args->trans, args->dp);
-       if (error)
-               return error;
-
-       /*
-        * Dismantle the "old" attribute/value pair by removing a "remote" value
-        * (if it exists).
-        */
-       xfs_attr_restore_rmt_blk(args);
-
-       if (args->rmtblkno) {
-               error = xfs_attr_rmtval_invalidate(args);
-               if (error)
-                       return error;
-
-               error = xfs_attr_rmtval_remove(args);
-               if (error)
-                       return error;
-       }
-
-       /*
-        * Read in the block containing the "old" attr, then remove the "old"
-        * attr from that block (neat, huh!)
-        */
-       error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno,
-                                  &bp);
-       if (error)
-               return error;
-
-       xfs_attr3_leaf_remove(bp, args);
-
-       /*
-        * If the result is small enough, shrink it all into the inode.
-        */
-       forkoff = xfs_attr_shortform_allfit(bp, dp);
-       if (forkoff)
-               error = xfs_attr3_leaf_to_shortform(bp, args, forkoff);
-               /* bp is gone due to xfs_da_shrink_inode */
-
-       return error;
-}
-
 /*
  * Return EEXIST if attr is found, or ENOATTR if not
  */