Re: [PATCH RESEND v2 08/18] xfs: add parent pointer support to attribute code

Alli
2022-08-10T03:08:59Z

On Tue, 2022-08-09 at 09:54 -0700, Darrick J. Wong wrote:
> On Thu, Aug 04, 2022 at 12:40:03PM -0700, Allison Henderson wrote:
> > Add the new parent attribute type. XFS_ATTR_PARENT is used only for
> > parent pointer
> > entries; it uses reserved blocks like XFS_ATTR_ROOT.
> >
> > [dchinner: forward ported and cleaned up]
> > [achender: rebased]
> >
> > Signed-off-by: Mark Tinguely <tinguely@sgi.com>
> > Signed-off-by: Dave Chinner <dchinner@redhat.com>
> > Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
>
> Looks good now,
> Reviewed-by: Darrick J. Wong <djwong@kernel.org>

Great! Thanks!
Allison

>
> --D
>
> > ---
> > fs/xfs/libxfs/xfs_attr.c | 4 +++-
> > fs/xfs/libxfs/xfs_da_format.h | 5 ++++-
> > fs/xfs/libxfs/xfs_log_format.h | 1 +
> > 3 files changed, 8 insertions(+), 2 deletions(-)
> >
> > diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
> > index e28d93d232de..8df80d91399b 100644
> > --- a/fs/xfs/libxfs/xfs_attr.c
> > +++ b/fs/xfs/libxfs/xfs_attr.c
> > @@ -966,11 +966,13 @@ xfs_attr_set(
> > struct xfs_inode *dp = args->dp;
> > struct xfs_mount *mp = dp->i_mount;
> > struct xfs_trans_res tres;
> > - bool rsvd = (args->attr_filter &
> > XFS_ATTR_ROOT);
> > + bool rsvd;
> > int error, local;
> > int rmt_blks = 0;
> > unsigned int total;
> >
> > + rsvd = (args->attr_filter & (XFS_ATTR_ROOT | XFS_ATTR_PARENT))
> > != 0;
> > +
> > if (xfs_is_shutdown(dp->i_mount))
> > return -EIO;
> >
> > diff --git a/fs/xfs/libxfs/xfs_da_format.h
> > b/fs/xfs/libxfs/xfs_da_format.h
> > index 25e2841084e1..3dc03968bba6 100644
> > --- a/fs/xfs/libxfs/xfs_da_format.h
> > +++ b/fs/xfs/libxfs/xfs_da_format.h
> > @@ -688,12 +688,15 @@ struct xfs_attr3_leafblock {
> > #define XFS_ATTR_LOCAL_BIT 0 /* attr is stored locally
> > */
> > #define XFS_ATTR_ROOT_BIT 1 /* limit access to trusted
> > attrs */
> > #define XFS_ATTR_SECURE_BIT 2 /* limit access to secure
> > attrs */
> > +#define XFS_ATTR_PARENT_BIT 3 /* parent pointer attrs */
> > #define XFS_ATTR_INCOMPLETE_BIT 7 /* attr in middle
> > of create/delete */
> > #define XFS_ATTR_LOCAL (1u << XFS_ATTR_LOCAL_BIT)
> > #define XFS_ATTR_ROOT (1u << XFS_ATTR_ROOT_BIT)
> > #define XFS_ATTR_SECURE (1u << XFS_ATTR_SECURE_BIT)
> > +#define XFS_ATTR_PARENT (1u << XFS_ATTR_PARENT_BIT)
> > #define XFS_ATTR_INCOMPLETE (1u << XFS_ATTR_INCOMPLETE_BIT)
> > -#define XFS_ATTR_NSP_ONDISK_MASK (XFS_ATTR_ROOT |
> > XFS_ATTR_SECURE)
> > +#define XFS_ATTR_NSP_ONDISK_MASK \
> > + (XFS_ATTR_ROOT | XFS_ATTR_SECURE |
> > XFS_ATTR_PARENT)
> >
> > /*
> > * Alignment for namelist and valuelist entries (since they are
> > mixed
> > diff --git a/fs/xfs/libxfs/xfs_log_format.h
> > b/fs/xfs/libxfs/xfs_log_format.h
> > index b351b9dc6561..eea53874fde8 100644
> > --- a/fs/xfs/libxfs/xfs_log_format.h
> > +++ b/fs/xfs/libxfs/xfs_log_format.h
> > @@ -917,6 +917,7 @@ struct xfs_icreate_log {
> > */
> > #define XFS_ATTRI_FILTER_MASK (XFS_ATTR_ROOT | \
> > XFS_ATTR_SECURE | \
> > + XFS_ATTR_PARENT | \
> > XFS_ATTR_INCOMPLETE)
> >
> > /*
> > --
> > 2.25.1
> >