On Tue, Aug 10, 2021 at 03:24:37PM +1000, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > xfs_has_attr() is poorly named. It has global scope as it is defined > in a header file, but it has no namespace scope that tells us what > it is checking has attributes. It's not even clear what "has_attr" > means, because what it is actually doing is an attribute fork lookup > to see if the attribute exists. > > Upcoming patches use this "xfs_has_<foo>" namespace for global > filesystem features, which conflicts with this function. > > Rename xfs_has_attr() to xfs_attr_lookup() and make it a static > function, freeing up the "xfs_has_" namespace for global scope > usage. Why not kill this function entirely as I suggested last time? --- >From 154d64990a9f410200a117729149dc1febb02458 Mon Sep 17 00:00:00 2001 From: Christoph Hellwig <hch@xxxxxx> Date: Thu, 12 Aug 2021 10:01:08 +0200 Subject: xfs: remove xfs_has_attr xfs_has_attr() is poorly named. It has global scope as it is defined in a header file, but it has no namespace scope that tells us what it is checking has attributes. It's not even clear what "has_attr" means, because what it is actually doing is an attribute fork lookup to see if the attribute exists. Fold it into the only caller. Signed-off-by: Christoph Hellwig <hch@xxxxxx> --- fs/xfs/libxfs/xfs_attr.c | 46 ++++++++++++---------------------------- fs/xfs/libxfs/xfs_attr.h | 1 - 2 files changed, 14 insertions(+), 33 deletions(-) diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c index 010d499b237c55..939afdcec634be 100644 --- a/fs/xfs/libxfs/xfs_attr.c +++ b/fs/xfs/libxfs/xfs_attr.c @@ -638,36 +638,6 @@ xfs_attr_set_iter( return error; } - -/* - * Return EEXIST if attr is found, or ENOATTR if not - */ -int -xfs_has_attr( - struct xfs_da_args *args) -{ - struct xfs_inode *dp = args->dp; - struct xfs_buf *bp = NULL; - int error; - - if (!xfs_inode_hasattr(dp)) - return -ENOATTR; - - if (dp->i_afp->if_format == XFS_DINODE_FMT_LOCAL) - return xfs_attr_sf_findname(args, NULL, NULL); - - if (xfs_attr_is_leaf(dp)) { - error = xfs_attr_leaf_hasname(args, &bp); - - if (bp) - xfs_trans_brelse(args->trans, bp); - - return error; - } - - return xfs_attr_node_hasname(args, NULL); -} - /* * Remove the attribute specified in @args. */ @@ -780,8 +750,21 @@ xfs_attr_set( goto out_trans_cancel; } + if (!xfs_inode_hasattr(dp)) { + error = -ENOATTR; + } else if (dp->i_afp->if_format == XFS_DINODE_FMT_LOCAL) { + error = xfs_attr_sf_findname(args, NULL, NULL); + } else if (xfs_attr_is_leaf(dp)) { + struct xfs_buf *bp = NULL; + + error = xfs_attr_leaf_hasname(args, &bp); + if (bp) + xfs_trans_brelse(args->trans, bp); + } else { + error = xfs_attr_node_hasname(args, NULL); + } + if (args->value) { - error = xfs_has_attr(args); if (error == -EEXIST && (args->attr_flags & XATTR_CREATE)) goto out_trans_cancel; if (error == -ENOATTR && (args->attr_flags & XATTR_REPLACE)) @@ -796,7 +779,6 @@ xfs_attr_set( if (!args->trans) goto out_unlock; } else { - error = xfs_has_attr(args); if (error != -EEXIST) goto out_trans_cancel; diff --git a/fs/xfs/libxfs/xfs_attr.h b/fs/xfs/libxfs/xfs_attr.h index 8de5d1d2733ead..5e71f719bdd52b 100644 --- a/fs/xfs/libxfs/xfs_attr.h +++ b/fs/xfs/libxfs/xfs_attr.h @@ -490,7 +490,6 @@ 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_args(struct xfs_da_args *args); -int xfs_has_attr(struct xfs_da_args *args); int xfs_attr_remove_args(struct xfs_da_args *args); int xfs_attr_remove_iter(struct xfs_delattr_context *dac); bool xfs_attr_namecheck(const void *name, size_t length); -- 2.30.2