int                     blkcnt)
 {
        struct xfs_bmbt_irec    map;
-       xfs_dablk_t             tblkno;
-       int                     tblkcnt;
        int                     nmap;
        int                     error;
 
         * Roll through the "value", invalidating the attribute value's
         * blocks.
         */
-       tblkno = blkno;
-       tblkcnt = blkcnt;
-       while (tblkcnt > 0) {
+       while (blkcnt > 0) {
                /*
                 * Try to remember where we decided to put the value.
                 */
                nmap = 1;
-               error = xfs_bmapi_read(dp, (xfs_fileoff_t)tblkno, tblkcnt,
+               error = xfs_bmapi_read(dp, (xfs_fileoff_t)blkno, blkcnt,
                                       &map, &nmap, XFS_BMAPI_ATTRFORK);
                if (error)
                        return error;
                if (error)
                        return error;
 
-               tblkno += map.br_blockcount;
-               tblkcnt -= map.br_blockcount;
+               blkno += map.br_blockcount;
+               blkcnt -= map.br_blockcount;
        }
 
        return 0;
  */
 STATIC int
 xfs_attr3_leaf_inactive(
-       struct xfs_trans        **trans,
-       struct xfs_inode        *dp,
-       struct xfs_buf          *bp)
+       struct xfs_trans                **trans,
+       struct xfs_inode                *dp,
+       struct xfs_buf                  *bp)
 {
-       struct xfs_attr_leafblock *leaf;
-       struct xfs_attr3_icleaf_hdr ichdr;
-       struct xfs_attr_leaf_entry *entry;
+       struct xfs_attr3_icleaf_hdr     ichdr;
+       struct xfs_mount                *mp = bp->b_mount;
+       struct xfs_attr_leafblock       *leaf = bp->b_addr;
+       struct xfs_attr_leaf_entry      *entry;
        struct xfs_attr_leaf_name_remote *name_rmt;
-       struct xfs_attr_inactive_list *list;
-       struct xfs_attr_inactive_list *lp;
-       int                     error;
-       int                     count;
-       int                     size;
-       int                     tmp;
-       int                     i;
-       struct xfs_mount        *mp = bp->b_mount;
+       int                             error;
+       int                             i;
 
-       leaf = bp->b_addr;
        xfs_attr3_leaf_hdr_from_disk(mp->m_attr_geo, &ichdr, leaf);
 
        /*
-        * Count the number of "remote" value extents.
+        * Find the remote value extents for this leaf and invalidate their
+        * incore buffers.
         */
-       count = 0;
        entry = xfs_attr3_leaf_entryp(leaf);
        for (i = 0; i < ichdr.count; entry++, i++) {
-               if (be16_to_cpu(entry->nameidx) &&
-                   ((entry->flags & XFS_ATTR_LOCAL) == 0)) {
-                       name_rmt = xfs_attr3_leaf_name_remote(leaf, i);
-                       if (name_rmt->valueblk)
-                               count++;
-               }
-       }
-
-       /*
-        * If there are no "remote" values, we're done.
-        */
-       if (count == 0) {
-               xfs_trans_brelse(*trans, bp);
-               return 0;
-       }
+               int             blkcnt;
 
-       /*
-        * Allocate storage for a list of all the "remote" value extents.
-        */
-       size = count * sizeof(xfs_attr_inactive_list_t);
-       list = kmem_alloc(size, 0);
+               if (!entry->nameidx || (entry->flags & XFS_ATTR_LOCAL))
+                       continue;
 
-       /*
-        * Identify each of the "remote" value extents.
-        */
-       lp = list;
-       entry = xfs_attr3_leaf_entryp(leaf);
-       for (i = 0; i < ichdr.count; entry++, i++) {
-               if (be16_to_cpu(entry->nameidx) &&
-                   ((entry->flags & XFS_ATTR_LOCAL) == 0)) {
-                       name_rmt = xfs_attr3_leaf_name_remote(leaf, i);
-                       if (name_rmt->valueblk) {
-                               lp->valueblk = be32_to_cpu(name_rmt->valueblk);
-                               lp->valuelen = xfs_attr3_rmt_blocks(dp->i_mount,
-                                                   be32_to_cpu(name_rmt->valuelen));
-                               lp++;
-                       }
-               }
-       }
-       xfs_trans_brelse(*trans, bp);   /* unlock for trans. in freextent() */
+               name_rmt = xfs_attr3_leaf_name_remote(leaf, i);
+               if (!name_rmt->valueblk)
+                       continue;
 
-       /*
-        * Invalidate each of the "remote" value extents.
-        */
-       error = 0;
-       for (lp = list, i = 0; i < count; i++, lp++) {
-               tmp = xfs_attr3_rmt_stale(dp, lp->valueblk, lp->valuelen);
-               if (error == 0)
-                       error = tmp;    /* save only the 1st errno */
+               blkcnt = xfs_attr3_rmt_blocks(dp->i_mount,
+                               be32_to_cpu(name_rmt->valuelen));
+               error = xfs_attr3_rmt_stale(dp,
+                               be32_to_cpu(name_rmt->valueblk), blkcnt);
+               if (error)
+                       goto err;
        }
 
-       kmem_free(list);
+       xfs_trans_brelse(*trans, bp);
+err:
        return error;
 }