Re: [PATCH v22 15/16] xfs: Merge xfs_delattr_context into xfs_attr_item

Allison Henderson
2021-08-02T08:33:25Z

On 8/1/21 8:27 PM, Chandan Babu R wrote:
> On 27 Jul 2021 at 11:50, Allison Henderson wrote:
>> This is a clean up patch that merges xfs_delattr_context into
>> xfs_attr_item. Now that the refactoring is complete and the delayed
>> operation infrastructure is in place, we can combine these to eliminate
>> the extra struct
>>
>
> Looks good to me.
>
> Reviewed-by: Chandan Babu R <chandanrlinux@gmail.com>
Great, thanks!

Allison
>
>
>> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
>> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
>> ---
>> fs/xfs/libxfs/xfs_attr.c | 142 ++++++++++++++++++++--------------------
>> fs/xfs/libxfs/xfs_attr.h | 40 +++++------
>> fs/xfs/libxfs/xfs_attr_remote.c | 36 +++++-----
>> fs/xfs/libxfs/xfs_attr_remote.h | 6 +-
>> fs/xfs/xfs_attr_item.c | 43 ++++++------
>> 5 files changed, 130 insertions(+), 137 deletions(-)
>>
>> diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
>> index ec03a7b..811288d 100644
>> --- a/fs/xfs/libxfs/xfs_attr.c
>> +++ b/fs/xfs/libxfs/xfs_attr.c
>> @@ -56,10 +56,9 @@ STATIC int xfs_attr_leaf_try_add(struct xfs_da_args *args, struct xfs_buf *bp);
>> */
>> STATIC int xfs_attr_node_get(xfs_da_args_t *args);
>> STATIC void xfs_attr_restore_rmt_blk(struct xfs_da_args *args);
>> -STATIC int xfs_attr_node_addname(struct xfs_delattr_context *dac);
>> -STATIC int xfs_attr_node_addname_find_attr(struct xfs_delattr_context *dac);
>> -STATIC int xfs_attr_node_addname_clear_incomplete(
>> - struct xfs_delattr_context *dac);
>> +STATIC int xfs_attr_node_addname(struct xfs_attr_item *attr);
>> +STATIC int xfs_attr_node_addname_find_attr(struct xfs_attr_item *attr);
>> +STATIC int xfs_attr_node_addname_clear_incomplete(struct xfs_attr_item *attr);
>> STATIC int xfs_attr_node_hasname(xfs_da_args_t *args,
>> struct xfs_da_state **state);
>> STATIC int xfs_attr_fillstate(xfs_da_state_t *state);
>> @@ -246,11 +245,11 @@ xfs_attr_is_shortform(
>>
>> STATIC int
>> xfs_attr_sf_addname(
>> - struct xfs_delattr_context *dac)
>> + struct xfs_attr_item *attr)
>> {
>> - struct xfs_da_args *args = dac->da_args;
>> + struct xfs_da_args *args = attr->xattri_da_args;
>> struct xfs_inode *dp = args->dp;
>> - struct xfs_buf **leaf_bp = &dac->leaf_bp;
>> + struct xfs_buf **leaf_bp = &attr->xattri_leaf_bp;
>> int error = 0;
>>
>> /*
>> @@ -295,17 +294,17 @@ xfs_attr_sf_addname(
>> */
>> int
>> xfs_attr_set_iter(
>> - struct xfs_delattr_context *dac)
>> + struct xfs_attr_item *attr)
>> {
>> - struct xfs_da_args *args = dac->da_args;
>> - struct xfs_buf **leaf_bp = &dac->leaf_bp;
>> + struct xfs_da_args *args = attr->xattri_da_args;
>> + struct xfs_buf **leaf_bp = &attr->xattri_leaf_bp;
>> struct xfs_inode *dp = args->dp;
>> struct xfs_buf *bp = NULL;
>> int forkoff, error = 0;
>> struct xfs_mount *mp = args->dp->i_mount;
>>
>> /* State machine switch */
>> - switch (dac->dela_state) {
>> + switch (attr->xattri_dela_state) {
>> case XFS_DAS_UNINIT:
>> /*
>> * If the fork is shortform, attempt to add the attr. If there
>> @@ -315,7 +314,7 @@ xfs_attr_set_iter(
>> * release the hold once we return with a clean transaction.
>> */
>> if (xfs_attr_is_shortform(dp))
>> - return xfs_attr_sf_addname(dac);
>> + return xfs_attr_sf_addname(attr);
>> if (*leaf_bp != NULL) {
>> xfs_trans_bhold_release(args->trans, *leaf_bp);
>> *leaf_bp = NULL;
>> @@ -342,19 +341,19 @@ xfs_attr_set_iter(
>> * handling code below
>> */
>> trace_xfs_attr_set_iter_return(
>> - dac->dela_state, args->dp);
>> + attr->xattri_dela_state, args->dp);
>> return -EAGAIN;
>> } else if (error) {
>> return error;
>> }
>>
>> - dac->dela_state = XFS_DAS_FOUND_LBLK;
>> + attr->xattri_dela_state = XFS_DAS_FOUND_LBLK;
>> } else {
>> - error = xfs_attr_node_addname_find_attr(dac);
>> + error = xfs_attr_node_addname_find_attr(attr);
>> if (error)
>> return error;
>>
>> - error = xfs_attr_node_addname(dac);
>> + error = xfs_attr_node_addname(attr);
>> if (error)
>> return error;
>>
>> @@ -365,9 +364,10 @@ xfs_attr_set_iter(
>> if (!args->rmtblkno && !args->rmtblkno2)
>> return 0;
>>
>> - dac->dela_state = XFS_DAS_FOUND_NBLK;
>> + attr->xattri_dela_state = XFS_DAS_FOUND_NBLK;
>> }
>> - trace_xfs_attr_set_iter_return(dac->dela_state, args->dp);
>> + trace_xfs_attr_set_iter_return(attr->xattri_dela_state,
>> + args->dp);
>> return -EAGAIN;
>> case XFS_DAS_FOUND_LBLK:
>> /*
>> @@ -378,10 +378,10 @@ xfs_attr_set_iter(
>> */
>>
>> /* Open coded xfs_attr_rmtval_set without trans handling */
>> - if ((dac->flags & XFS_DAC_LEAF_ADDNAME_INIT) == 0) {
>> - dac->flags |= XFS_DAC_LEAF_ADDNAME_INIT;
>> + if ((attr->xattri_flags & XFS_DAC_LEAF_ADDNAME_INIT) == 0) {
>> + attr->xattri_flags |= XFS_DAC_LEAF_ADDNAME_INIT;
>> if (args->rmtblkno > 0) {
>> - error = xfs_attr_rmtval_find_space(dac);
>> + error = xfs_attr_rmtval_find_space(attr);
>> if (error)
>> return error;
>> }
>> @@ -391,11 +391,11 @@ xfs_attr_set_iter(
>> * Repeat allocating remote blocks for the attr value until
>> * blkcnt drops to zero.
>> */
>> - if (dac->blkcnt > 0) {
>> - error = xfs_attr_rmtval_set_blk(dac);
>> + if (attr->xattri_blkcnt > 0) {
>> + error = xfs_attr_rmtval_set_blk(attr);
>> if (error)
>> return error;
>> - trace_xfs_attr_set_iter_return(dac->dela_state,
>> + trace_xfs_attr_set_iter_return(attr->xattri_dela_state,
>> args->dp);
>> return -EAGAIN;
>> }
>> @@ -431,8 +431,8 @@ xfs_attr_set_iter(
>> * Commit the flag value change and start the next trans
>> * in series.
>> */
>> - dac->dela_state = XFS_DAS_FLIP_LFLAG;
>> - trace_xfs_attr_set_iter_return(dac->dela_state,
>> + attr->xattri_dela_state = XFS_DAS_FLIP_LFLAG;
>> + trace_xfs_attr_set_iter_return(attr->xattri_dela_state,
>> args->dp);
>> return -EAGAIN;
>> }
>> @@ -451,16 +451,16 @@ xfs_attr_set_iter(
>> /* fallthrough */
>> case XFS_DAS_RM_LBLK:
>> /* Set state in case xfs_attr_rmtval_remove returns -EAGAIN */
>> - dac->dela_state = XFS_DAS_RM_LBLK;
>> + attr->xattri_dela_state = XFS_DAS_RM_LBLK;
>> if (args->rmtblkno) {
>> - error = xfs_attr_rmtval_remove(dac);
>> + error = xfs_attr_rmtval_remove(attr);
>> if (error == -EAGAIN)
>> trace_xfs_attr_set_iter_return(
>> - dac->dela_state, args->dp);
>> + attr->xattri_dela_state, args->dp);
>> if (error)
>> return error;
>>
>> - dac->dela_state = XFS_DAS_RD_LEAF;
>> + attr->xattri_dela_state = XFS_DAS_RD_LEAF;
>> return -EAGAIN;
>> }
>>
>> @@ -491,7 +491,7 @@ xfs_attr_set_iter(
>> * state.
>> */
>> if (args->rmtblkno > 0) {
>> - error = xfs_attr_rmtval_find_space(dac);
>> + error = xfs_attr_rmtval_find_space(attr);
>> if (error)
>> return error;
>> }
>> @@ -504,14 +504,14 @@ xfs_attr_set_iter(
>> * after we create the attribute so that we don't overflow the
>> * maximum size of a transaction and/or hit a deadlock.
>> */
>> - dac->dela_state = XFS_DAS_ALLOC_NODE;
>> + attr->xattri_dela_state = XFS_DAS_ALLOC_NODE;
>> if (args->rmtblkno > 0) {
>> - if (dac->blkcnt > 0) {
>> - error = xfs_attr_rmtval_set_blk(dac);
>> + if (attr->xattri_blkcnt > 0) {
>> + error = xfs_attr_rmtval_set_blk(attr);
>> if (error)
>> return error;
>> trace_xfs_attr_set_iter_return(
>> - dac->dela_state, args->dp);
>> + attr->xattri_dela_state, args->dp);
>> return -EAGAIN;
>> }
>>
>> @@ -547,8 +547,8 @@ xfs_attr_set_iter(
>> * Commit the flag value change and start the next trans
>> * in series
>> */
>> - dac->dela_state = XFS_DAS_FLIP_NFLAG;
>> - trace_xfs_attr_set_iter_return(dac->dela_state,
>> + attr->xattri_dela_state = XFS_DAS_FLIP_NFLAG;
>> + trace_xfs_attr_set_iter_return(attr->xattri_dela_state,
>> args->dp);
>> return -EAGAIN;
>> }
>> @@ -568,17 +568,17 @@ xfs_attr_set_iter(
>> /* fallthrough */
>> case XFS_DAS_RM_NBLK:
>> /* Set state in case xfs_attr_rmtval_remove returns -EAGAIN */
>> - dac->dela_state = XFS_DAS_RM_NBLK;
>> + attr->xattri_dela_state = XFS_DAS_RM_NBLK;
>> if (args->rmtblkno) {
>> - error = xfs_attr_rmtval_remove(dac);
>> + error = xfs_attr_rmtval_remove(attr);
>> if (error == -EAGAIN)
>> trace_xfs_attr_set_iter_return(
>> - dac->dela_state, args->dp);
>> + attr->xattri_dela_state, args->dp);
>>
>> if (error)
>> return error;
>>
>> - dac->dela_state = XFS_DAS_CLR_FLAG;
>> + attr->xattri_dela_state = XFS_DAS_CLR_FLAG;
>> return -EAGAIN;
>> }
>>
>> @@ -588,7 +588,7 @@ xfs_attr_set_iter(
>> * The last state for node format. Look up the old attr and
>> * remove it.
>> */
>> - error = xfs_attr_node_addname_clear_incomplete(dac);
>> + error = xfs_attr_node_addname_clear_incomplete(attr);
>> break;
>> default:
>> ASSERT(0);
>> @@ -785,7 +785,7 @@ xfs_attr_item_init(
>>
>> new = kmem_zalloc(sizeof(struct xfs_attr_item), KM_NOFS);
>> new->xattri_op_flags = op_flags;
>> - new->xattri_dac.da_args = args;
>> + new->xattri_da_args = args;
>>
>> *attr = new;
>> return 0;
>> @@ -1098,16 +1098,16 @@ xfs_attr_node_hasname(
>>
>> STATIC int
>> xfs_attr_node_addname_find_attr(
>> - struct xfs_delattr_context *dac)
>> + struct xfs_attr_item *attr)
>> {
>> - struct xfs_da_args *args = dac->da_args;
>> + struct xfs_da_args *args = attr->xattri_da_args;
>> int retval;
>>
>> /*
>> * Search to see if name already exists, and get back a pointer
>> * to where it should go.
>> */
>> - retval = xfs_attr_node_hasname(args, &dac->da_state);
>> + retval = xfs_attr_node_hasname(args, &attr->xattri_da_state);
>> if (retval != -ENOATTR && retval != -EEXIST)
>> return retval;
>>
>> @@ -1135,8 +1135,8 @@ xfs_attr_node_addname_find_attr(
>>
>> return 0;
>> error:
>> - if (dac->da_state)
>> - xfs_da_state_free(dac->da_state);
>> + if (attr->xattri_da_state)
>> + xfs_da_state_free(attr->xattri_da_state);
>> return retval;
>> }
>>
>> @@ -1157,10 +1157,10 @@ xfs_attr_node_addname_find_attr(
>> */
>> STATIC int
>> xfs_attr_node_addname(
>> - struct xfs_delattr_context *dac)
>> + struct xfs_attr_item *attr)
>> {
>> - struct xfs_da_args *args = dac->da_args;
>> - struct xfs_da_state *state = dac->da_state;
>> + struct xfs_da_args *args = attr->xattri_da_args;
>> + struct xfs_da_state *state = attr->xattri_da_state;
>> struct xfs_da_state_blk *blk;
>> int error;
>>
>> @@ -1191,7 +1191,7 @@ xfs_attr_node_addname(
>> * this point.
>> */
>> trace_xfs_attr_node_addname_return(
>> - dac->dela_state, args->dp);
>> + attr->xattri_dela_state, args->dp);
>> return -EAGAIN;
>> }
>>
>> @@ -1220,9 +1220,9 @@ xfs_attr_node_addname(
>>
>> STATIC int
>> xfs_attr_node_addname_clear_incomplete(
>> - struct xfs_delattr_context *dac)
>> + struct xfs_attr_item *attr)
>> {
>> - struct xfs_da_args *args = dac->da_args;
>> + struct xfs_da_args *args = attr->xattri_da_args;
>> struct xfs_da_state *state = NULL;
>> int retval = 0;
>> int error = 0;
>> @@ -1323,10 +1323,10 @@ xfs_attr_leaf_mark_incomplete(
>> */
>> STATIC
>> int xfs_attr_node_removename_setup(
>> - struct xfs_delattr_context *dac)
>> + struct xfs_attr_item *attr)
>> {
>> - struct xfs_da_args *args = dac->da_args;
>> - struct xfs_da_state **state = &dac->da_state;
>> + struct xfs_da_args *args = attr->xattri_da_args;
>> + struct xfs_da_state **state = &attr->xattri_da_state;
>> int error;
>>
>> error = xfs_attr_node_hasname(args, state);
>> @@ -1385,16 +1385,16 @@ xfs_attr_node_removename(
>> */
>> int
>> xfs_attr_remove_iter(
>> - struct xfs_delattr_context *dac)
>> + struct xfs_attr_item *attr)
>> {
>> - struct xfs_da_args *args = dac->da_args;
>> - struct xfs_da_state *state = dac->da_state;
>> + struct xfs_da_args *args = attr->xattri_da_args;
>> + struct xfs_da_state *state = attr->xattri_da_state;
>> int retval, error = 0;
>> struct xfs_inode *dp = args->dp;
>>
>> trace_xfs_attr_node_removename(args);
>>
>> - switch (dac->dela_state) {
>> + switch (attr->xattri_dela_state) {
>> case XFS_DAS_UNINIT:
>> if (!xfs_inode_hasattr(dp))
>> return -ENOATTR;
>> @@ -1413,16 +1413,16 @@ xfs_attr_remove_iter(
>> * Node format may require transaction rolls. Set up the
>> * state context and fall into the state machine.
>> */
>> - if (!dac->da_state) {
>> - error = xfs_attr_node_removename_setup(dac);
>> + if (!attr->xattri_da_state) {
>> + error = xfs_attr_node_removename_setup(attr);
>> if (error)
>> return error;
>> - state = dac->da_state;
>> + state = attr->xattri_da_state;
>> }
>>
>> /* fallthrough */
>> case XFS_DAS_RMTBLK:
>> - dac->dela_state = XFS_DAS_RMTBLK;
>> + attr->xattri_dela_state = XFS_DAS_RMTBLK;
>>
>> /*
>> * If there is an out-of-line value, de-allocate the blocks.
>> @@ -1435,10 +1435,10 @@ xfs_attr_remove_iter(
>> * May return -EAGAIN. Roll and repeat until all remote
>> * blocks are removed.
>> */
>> - error = xfs_attr_rmtval_remove(dac);
>> + error = xfs_attr_rmtval_remove(attr);
>> if (error == -EAGAIN) {
>> trace_xfs_attr_remove_iter_return(
>> - dac->dela_state, args->dp);
>> + attr->xattri_dela_state, args->dp);
>> return error;
>> } else if (error) {
>> goto out;
>> @@ -1453,7 +1453,7 @@ xfs_attr_remove_iter(
>> error = xfs_attr_refillstate(state);
>> if (error)
>> goto out;
>> - dac->dela_state = XFS_DAS_RM_NAME;
>> + attr->xattri_dela_state = XFS_DAS_RM_NAME;
>> return -EAGAIN;
>> }
>>
>> @@ -1463,7 +1463,7 @@ xfs_attr_remove_iter(
>> * If we came here fresh from a transaction roll, reattach all
>> * the buffers to the current transaction.
>> */
>> - if (dac->dela_state == XFS_DAS_RM_NAME) {
>> + if (attr->xattri_dela_state == XFS_DAS_RM_NAME) {
>> error = xfs_attr_refillstate(state);
>> if (error)
>> goto out;
>> @@ -1480,9 +1480,9 @@ xfs_attr_remove_iter(
>> if (error)
>> goto out;
>>
>> - dac->dela_state = XFS_DAS_RM_SHRINK;
>> + attr->xattri_dela_state = XFS_DAS_RM_SHRINK;
>> trace_xfs_attr_remove_iter_return(
>> - dac->dela_state, args->dp);
>> + attr->xattri_dela_state, args->dp);
>> return -EAGAIN;
>> }
>>
>> diff --git a/fs/xfs/libxfs/xfs_attr.h b/fs/xfs/libxfs/xfs_attr.h
>> index d4e7521..b5f8351 100644
>> --- a/fs/xfs/libxfs/xfs_attr.h
>> +++ b/fs/xfs/libxfs/xfs_attr.h
>> @@ -430,7 +430,7 @@ struct xfs_attr_list_context {
>> */
>>
>> /*
>> - * Enum values for xfs_delattr_context.da_state
>> + * Enum values for xfs_attr_item.xattri_da_state
>> *
>> * These values are used by delayed attribute operations to keep track of where
>> * they were before they returned -EAGAIN. A return code of -EAGAIN signals the
>> @@ -455,7 +455,7 @@ enum xfs_delattr_state {
>> };
>>
>> /*
>> - * Defines for xfs_delattr_context.flags
>> + * Defines for xfs_attr_item.xattri_flags
>> */
>> #define XFS_DAC_LEAF_ADDNAME_INIT 0x01 /* xfs_attr_leaf_addname init*/
>> #define XFS_DAC_DELAYED_OP_INIT 0x02 /* delayed operations init*/
>> @@ -463,32 +463,25 @@ enum xfs_delattr_state {
>> /*
>> * Context used for keeping track of delayed attribute operations
>> */
>> -struct xfs_delattr_context {
>> - struct xfs_da_args *da_args;
>> +struct xfs_attr_item {
>> + struct xfs_da_args *xattri_da_args;
>>
>> /*
>> * Used by xfs_attr_set to hold a leaf buffer across a transaction roll
>> */
>> - struct xfs_buf *leaf_bp;
>> + struct xfs_buf *xattri_leaf_bp;
>>
>> /* Used in xfs_attr_rmtval_set_blk to roll through allocating blocks */
>> - struct xfs_bmbt_irec map;
>> - xfs_dablk_t lblkno;
>> - int blkcnt;
>> + struct xfs_bmbt_irec xattri_map;
>> + xfs_dablk_t xattri_lblkno;
>> + int xattri_blkcnt;
>>
>> /* Used in xfs_attr_node_removename to roll through removing blocks */
>> - struct xfs_da_state *da_state;
>> + struct xfs_da_state *xattri_da_state;
>>
>> /* Used to keep track of current state of delayed operation */
>> - unsigned int flags;
>> - enum xfs_delattr_state dela_state;
>> -};
>> -
>> -/*
>> - * List of attrs to commit later.
>> - */
>> -struct xfs_attr_item {
>> - struct xfs_delattr_context xattri_dac;
>> + unsigned int xattri_flags;
>> + enum xfs_delattr_state xattri_dela_state;
>>
>> /*
>> * Indicates if the attr operation is a set or a remove
>> @@ -496,7 +489,10 @@ struct xfs_attr_item {
>> */
>> unsigned int xattri_op_flags;
>>
>> - /* used to log this item to an intent */
>> + /*
>> + * used to log this item to an intent containing a list of attrs to
>> + * commit later
>> + */
>> struct list_head xattri_list;
>> };
>>
>> @@ -516,12 +512,10 @@ bool xfs_attr_is_leaf(struct xfs_inode *ip);
>> int xfs_attr_get_ilocked(struct xfs_da_args *args);
>> int xfs_attr_get(struct xfs_da_args *args);
>> int xfs_attr_set(struct xfs_da_args *args);
>> -int xfs_attr_set_iter(struct xfs_delattr_context *dac);
>> +int xfs_attr_set_iter(struct xfs_attr_item *attr);
>> int xfs_has_attr(struct xfs_da_args *args);
>> -int xfs_attr_remove_iter(struct xfs_delattr_context *dac);
>> +int xfs_attr_remove_iter(struct xfs_attr_item *attr);
>> bool xfs_attr_namecheck(const void *name, size_t length);
>> -void xfs_delattr_context_init(struct xfs_delattr_context *dac,
>> - struct xfs_da_args *args);
>> int xfs_attr_calc_size(struct xfs_da_args *args, int *local);
>> int xfs_attr_set_deferred(struct xfs_da_args *args);
>> int xfs_attr_remove_deferred(struct xfs_da_args *args);
>> diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c
>> index e29c2b9..db5f004 100644
>> --- a/fs/xfs/libxfs/xfs_attr_remote.c
>> +++ b/fs/xfs/libxfs/xfs_attr_remote.c
>> @@ -568,14 +568,14 @@ xfs_attr_rmtval_stale(
>> */
>> int
>> xfs_attr_rmtval_find_space(
>> - struct xfs_delattr_context *dac)
>> + struct xfs_attr_item *attr)
>> {
>> - struct xfs_da_args *args = dac->da_args;
>> - struct xfs_bmbt_irec *map = &dac->map;
>> + struct xfs_da_args *args = attr->xattri_da_args;
>> + struct xfs_bmbt_irec *map = &attr->xattri_map;
>> int error;
>>
>> - dac->lblkno = 0;
>> - dac->blkcnt = 0;
>> + attr->xattri_lblkno = 0;
>> + attr->xattri_blkcnt = 0;
>> args->rmtblkcnt = 0;
>> args->rmtblkno = 0;
>> memset(map, 0, sizeof(struct xfs_bmbt_irec));
>> @@ -584,8 +584,8 @@ xfs_attr_rmtval_find_space(
>> if (error)
>> return error;
>>
>> - dac->blkcnt = args->rmtblkcnt;
>> - dac->lblkno = args->rmtblkno;
>> + attr->xattri_blkcnt = args->rmtblkcnt;
>> + attr->xattri_lblkno = args->rmtblkno;
>>
>> return 0;
>> }
>> @@ -598,17 +598,18 @@ xfs_attr_rmtval_find_space(
>> */
>> int
>> xfs_attr_rmtval_set_blk(
>> - struct xfs_delattr_context *dac)
>> + struct xfs_attr_item *attr)
>> {
>> - struct xfs_da_args *args = dac->da_args;
>> + struct xfs_da_args *args = attr->xattri_da_args;
>> struct xfs_inode *dp = args->dp;
>> - struct xfs_bmbt_irec *map = &dac->map;
>> + struct xfs_bmbt_irec *map = &attr->xattri_map;
>> int nmap;
>> int error;
>>
>> nmap = 1;
>> - error = xfs_bmapi_write(args->trans, dp, (xfs_fileoff_t)dac->lblkno,
>> - dac->blkcnt, XFS_BMAPI_ATTRFORK, args->total,
>> + error = xfs_bmapi_write(args->trans, dp,
>> + (xfs_fileoff_t)attr->xattri_lblkno,
>> + attr->xattri_blkcnt, XFS_BMAPI_ATTRFORK, args->total,
>> map, &nmap);
>> if (error)
>> return error;
>> @@ -618,8 +619,8 @@ xfs_attr_rmtval_set_blk(
>> (map->br_startblock != HOLESTARTBLOCK));
>>
>> /* roll attribute extent map forwards */
>> - dac->lblkno += map->br_blockcount;
>> - dac->blkcnt -= map->br_blockcount;
>> + attr->xattri_lblkno += map->br_blockcount;
>> + attr->xattri_blkcnt -= map->br_blockcount;
>>
>> return 0;
>> }
>> @@ -673,9 +674,9 @@ xfs_attr_rmtval_invalidate(
>> */
>> int
>> xfs_attr_rmtval_remove(
>> - struct xfs_delattr_context *dac)
>> + struct xfs_attr_item *attr)
>> {
>> - struct xfs_da_args *args = dac->da_args;
>> + struct xfs_da_args *args = attr->xattri_da_args;
>> int error, done;
>>
>> /*
>> @@ -695,7 +696,8 @@ xfs_attr_rmtval_remove(
>> * the parent
>> */
>> if (!done) {
>> - trace_xfs_attr_rmtval_remove_return(dac->dela_state, args->dp);
>> + trace_xfs_attr_rmtval_remove_return(attr->xattri_dela_state,
>> + args->dp);
>> return -EAGAIN;
>> }
>>
>> diff --git a/fs/xfs/libxfs/xfs_attr_remote.h b/fs/xfs/libxfs/xfs_attr_remote.h
>> index d72eff3..62b398e 100644
>> --- a/fs/xfs/libxfs/xfs_attr_remote.h
>> +++ b/fs/xfs/libxfs/xfs_attr_remote.h
>> @@ -12,9 +12,9 @@ int xfs_attr_rmtval_get(struct xfs_da_args *args);
>> int xfs_attr_rmtval_stale(struct xfs_inode *ip, struct xfs_bmbt_irec *map,
>> xfs_buf_flags_t incore_flags);
>> int xfs_attr_rmtval_invalidate(struct xfs_da_args *args);
>> -int xfs_attr_rmtval_remove(struct xfs_delattr_context *dac);
>> +int xfs_attr_rmtval_remove(struct xfs_attr_item *attr);
>> int xfs_attr_rmt_find_hole(struct xfs_da_args *args);
>> int xfs_attr_rmtval_set_value(struct xfs_da_args *args);
>> -int xfs_attr_rmtval_set_blk(struct xfs_delattr_context *dac);
>> -int xfs_attr_rmtval_find_space(struct xfs_delattr_context *dac);
>> +int xfs_attr_rmtval_set_blk(struct xfs_attr_item *attr);
>> +int xfs_attr_rmtval_find_space(struct xfs_attr_item *attr);
>> #endif /* __XFS_ATTR_REMOTE_H__ */
>> diff --git a/fs/xfs/xfs_attr_item.c b/fs/xfs/xfs_attr_item.c
>> index 2efd94f..18fc202 100644
>> --- a/fs/xfs/xfs_attr_item.c
>> +++ b/fs/xfs/xfs_attr_item.c
>> @@ -284,11 +284,11 @@ xfs_attrd_item_release(
>> */
>> STATIC int
>> xfs_trans_attr_finish_update(
>> - struct xfs_delattr_context *dac,
>> + struct xfs_attr_item *attr,
>> struct xfs_attrd_log_item *attrdp,
>> uint32_t op_flags)
>> {
>> - struct xfs_da_args *args = dac->da_args;
>> + struct xfs_da_args *args = attr->xattri_da_args;
>> unsigned int op = op_flags &
>> XFS_ATTR_OP_FLAGS_TYPE_MASK;
>> int error;
>> @@ -305,11 +305,11 @@ xfs_trans_attr_finish_update(
>> switch (op) {
>> case XFS_ATTR_OP_FLAGS_SET:
>> args->op_flags |= XFS_DA_OP_ADDNAME;
>> - error = xfs_attr_set_iter(dac);
>> + error = xfs_attr_set_iter(attr);
>> break;
>> case XFS_ATTR_OP_FLAGS_REMOVE:
>> ASSERT(XFS_IFORK_Q(args->dp));
>> - error = xfs_attr_remove_iter(dac);
>> + error = xfs_attr_remove_iter(attr);
>> break;
>> default:
>> error = -EFSCORRUPTED;
>> @@ -353,16 +353,16 @@ xfs_attr_log_item(
>> * structure with fields from this xfs_attr_item
>> */
>> attrp = &attrip->attri_format;
>> - attrp->alfi_ino = attr->xattri_dac.da_args->dp->i_ino;
>> + attrp->alfi_ino = attr->xattri_da_args->dp->i_ino;
>> attrp->alfi_op_flags = attr->xattri_op_flags;
>> - attrp->alfi_value_len = attr->xattri_dac.da_args->valuelen;
>> - attrp->alfi_name_len = attr->xattri_dac.da_args->namelen;
>> - attrp->alfi_attr_flags = attr->xattri_dac.da_args->attr_filter;
>> -
>> - attrip->attri_name = (void *)attr->xattri_dac.da_args->name;
>> - attrip->attri_value = attr->xattri_dac.da_args->value;
>> - attrip->attri_name_len = attr->xattri_dac.da_args->namelen;
>> - attrip->attri_value_len = attr->xattri_dac.da_args->valuelen;
>> + attrp->alfi_value_len = attr->xattri_da_args->valuelen;
>> + attrp->alfi_name_len = attr->xattri_da_args->namelen;
>> + attrp->alfi_attr_flags = attr->xattri_da_args->attr_filter;
>> +
>> + attrip->attri_name = (void *)attr->xattri_da_args->name;
>> + attrip->attri_value = attr->xattri_da_args->value;
>> + attrip->attri_name_len = attr->xattri_da_args->namelen;
>> + attrip->attri_value_len = attr->xattri_da_args->valuelen;
>> }
>>
>> /* Get an ATTRI. */
>> @@ -403,10 +403,8 @@ xfs_attr_finish_item(
>> struct xfs_attr_item *attr;
>> struct xfs_attrd_log_item *done_item = NULL;
>> int error;
>> - struct xfs_delattr_context *dac;
>>
>> attr = container_of(item, struct xfs_attr_item, xattri_list);
>> - dac = &attr->xattri_dac;
>> if (done)
>> done_item = ATTRD_ITEM(done);
>>
>> @@ -418,19 +416,18 @@ xfs_attr_finish_item(
>> * in a standard delay op, so we need to catch this here and rejoin the
>> * leaf to the new transaction
>> */
>> - if (attr->xattri_dac.leaf_bp &&
>> - attr->xattri_dac.leaf_bp->b_transp != tp) {
>> - xfs_trans_bjoin(tp, attr->xattri_dac.leaf_bp);
>> - xfs_trans_bhold(tp, attr->xattri_dac.leaf_bp);
>> + if (attr->xattri_leaf_bp && attr->xattri_leaf_bp->b_transp != tp) {
>> + xfs_trans_bjoin(tp, attr->xattri_leaf_bp);
>> + xfs_trans_bhold(tp, attr->xattri_leaf_bp);
>> }
>>
>> /*
>> * Always reset trans after EAGAIN cycle
>> * since the transaction is new
>> */
>> - dac->da_args->trans = tp;
>> + attr->xattri_da_args->trans = tp;
>>
>> - error = xfs_trans_attr_finish_update(dac, done_item,
>> + error = xfs_trans_attr_finish_update(attr, done_item,
>> attr->xattri_op_flags);
>> if (error != -EAGAIN)
>> kmem_free(attr);
>> @@ -608,7 +605,7 @@ xfs_attri_item_recover(
>> args = (struct xfs_da_args *)((char *)attr +
>> sizeof(struct xfs_attr_item));
>>
>> - attr->xattri_dac.da_args = args;
>> + attr->xattri_da_args = args;
>> attr->xattri_op_flags = attrp->alfi_op_flags;
>>
>> args->dp = ip;
>> @@ -645,7 +642,7 @@ xfs_attri_item_recover(
>> xfs_ilock(ip, XFS_ILOCK_EXCL);
>> xfs_trans_ijoin(tp, ip, 0);
>>
>> - ret = xfs_trans_attr_finish_update(&attr->xattri_dac, done_item,
>> + ret = xfs_trans_attr_finish_update(attr, done_item,
>> attrp->alfi_op_flags);
>> if (ret == -EAGAIN) {
>> /* There's more work to do, so add it to this transaction */
>
>