Re: [PATCH 01/14] xfs: add xattr setname and removename functions for internal users

Darrick J. Wong
2024-04-11T04:30:49Z

On Wed, Apr 10, 2024 at 08:32:44PM -0700, Christoph Hellwig wrote:
> On Wed, Apr 10, 2024 at 03:18:44PM -0700, Darrick J. Wong wrote:
> > > Is there a good reason to have a separate remove helper and not
> > > overload a NULL value like we do for the normal xattr interface?
> >
> > xfs_repair uses xfs_parent_unset -> xfs_attr_removename to erase any
> > XFS_ATTR_PARENT attribute that doesn't validate, so it needs to be able
> > to pass in a non-NULL value. Perhaps I'll add a comment about that,
> > since this isn't the first time this has come up.
> >
> > Come to think of it you can't removename a remote parent value, so I
> > guess in that bad case xfs_repair will have to drop the entire attr
> > structure <frown>.
>
> Maybe we'll need to fix that. How about you leave the xattr_flags in
> place for now, and then I or you if you really want) replace it with
> a new enum argument:
>
> enum xfs_attr_change {
> XFS_ATTR_CREATE,
> XFS_ATTR_REPLACE,
> XFS_ATTR_CREATE_OR_REPLACE,
> XFS_ATTR_REMOVE,
> };

Heh, I almost did that:

enum xfs_attr_change {
XAC_CREATE = XATTR_CREATE,
XAC_REPLACE = XATTR_REPLACE,
XAC_UPSERT,
XAC_REMOVE,
};

(500 patches from now when I get around to removing xattr_flags & making
it a parameter.)

> and we pass that to xfs_attr_set and what is current xfs_attr_setname
> (which btw is a name that feels really odd). That way repair can
> also use the libxfs attr helpers with a value match for parent pointers?

I think this is a good idea. Maybe even worth rebasing through the
tree.

--D