return error;
 }
 
-#define        ATTR_ENTBASESIZE                /* minimum bytes used by an attr */ \
-       (((struct attrlist_ent *) 0)->a_name - (char *) 0)
-#define        ATTR_ENTSIZE(namelen)           /* actual bytes used by an attr */ \
-       ((ATTR_ENTBASESIZE + (namelen) + 1 + sizeof(uint32_t)-1) \
-        & ~(sizeof(uint32_t)-1))
-
 /*
  * Format an attribute and copy it out to the user's buffer.
  * Take care to check values and protect against them changing later,
 
        arraytop = sizeof(*alist) +
                        context->count * sizeof(alist->al_offset[0]);
-       context->firstu -= ATTR_ENTSIZE(namelen);
+
+       /* decrement by the actual bytes used by the attr */
+       context->firstu -= round_up(offsetof(struct attrlist_ent, a_name) +
+                       namelen + 1, sizeof(uint32_t));
        if (context->firstu < arraytop) {
                trace_xfs_attr_list_full(context);
                alist->al_more = 1;