Re: [PATCH 01/29] xfs: remove the ATTR_INCOMPLETE flag

Darrick J. Wong
2020-01-17T00:59:43Z

On Tue, Jan 14, 2020 at 09:10:23AM +0100, Christoph Hellwig wrote:
> Replace the ATTR_INCOMPLETE flag with a new boolean field in struct
> xfs_attr_list_context.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Looks ok,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>

--D

> ---
> fs/xfs/libxfs/xfs_attr.h | 5 ++---
> fs/xfs/scrub/attr.c | 2 +-
> fs/xfs/xfs_attr_list.c | 6 +-----
> 3 files changed, 4 insertions(+), 9 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_attr.h b/fs/xfs/libxfs/xfs_attr.h
> index 4243b2272642..71bcf1298e4c 100644
> --- a/fs/xfs/libxfs/xfs_attr.h
> +++ b/fs/xfs/libxfs/xfs_attr.h
> @@ -36,11 +36,10 @@ struct xfs_attr_list_context;
> #define ATTR_KERNOTIME 0x1000 /* [kernel] don't update inode timestamps */
> #define ATTR_KERNOVAL 0x2000 /* [kernel] get attr size only, not value */
>
> -#define ATTR_INCOMPLETE 0x4000 /* [kernel] return INCOMPLETE attr keys */
> #define ATTR_ALLOC 0x8000 /* [kernel] allocate xattr buffer on demand */
>
> #define ATTR_KERNEL_FLAGS \
> - (ATTR_KERNOTIME | ATTR_KERNOVAL | ATTR_INCOMPLETE | ATTR_ALLOC)
> + (ATTR_KERNOTIME | ATTR_KERNOVAL | ATTR_ALLOC)
>
> #define XFS_ATTR_FLAGS \
> { ATTR_DONTFOLLOW, "DONTFOLLOW" }, \
> @@ -51,7 +50,6 @@ struct xfs_attr_list_context;
> { ATTR_REPLACE, "REPLACE" }, \
> { ATTR_KERNOTIME, "KERNOTIME" }, \
> { ATTR_KERNOVAL, "KERNOVAL" }, \
> - { ATTR_INCOMPLETE, "INCOMPLETE" }, \
> { ATTR_ALLOC, "ALLOC" }
>
> /*
> @@ -123,6 +121,7 @@ typedef struct xfs_attr_list_context {
> * error values to the xfs_attr_list caller.
> */
> int seen_enough;
> + bool allow_incomplete;
>
> ssize_t count; /* num used entries */
> int dupcnt; /* count dup hashvals seen */
> diff --git a/fs/xfs/scrub/attr.c b/fs/xfs/scrub/attr.c
> index d9f0dd444b80..d804558cdbca 100644
> --- a/fs/xfs/scrub/attr.c
> +++ b/fs/xfs/scrub/attr.c
> @@ -497,7 +497,7 @@ xchk_xattr(
> sx.context.resynch = 1;
> sx.context.put_listent = xchk_xattr_listent;
> sx.context.tp = sc->tp;
> - sx.context.flags = ATTR_INCOMPLETE;
> + sx.context.allow_incomplete = true;
> sx.sc = sc;
>
> /*
> diff --git a/fs/xfs/xfs_attr_list.c b/fs/xfs/xfs_attr_list.c
> index d37743bdf274..5139ef983cd6 100644
> --- a/fs/xfs/xfs_attr_list.c
> +++ b/fs/xfs/xfs_attr_list.c
> @@ -452,7 +452,7 @@ xfs_attr3_leaf_list_int(
> }
>
> if ((entry->flags & XFS_ATTR_INCOMPLETE) &&
> - !(context->flags & ATTR_INCOMPLETE))
> + !context->allow_incomplete)
> continue; /* skip incomplete entries */
>
> if (entry->flags & XFS_ATTR_LOCAL) {
> @@ -632,10 +632,6 @@ xfs_attr_list(
> (cursor->hashval || cursor->blkno || cursor->offset))
> return -EINVAL;
>
> - /* Only internal consumers can retrieve incomplete attrs. */
> - if (flags & ATTR_INCOMPLETE)
> - return -EINVAL;
> -
> /*
> * Check for a properly aligned buffer.
> */
> --
> 2.24.1
>