From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Allison Henderson <allison.henderson@oracle.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH v14 15/15] xfs: Merge xfs_delattr_context into xfs_attr_item
Date: Mon, 4 Jan 2021 21:47:38 -0800 [thread overview]
Message-ID: <20210105054738.GW6918@magnolia> (raw)
In-Reply-To: <20201218072917.16805-16-allison.henderson@oracle.com>
On Fri, Dec 18, 2020 at 12:29:17AM -0700, 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 infastructure is in place, we can combine these to eliminate
> the extra struct
>
> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Nice consolidation!
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
--D
> ---
> fs/xfs/libxfs/xfs_attr.c | 138 ++++++++++++++++++++--------------------
> fs/xfs/libxfs/xfs_attr.h | 40 +++++-------
> fs/xfs/libxfs/xfs_attr_remote.c | 34 +++++-----
> fs/xfs/libxfs/xfs_attr_remote.h | 6 +-
> fs/xfs/xfs_attr_item.c | 46 ++++++--------
> 5 files changed, 127 insertions(+), 137 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
> index 6e5a900..badcdae 100644
> --- a/fs/xfs/libxfs/xfs_attr.c
> +++ b/fs/xfs/libxfs/xfs_attr.c
> @@ -46,7 +46,7 @@ STATIC int xfs_attr_shortform_addname(xfs_da_args_t *args);
> * 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(struct xfs_delattr_context *dac);
> +STATIC int xfs_attr_leaf_addname(struct xfs_attr_item *attr);
> 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);
>
> @@ -54,8 +54,8 @@ STATIC int xfs_attr_leaf_hasname(struct xfs_da_args *args, struct xfs_buf **bp);
> * Internal routines when attribute list is more than one block.
> */
> STATIC int xfs_attr_node_get(xfs_da_args_t *args);
> -STATIC int xfs_attr_node_addname(struct xfs_delattr_context *dac);
> -STATIC int xfs_attr_node_removename_iter(struct xfs_delattr_context *dac);
> +STATIC int xfs_attr_node_addname(struct xfs_attr_item *attr);
> +STATIC int xfs_attr_node_removename_iter(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);
> @@ -276,27 +276,27 @@ xfs_attr_set_shortform(
> */
> 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_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;
>
> /* State machine switch */
> - switch (dac->dela_state) {
> + switch (attr->xattri_dela_state) {
> case XFS_DAS_FLIP_LFLAG:
> case XFS_DAS_FOUND_LBLK:
> case XFS_DAS_RM_LBLK:
> - return xfs_attr_leaf_addname(dac);
> + return xfs_attr_leaf_addname(attr);
> case XFS_DAS_FOUND_NBLK:
> case XFS_DAS_FLIP_NFLAG:
> case XFS_DAS_ALLOC_NODE:
> - return xfs_attr_node_addname(dac);
> + return xfs_attr_node_addname(attr);
> case XFS_DAS_UNINIT:
> break;
> default:
> - ASSERT(dac->dela_state != XFS_DAS_RM_SHRINK);
> + ASSERT(attr->xattri_dela_state != XFS_DAS_RM_SHRINK);
> break;
> }
>
> @@ -328,7 +328,7 @@ xfs_attr_set_iter(
> }
>
> if (!xfs_bmap_one_block(dp, XFS_ATTR_FORK))
> - return xfs_attr_node_addname(dac);
> + return xfs_attr_node_addname(attr);
>
> error = xfs_attr_leaf_try_add(args, *leaf_bp);
> switch (error) {
> @@ -351,11 +351,11 @@ xfs_attr_set_iter(
> * when we come back, we'll be a node, so we'll fall
> * down into the node handling code below
> */
> - trace_xfs_das_state_return(dac->dela_state);
> + trace_xfs_das_state_return(attr->xattri_dela_state);
> return -EAGAIN;
> case 0:
> - dac->dela_state = XFS_DAS_FOUND_LBLK;
> - trace_xfs_das_state_return(dac->dela_state);
> + attr->xattri_dela_state = XFS_DAS_FOUND_LBLK;
> + trace_xfs_das_state_return(attr->xattri_dela_state);
> return -EAGAIN;
> }
> return error;
> @@ -401,13 +401,13 @@ xfs_has_attr(
> */
> 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_args *args = attr->xattri_da_args;
> struct xfs_inode *dp = args->dp;
>
> /* If we are shrinking a node, resume shrink */
> - if (dac->dela_state == XFS_DAS_RM_SHRINK)
> + if (attr->xattri_dela_state == XFS_DAS_RM_SHRINK)
> goto node;
>
> if (!xfs_inode_hasattr(dp))
> @@ -422,7 +422,7 @@ xfs_attr_remove_iter(
> return xfs_attr_leaf_removename(args);
> node:
> /* If we are not short form or leaf, then proceed to remove node */
> - return xfs_attr_node_removename_iter(dac);
> + return xfs_attr_node_removename_iter(attr);
> }
>
> /*
> @@ -573,7 +573,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;
> @@ -768,16 +768,16 @@ xfs_attr_leaf_try_add(
> */
> STATIC int
> xfs_attr_leaf_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_buf *bp = NULL;
> int error, forkoff;
> struct xfs_inode *dp = args->dp;
> struct xfs_mount *mp = args->dp->i_mount;
>
> /* State machine switch */
> - switch (dac->dela_state) {
> + switch (attr->xattri_dela_state) {
> case XFS_DAS_FLIP_LFLAG:
> goto das_flip_flag;
> case XFS_DAS_RM_LBLK:
> @@ -794,10 +794,10 @@ xfs_attr_leaf_addname(
> */
>
> /* 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;
> }
> @@ -807,12 +807,12 @@ xfs_attr_leaf_addname(
> * Roll through the "value", allocating blocks on disk as
> * required.
> */
> - 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_das_state_return(dac->dela_state);
> + trace_xfs_das_state_return(attr->xattri_dela_state);
> return -EAGAIN;
> }
>
> @@ -846,8 +846,8 @@ xfs_attr_leaf_addname(
> /*
> * Commit the flag value change and start the next trans in series.
> */
> - dac->dela_state = XFS_DAS_FLIP_LFLAG;
> - trace_xfs_das_state_return(dac->dela_state);
> + attr->xattri_dela_state = XFS_DAS_FLIP_LFLAG;
> + trace_xfs_das_state_return(attr->xattri_dela_state);
> return -EAGAIN;
> }
> das_flip_flag:
> @@ -862,12 +862,12 @@ xfs_attr_leaf_addname(
> return error;
>
> /* 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;
> das_rm_lblk:
> if (args->rmtblkno) {
> - error = xfs_attr_rmtval_remove(dac);
> + error = xfs_attr_rmtval_remove(attr);
> if (error == -EAGAIN)
> - trace_xfs_das_state_return(dac->dela_state);
> + trace_xfs_das_state_return(attr->xattri_dela_state);
> if (error)
> return error;
> }
> @@ -1041,9 +1041,9 @@ xfs_attr_node_hasname(
> */
> 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_args *args = attr->xattri_da_args;
> struct xfs_da_state *state = NULL;
> struct xfs_da_state_blk *blk;
> int retval = 0;
> @@ -1053,7 +1053,7 @@ xfs_attr_node_addname(
> trace_xfs_attr_node_addname(args);
>
> /* State machine switch */
> - switch (dac->dela_state) {
> + switch (attr->xattri_dela_state) {
> case XFS_DAS_FLIP_NFLAG:
> goto das_flip_flag;
> case XFS_DAS_FOUND_NBLK:
> @@ -1119,7 +1119,7 @@ xfs_attr_node_addname(
> * this. dela_state is still unset by this function at
> * this point.
> */
> - trace_xfs_das_state_return(dac->dela_state);
> + trace_xfs_das_state_return(attr->xattri_dela_state);
> return -EAGAIN;
> }
>
> @@ -1151,8 +1151,8 @@ xfs_attr_node_addname(
> xfs_da_state_free(state);
> state = NULL;
>
> - dac->dela_state = XFS_DAS_FOUND_NBLK;
> - trace_xfs_das_state_return(dac->dela_state);
> + attr->xattri_dela_state = XFS_DAS_FOUND_NBLK;
> + trace_xfs_das_state_return(attr->xattri_dela_state);
> return -EAGAIN;
> das_found_nblk:
>
> @@ -1164,7 +1164,7 @@ xfs_attr_node_addname(
> */
> if (args->rmtblkno > 0) {
> /* Open coded xfs_attr_rmtval_set without trans handling */
> - error = xfs_attr_rmtval_find_space(dac);
> + error = xfs_attr_rmtval_find_space(attr);
> if (error)
> return error;
>
> @@ -1172,14 +1172,14 @@ xfs_attr_node_addname(
> * Roll through the "value", allocating blocks on disk as
> * required. Set the state in case of -EAGAIN return code
> */
> - dac->dela_state = XFS_DAS_ALLOC_NODE;
> + attr->xattri_dela_state = XFS_DAS_ALLOC_NODE;
> das_alloc_node:
> - 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_das_state_return(dac->dela_state);
> + trace_xfs_das_state_return(attr->xattri_dela_state);
> return -EAGAIN;
> }
>
> @@ -1214,8 +1214,8 @@ xfs_attr_node_addname(
> /*
> * Commit the flag value change and start the next trans in series
> */
> - dac->dela_state = XFS_DAS_FLIP_NFLAG;
> - trace_xfs_das_state_return(dac->dela_state);
> + attr->xattri_dela_state = XFS_DAS_FLIP_NFLAG;
> + trace_xfs_das_state_return(attr->xattri_dela_state);
> return -EAGAIN;
> }
> das_flip_flag:
> @@ -1230,13 +1230,13 @@ xfs_attr_node_addname(
> return error;
>
> /* 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;
> das_rm_nblk:
> if (args->rmtblkno) {
> - error = xfs_attr_rmtval_remove(dac);
> + error = xfs_attr_rmtval_remove(attr);
>
> if (error == -EAGAIN)
> - trace_xfs_das_state_return(dac->dela_state);
> + trace_xfs_das_state_return(attr->xattri_dela_state);
>
> if (error)
> return error;
> @@ -1344,10 +1344,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);
> @@ -1371,7 +1371,7 @@ int xfs_attr_node_removename_setup(
>
> STATIC int
> xfs_attr_node_remove_rmt (
> - struct xfs_delattr_context *dac,
> + struct xfs_attr_item *attr,
> struct xfs_da_state *state)
> {
> int error = 0;
> @@ -1379,9 +1379,9 @@ xfs_attr_node_remove_rmt (
> /*
> * May return -EAGAIN to request that the caller recall this function
> */
> - error = xfs_attr_rmtval_remove(dac);
> + error = xfs_attr_rmtval_remove(attr);
> if (error == -EAGAIN)
> - trace_xfs_das_state_return(dac->dela_state);
> + trace_xfs_das_state_return(attr->xattri_dela_state);
> if (error)
> return error;
>
> @@ -1425,10 +1425,10 @@ xfs_attr_node_remove_cleanup(
> */
> STATIC int
> xfs_attr_node_remove_step(
> - 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 = 0;
> /*
> * If there is an out-of-line value, de-allocate the blocks.
> @@ -1439,7 +1439,7 @@ xfs_attr_node_remove_step(
> /*
> * May return -EAGAIN. Remove blocks until args->rmtblkno == 0
> */
> - error = xfs_attr_node_remove_rmt(dac, state);
> + error = xfs_attr_node_remove_rmt(attr, state);
> if (error)
> return error;
> }
> @@ -1460,29 +1460,29 @@ xfs_attr_node_remove_step(
> */
> STATIC int
> xfs_attr_node_removename_iter(
> - 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, error;
> struct xfs_inode *dp = args->dp;
>
> trace_xfs_attr_node_removename(args);
>
> - 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)
> goto out;
> }
> - state = dac->da_state;
> + state = attr->xattri_da_state;
>
> - switch (dac->dela_state) {
> + switch (attr->xattri_dela_state) {
> case XFS_DAS_UNINIT:
> /*
> * repeatedly remove remote blocks, remove the entry and join.
> * returns -EAGAIN or 0 for completion of the step.
> */
> - error = xfs_attr_node_remove_step(dac);
> + error = xfs_attr_node_remove_step(attr);
> if (error)
> break;
>
> @@ -1498,8 +1498,8 @@ xfs_attr_node_removename_iter(
> if (error)
> return error;
>
> - dac->dela_state = XFS_DAS_RM_SHRINK;
> - trace_xfs_das_state_return(dac->dela_state);
> + attr->xattri_dela_state = XFS_DAS_RM_SHRINK;
> + trace_xfs_das_state_return(attr->xattri_dela_state);
> return -EAGAIN;
> }
>
> @@ -1519,7 +1519,7 @@ xfs_attr_node_removename_iter(
> }
>
> if (error == -EAGAIN) {
> - trace_xfs_das_state_return(dac->dela_state);
> + trace_xfs_das_state_return(attr->xattri_dela_state);
> return error;
> }
> out:
> diff --git a/fs/xfs/libxfs/xfs_attr.h b/fs/xfs/libxfs/xfs_attr.h
> index edd008d..d1a59d0 100644
> --- a/fs/xfs/libxfs/xfs_attr.h
> +++ b/fs/xfs/libxfs/xfs_attr.h
> @@ -364,7 +364,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
> @@ -385,7 +385,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*/
> @@ -393,32 +393,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
> @@ -426,7 +419,10 @@ struct xfs_attr_item {
> */
> uint32_t 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;
> };
>
> @@ -445,12 +441,10 @@ int xfs_inode_hasattr(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 a5ff5e0..42cc9cc 100644
> --- a/fs/xfs/libxfs/xfs_attr_remote.c
> +++ b/fs/xfs/libxfs/xfs_attr_remote.c
> @@ -634,14 +634,14 @@ xfs_attr_rmtval_set(
> */
> 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));
> @@ -650,8 +650,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;
> }
> @@ -664,17 +664,17 @@ 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;
> @@ -684,8 +684,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;
> }
> @@ -738,9 +738,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;
>
> /*
> @@ -762,7 +762,7 @@ xfs_attr_rmtval_remove(
> * by the parent
> */
> if (!done) {
> - trace_xfs_das_state_return(dac->dela_state);
> + trace_xfs_das_state_return(attr->xattri_dela_state);
> return -EAGAIN;
> }
>
> diff --git a/fs/xfs/libxfs/xfs_attr_remote.h b/fs/xfs/libxfs/xfs_attr_remote.h
> index 6ae91af..d3aa27d 100644
> --- a/fs/xfs/libxfs/xfs_attr_remote.h
> +++ b/fs/xfs/libxfs/xfs_attr_remote.h
> @@ -13,9 +13,9 @@ int xfs_attr_rmtval_set(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 e1cfef1..bbca949 100644
> --- a/fs/xfs/xfs_attr_item.c
> +++ b/fs/xfs/xfs_attr_item.c
> @@ -291,11 +291,11 @@ xfs_attrd_item_release(
> */
> int
> xfs_trans_attr(
> - 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;
> int error;
>
> error = xfs_qm_dqattach_locked(args->dp, 0);
> @@ -310,11 +310,11 @@ xfs_trans_attr(
> switch (op_flags) {
> 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;
> @@ -358,16 +358,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. */
> @@ -408,10 +408,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);
>
> @@ -423,19 +421,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(dac, done_item, attr->xattri_op_flags);
> + error = xfs_trans_attr(attr, done_item, attr->xattri_op_flags);
> if (error != -EAGAIN)
> kmem_free(attr);
>
> @@ -570,7 +567,7 @@ xfs_attri_item_recover(
> struct xfs_attrd_log_item *done_item = NULL;
> struct xfs_attr_item attr = {
> .xattri_op_flags = attrip->attri_format.alfi_op_flags,
> - .xattri_dac.da_args = &args,
> + .xattri_da_args = &args,
> };
>
> /*
> @@ -630,8 +627,7 @@ xfs_attri_item_recover(
> xfs_ilock(ip, XFS_ILOCK_EXCL);
> xfs_trans_ijoin(args.trans, ip, 0);
>
> - error = xfs_trans_attr(&attr.xattri_dac, done_item,
> - attrp->alfi_op_flags);
> + error = xfs_trans_attr(&attr, done_item, attrp->alfi_op_flags);
> if (error == -EAGAIN) {
> /*
> * There's more work to do, so make a new xfs_attr_item and add
> @@ -648,7 +644,7 @@ xfs_attri_item_recover(
> memcpy(new_args, &args, sizeof(struct xfs_da_args));
> memcpy(new_attr, &attr, sizeof(struct xfs_attr_item));
>
> - new_attr->xattri_dac.da_args = new_args;
> + new_attr->xattri_da_args = new_args;
> memset(&new_attr->xattri_list, 0, sizeof(struct list_head));
>
> xfs_defer_add(args.trans, XFS_DEFER_OPS_TYPE_ATTR,
> --
> 2.7.4
>
next prev parent reply other threads:[~2021-01-05 5:48 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-18 7:29 [PATCH v14 00/15] xfs: Delayed Attributes Allison Henderson
2020-12-18 7:29 ` [PATCH v14 01/15] xfs: Add helper xfs_attr_node_remove_step Allison Henderson
2020-12-21 6:45 ` Chandan Babu R
2020-12-21 23:48 ` Allison Henderson
2020-12-22 16:50 ` Brian Foster
2020-12-18 7:29 ` [PATCH v14 02/15] xfs: Add xfs_attr_node_remove_cleanup Allison Henderson
2020-12-21 6:45 ` Chandan Babu R
2020-12-21 23:47 ` Allison Henderson
2020-12-22 16:50 ` Brian Foster
2020-12-18 7:29 ` [PATCH v14 03/15] xfs: Hoist transaction handling in xfs_attr_node_remove_step Allison Henderson
2020-12-21 6:45 ` Chandan Babu R
2020-12-21 21:51 ` Allison Henderson
2020-12-18 7:29 ` [PATCH v14 04/15] xfs: Add delay ready attr remove routines Allison Henderson
2020-12-22 7:22 ` Chandan Babu R
2020-12-22 15:41 ` Allison Henderson
2020-12-23 4:05 ` Chandan Babu R
2020-12-22 17:11 ` Brian Foster
2020-12-22 17:20 ` Brian Foster
2020-12-22 18:44 ` Brian Foster
2020-12-23 5:20 ` Allison Henderson
2020-12-23 14:16 ` Brian Foster
2020-12-24 8:23 ` Allison Henderson
2021-01-04 17:52 ` Brian Foster
2021-01-05 18:10 ` Allison Henderson
2021-01-06 14:25 ` Brian Foster
2020-12-18 7:29 ` [PATCH v14 05/15] xfs: Add delay ready attr set routines Allison Henderson
2020-12-23 8:00 ` Chandan Babu R
2020-12-23 16:31 ` Allison Henderson
2020-12-18 7:29 ` [PATCH v14 06/15] xfs: Add state machine tracepoints Allison Henderson
2021-01-05 4:50 ` Chandan Babu R
2021-01-05 21:06 ` Allison Henderson
2021-01-05 5:28 ` Darrick J. Wong
2021-01-05 21:07 ` Allison Henderson
2020-12-18 7:29 ` [PATCH v14 07/15] xfs: Rename __xfs_attr_rmtval_remove Allison Henderson
2020-12-18 7:29 ` [PATCH v14 08/15] xfs: Handle krealloc errors in xlog_recover_add_to_cont_trans Allison Henderson
2021-01-05 5:38 ` Darrick J. Wong
2021-01-05 20:15 ` Allison Henderson
2020-12-18 7:29 ` [PATCH v14 09/15] xfs: Set up infastructure for deferred attribute operations Allison Henderson
2020-12-18 7:29 ` [PATCH v14 10/15] xfs: Skip flip flags for delayed attrs Allison Henderson
2020-12-18 7:29 ` [PATCH v14 11/15] xfs: Add xfs_attr_set_deferred and xfs_attr_remove_deferred Allison Henderson
2020-12-18 7:29 ` [PATCH v14 12/15] xfs: Remove unused xfs_attr_*_args Allison Henderson
2020-12-18 7:29 ` [PATCH v14 13/15] xfs: Add delayed attributes error tag Allison Henderson
2020-12-18 7:29 ` [PATCH v14 14/15] xfs: Add delattr mount option Allison Henderson
2021-01-05 5:46 ` Darrick J. Wong
2021-01-05 21:49 ` Allison Henderson
2020-12-18 7:29 ` [PATCH v14 15/15] xfs: Merge xfs_delattr_context into xfs_attr_item Allison Henderson
2021-01-05 5:47 ` Darrick J. Wong [this message]
2021-01-05 21:07 ` Allison Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210105054738.GW6918@magnolia \
--to=darrick.wong@oracle.com \
--cc=allison.henderson@oracle.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox