All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: Allison Henderson <allison.henderson@oracle.com>
Cc: "linux-xfs@vger.kernel.org" <linux-xfs@vger.kernel.org>
Subject: Re: [PATCH v3 14/26] xfs: parent pointer attribute creation
Date: Mon, 26 Sep 2022 16:54:47 -0700	[thread overview]
Message-ID: <YzI7x64KUTdu1fWq@magnolia> (raw)
In-Reply-To: <76004056a6c10c50107f67cafbc0f9f02c949e7d.camel@oracle.com>

On Mon, Sep 26, 2022 at 09:48:31PM +0000, Allison Henderson wrote:
> On Fri, 2022-09-23 at 14:11 -0700, Darrick J. Wong wrote:
> > On Wed, Sep 21, 2022 at 10:44:46PM -0700,
> > allison.henderson@oracle.com wrote:
> > > From: Allison Henderson <allison.henderson@oracle.com>
> > > 
> > > Add parent pointer attribute during xfs_create, and subroutines to
> > > initialize attributes
> > > 
> > > Signed-off-by: Dave Chinner <dchinner@redhat.com>
> > > Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> > > ---
> > >  fs/xfs/Makefile            |   1 +
> > >  fs/xfs/libxfs/xfs_attr.c   |   4 +-
> > >  fs/xfs/libxfs/xfs_attr.h   |   4 +-
> > >  fs/xfs/libxfs/xfs_parent.c | 135
> > > +++++++++++++++++++++++++++++++++++++
> > >  fs/xfs/libxfs/xfs_parent.h |  32 +++++++++
> > >  fs/xfs/xfs_inode.c         |  37 ++++++++--
> > >  fs/xfs/xfs_xattr.c         |   2 +-
> > >  fs/xfs/xfs_xattr.h         |   1 +
> > >  8 files changed, 207 insertions(+), 9 deletions(-)
> > > 
> > > diff --git a/fs/xfs/Makefile b/fs/xfs/Makefile
> > > index 03135a1c31b6..e2b2cf50ffcf 100644
> > > --- a/fs/xfs/Makefile
> > > +++ b/fs/xfs/Makefile
> > > @@ -40,6 +40,7 @@ xfs-y                         += $(addprefix
> > > libxfs/, \
> > >                                    xfs_inode_fork.o \
> > >                                    xfs_inode_buf.o \
> > >                                    xfs_log_rlimit.o \
> > > +                                  xfs_parent.o \
> > >                                    xfs_ag_resv.o \
> > >                                    xfs_rmap.o \
> > >                                    xfs_rmap_btree.o \
> > > diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
> > > index 0c9589261990..805aaa5639d2 100644
> > > --- a/fs/xfs/libxfs/xfs_attr.c
> > > +++ b/fs/xfs/libxfs/xfs_attr.c
> > > @@ -886,7 +886,7 @@ xfs_attr_lookup(
> > >         return error;
> > >  }
> > >  
> > > -static int
> > > +int
> > >  xfs_attr_intent_init(
> > >         struct xfs_da_args      *args,
> > >         unsigned int            op_flags,       /* op flag (set or
> > > remove) */
> > > @@ -904,7 +904,7 @@ xfs_attr_intent_init(
> > >  }
> > >  
> > >  /* Sets an attribute for an inode as a deferred operation */
> > > -static int
> > > +int
> > >  xfs_attr_defer_add(
> > >         struct xfs_da_args      *args)
> > >  {
> > > diff --git a/fs/xfs/libxfs/xfs_attr.h b/fs/xfs/libxfs/xfs_attr.h
> > > index b79dae788cfb..0cf23f5117ad 100644
> > > --- a/fs/xfs/libxfs/xfs_attr.h
> > > +++ b/fs/xfs/libxfs/xfs_attr.h
> > > @@ -544,6 +544,7 @@ int xfs_inode_hasattr(struct xfs_inode *ip);
> > >  bool xfs_attr_is_leaf(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_defer_add(struct xfs_da_args *args);
> > >  int xfs_attr_set(struct xfs_da_args *args);
> > >  int xfs_attr_set_iter(struct xfs_attr_intent *attr);
> > >  int xfs_attr_remove_iter(struct xfs_attr_intent *attr);
> > > @@ -552,7 +553,8 @@ bool xfs_attr_namecheck(struct xfs_mount *mp,
> > > const void *name, size_t length,
> > >  int xfs_attr_calc_size(struct xfs_da_args *args, int *local);
> > >  void xfs_init_attr_trans(struct xfs_da_args *args, struct
> > > xfs_trans_res *tres,
> > >                          unsigned int *total);
> > > -
> > > +int xfs_attr_intent_init(struct xfs_da_args *args, unsigned int
> > > op_flags,
> > > +                        struct xfs_attr_intent  **attr);
> > >  /*
> > >   * Check to see if the attr should be upgraded from non-existent
> > > or shortform to
> > >   * single-leaf-block attribute list.
> > > diff --git a/fs/xfs/libxfs/xfs_parent.c
> > > b/fs/xfs/libxfs/xfs_parent.c
> > > new file mode 100644
> > > index 000000000000..dddbf096a4b5
> > > --- /dev/null
> > > +++ b/fs/xfs/libxfs/xfs_parent.c
> > > @@ -0,0 +1,135 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * Copyright (c) 2022 Oracle, Inc.
> > > + * All rights reserved.
> > > + */
> > > +#include "xfs.h"
> > > +#include "xfs_fs.h"
> > > +#include "xfs_format.h"
> > > +#include "xfs_da_format.h"
> > > +#include "xfs_log_format.h"
> > > +#include "xfs_shared.h"
> > > +#include "xfs_trans_resv.h"
> > > +#include "xfs_mount.h"
> > > +#include "xfs_bmap_btree.h"
> > > +#include "xfs_inode.h"
> > > +#include "xfs_error.h"
> > > +#include "xfs_trace.h"
> > > +#include "xfs_trans.h"
> > > +#include "xfs_da_btree.h"
> > > +#include "xfs_attr.h"
> > > +#include "xfs_da_btree.h"
> > > +#include "xfs_attr_sf.h"
> > > +#include "xfs_bmap.h"
> > > +#include "xfs_defer.h"
> > > +#include "xfs_log.h"
> > > +#include "xfs_xattr.h"
> > > +#include "xfs_parent.h"
> > > +
> > > +/*
> > > + * Parent pointer attribute handling.
> > > + *
> > > + * Because the attribute value is a filename component, it will
> > > never be longer
> > > + * than 255 bytes. This means the attribute will always be a local
> > > format
> > > + * attribute as it is xfs_attr_leaf_entsize_local_max() for v5
> > > filesystems will
> > > + * always be larger than this (max is 75% of block size).
> > > + *
> > > + * Creating a new parent attribute will always create a new
> > > attribute - there
> > > + * should never, ever be an existing attribute in the tree for a
> > > new inode.
> > > + * ENOSPC behavior is problematic - creating the inode without the
> > > parent
> > > + * pointer is effectively a corruption, so we allow parent
> > > attribute creation
> > > + * to dip into the reserve block pool to avoid unexpected ENOSPC
> > > errors from
> > > + * occurring.
> > 
> > Hoisting a discussion (that I never replied to; sorry... :( ) from
> > last
> > time around:
> > 
> > > > Shouldn't we increase XFS_LINK_SPACE_RES to avoid this?  The
> > > > reserve
> > > > pool isn't terribly large (8192 blocks) and was really only
> > > > supposed
> > > > to save us from an ENOSPC shutdown if an unwritten extent
> > > > conversion
> > > > in the writeback endio handler needs a few more blocks.
> > > > 
> > > Did you maybe mean XFS_IALLOC_SPACE_RES?  That looks like the macro
> > > that's getting used below in xfs_create
> > 
> > I meant modifying XFS_MKDIR_SPACE_RES and XFS_CREATE_SPACE_RES:
> > 
> > unsigned int
> > xfs_pptr_calc_space_res(
> >         struct xfs_mount        *mp,
> >         unsigned int            namelen)
> > {
> >         /*
> >          * Code lifted from xfs_attr_calc_size, check this for
> >          * correctness since I assumed that a pptr never requires rmt
> >          * blocks...
> >          */
> >         return XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK) +
> >                XFS_NEXTENTADD_SPACE_RES(mp, namelen, XFS_ATTR_FORK);
> > }
> > 
> > unsigned int
> > xfs_create_space_res(
> >         struct xfs_mount        *mp,
> >         unsigned int            namelen)
> > {
> >         unsigned int            ret;
> > 
> >         ret = XFS_IALLOC_SPACE_RES(mp) + XFS_DIRENTER_SPACE_RES(mp,
> > namelen);
> >         if (xfs_has_parent(mp))
> >                 ret += xfs_pptr_calc_space_res(mp, namelen);
> > 
> >         return ret;
> > }
> > 
> > unsigned int
> > xfs_mkdir_space_res(
> >         struct xfs_mount        *mp,
> >         unsigned int            namelen)
> > {
> >         return xfs_create_space_res(mp, namelen);
> > }
> > 
> > (and then change the function case names as necessary)
> > 
> Oooh ok...  So you're saying you want wrappers to XFS_IALLOC_SPACE_RES,
> right?  Do you want these helpers corralled in a common area, or do you
> just want them to be static in the same file where they are used?

Ideally the same place as the macros are #define'd now (as static inline
functions), though if that generates a ton of gcc errors then it might
be time to create an xfs_trans_space.c.

--D

> > > > IOWs, we really ought to ENOSPC at transaction reservation time
> > > > instead of draining the reserve pool.
> > > It looks like we do that in most cases.  I dont actually see rsvd
> > > getting set, other than in xfs_attr_set.  Which isnt used in parent
> > > pointer updating, and should probably be removed.  I suspect it's a
> > > relic of the pre-larp version of the set. So perhaps the comment is
> > > stale and should be removed as well.
> > 
> > The block reservations for create/mkdir/link/unlink all need to be
> > adjusted upwards, which will eliminate the need for the comment.
> > 
> > > + */
> > > +
> > > +
> > > +/* Initializes a xfs_parent_name_rec to be stored as an attribute
> > > name */
> > > +void
> > > +xfs_init_parent_name_rec(
> > > +       struct xfs_parent_name_rec      *rec,
> > > +       struct xfs_inode                *ip,
> > > +       uint32_t                        p_diroffset)
> > > +{
> > > +       xfs_ino_t                       p_ino = ip->i_ino;
> > > +       uint32_t                        p_gen = VFS_I(ip)-
> > > >i_generation;
> > > +
> > > +       rec->p_ino = cpu_to_be64(p_ino);
> > > +       rec->p_gen = cpu_to_be32(p_gen);
> > > +       rec->p_diroffset = cpu_to_be32(p_diroffset);
> > > +}
> > > +
> > > +/* Initializes a xfs_parent_name_irec from an xfs_parent_name_rec
> > > */
> > > +void
> > > +xfs_init_parent_name_irec(
> > > +       struct xfs_parent_name_irec     *irec,
> > > +       struct xfs_parent_name_rec      *rec)
> > > +{
> > > +       irec->p_ino = be64_to_cpu(rec->p_ino);
> > > +       irec->p_gen = be32_to_cpu(rec->p_gen);
> > > +       irec->p_diroffset = be32_to_cpu(rec->p_diroffset);
> > > +}
> > > +
> > > +int
> > > +xfs_parent_init(
> > > +       xfs_mount_t                     *mp,
> > 
> > Nit: typedef usage.
> Will fix
> > 
> > Everything else below here looks good though. :)
> > 
> Thanks for the reviews!
> 
> Allison
> > --D
> > 
> > > +       struct xfs_parent_defer         **parentp)
> > > +{
> > > +       struct xfs_parent_defer         *parent;
> > > +       int                             error;
> > > +
> > > +       if (!xfs_has_parent(mp))
> > > +               return 0;
> > > +
> > > +       error = xfs_attr_grab_log_assist(mp);
> > > +       if (error)
> > > +               return error;
> > > +
> > > +       parent = kzalloc(sizeof(*parent), GFP_KERNEL);
> > > +       if (!parent)
> > > +               return -ENOMEM;
> > > +
> > > +       /* init parent da_args */
> > > +       parent->args.geo = mp->m_attr_geo;
> > > +       parent->args.whichfork = XFS_ATTR_FORK;
> > > +       parent->args.attr_filter = XFS_ATTR_PARENT;
> > > +       parent->args.op_flags = XFS_DA_OP_OKNOENT |
> > > XFS_DA_OP_LOGGED;
> > > +       parent->args.name = (const uint8_t *)&parent->rec;
> > > +       parent->args.namelen = sizeof(struct xfs_parent_name_rec);
> > > +
> > > +       *parentp = parent;
> > > +       return 0;
> > > +}
> > > +
> > > +int
> > > +xfs_parent_defer_add(
> > > +       struct xfs_trans        *tp,
> > > +       struct xfs_parent_defer *parent,
> > > +       struct xfs_inode        *dp,
> > > +       struct xfs_name         *parent_name,
> > > +       xfs_dir2_dataptr_t      diroffset,
> > > +       struct xfs_inode        *child)
> > > +{
> > > +       struct xfs_da_args      *args = &parent->args;
> > > +
> > > +       xfs_init_parent_name_rec(&parent->rec, dp, diroffset);
> > > +       args->hashval = xfs_da_hashname(args->name, args->namelen);
> > > +
> > > +       args->trans = tp;
> > > +       args->dp = child;
> > > +       if (parent_name) {
> > > +               parent->args.value = (void *)parent_name->name;
> > > +               parent->args.valuelen = parent_name->len;
> > > +       }
> > > +
> > > +       return xfs_attr_defer_add(args);
> > > +}
> > > +
> > > +void
> > > +xfs_parent_cancel(
> > > +       xfs_mount_t             *mp,
> > > +       struct xfs_parent_defer *parent)
> > > +{
> > > +       xlog_drop_incompat_feat(mp->m_log);
> > > +       kfree(parent);
> > > +}
> > > +
> > > diff --git a/fs/xfs/libxfs/xfs_parent.h
> > > b/fs/xfs/libxfs/xfs_parent.h
> > > new file mode 100644
> > > index 000000000000..971044458f8a
> > > --- /dev/null
> > > +++ b/fs/xfs/libxfs/xfs_parent.h
> > > @@ -0,0 +1,32 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * Copyright (c) 2022 Oracle, Inc.
> > > + * All Rights Reserved.
> > > + */
> > > +#ifndef        __XFS_PARENT_H__
> > > +#define        __XFS_PARENT_H__
> > > +
> > > +/*
> > > + * Dynamically allocd structure used to wrap the needed data to
> > > pass around
> > > + * the defer ops machinery
> > > + */
> > > +struct xfs_parent_defer {
> > > +       struct xfs_parent_name_rec      rec;
> > > +       struct xfs_da_args              args;
> > > +};
> > > +
> > > +/*
> > > + * Parent pointer attribute prototypes
> > > + */
> > > +void xfs_init_parent_name_rec(struct xfs_parent_name_rec *rec,
> > > +                             struct xfs_inode *ip,
> > > +                             uint32_t p_diroffset);
> > > +void xfs_init_parent_name_irec(struct xfs_parent_name_irec *irec,
> > > +                              struct xfs_parent_name_rec *rec);
> > > +int xfs_parent_init(xfs_mount_t *mp, struct xfs_parent_defer
> > > **parentp);
> > > +int xfs_parent_defer_add(struct xfs_trans *tp, struct
> > > xfs_parent_defer *parent,
> > > +                        struct xfs_inode *dp, struct xfs_name
> > > *parent_name,
> > > +                        xfs_dir2_dataptr_t diroffset, struct
> > > xfs_inode *child);
> > > +void xfs_parent_cancel(xfs_mount_t *mp, struct xfs_parent_defer
> > > *parent);
> > > +
> > > +#endif /* __XFS_PARENT_H__ */
> > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> > > index 6eb264598517..181d6417412e 100644
> > > --- a/fs/xfs/xfs_inode.c
> > > +++ b/fs/xfs/xfs_inode.c
> > > @@ -37,6 +37,8 @@
> > >  #include "xfs_reflink.h"
> > >  #include "xfs_ag.h"
> > >  #include "xfs_log_priv.h"
> > > +#include "xfs_parent.h"
> > > +#include "xfs_xattr.h"
> > >  
> > >  struct kmem_cache *xfs_inode_cache;
> > >  
> > > @@ -949,7 +951,7 @@ xfs_bumplink(
> > >  int
> > >  xfs_create(
> > >         struct user_namespace   *mnt_userns,
> > > -       xfs_inode_t             *dp,
> > > +       struct xfs_inode        *dp,
> > >         struct xfs_name         *name,
> > >         umode_t                 mode,
> > >         dev_t                   rdev,
> > > @@ -961,7 +963,7 @@ xfs_create(
> > >         struct xfs_inode        *ip = NULL;
> > >         struct xfs_trans        *tp = NULL;
> > >         int                     error;
> > > -       bool                    unlock_dp_on_error = false;
> > > +       bool                    unlock_dp_on_error = false;
> > >         prid_t                  prid;
> > >         struct xfs_dquot        *udqp = NULL;
> > >         struct xfs_dquot        *gdqp = NULL;
> > > @@ -969,6 +971,8 @@ xfs_create(
> > >         struct xfs_trans_res    *tres;
> > >         uint                    resblks;
> > >         xfs_ino_t               ino;
> > > +       xfs_dir2_dataptr_t      diroffset;
> > > +       struct xfs_parent_defer *parent = NULL;
> > >  
> > >         trace_xfs_create(dp, name);
> > >  
> > > @@ -995,6 +999,12 @@ xfs_create(
> > >                 tres = &M_RES(mp)->tr_create;
> > >         }
> > >  
> > > +       if (xfs_has_parent(mp)) {
> > > +               error = xfs_parent_init(mp, &parent);
> > > +               if (error)
> > > +                       goto out_release_dquots;
> > > +       }
> > > +
> > >         /*
> > >          * Initially assume that the file does not exist and
> > >          * reserve the resources for that case.  If that is not
> > > @@ -1010,7 +1020,7 @@ xfs_create(
> > >                                 resblks, &tp);
> > >         }
> > >         if (error)
> > > -               goto out_release_dquots;
> > > +               goto drop_incompat;
> > >  
> > >         xfs_ilock(dp, XFS_ILOCK_EXCL | XFS_ILOCK_PARENT);
> > >         unlock_dp_on_error = true;
> > > @@ -1020,6 +1030,7 @@ xfs_create(
> > >          * entry pointing to them, but a directory also the "."
> > > entry
> > >          * pointing to itself.
> > >          */
> > > +       init_xattrs = init_xattrs || xfs_has_parent(mp);
> > >         error = xfs_dialloc(&tp, dp->i_ino, mode, &ino);
> > >         if (!error)
> > >                 error = xfs_init_new_inode(mnt_userns, tp, dp, ino,
> > > mode,
> > > @@ -1034,11 +1045,12 @@ xfs_create(
> > >          * the transaction cancel unlocking dp so don't do it
> > > explicitly in the
> > >          * error path.
> > >          */
> > > -       xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL);
> > > +       xfs_trans_ijoin(tp, dp, 0);
> > >         unlock_dp_on_error = false;
> > >  
> > >         error = xfs_dir_createname(tp, dp, name, ip->i_ino,
> > > -                                  resblks -
> > > XFS_IALLOC_SPACE_RES(mp), NULL);
> > > +                                  resblks -
> > > XFS_IALLOC_SPACE_RES(mp),
> > > +                                  &diroffset);
> > >         if (error) {
> > >                 ASSERT(error != -ENOSPC);
> > >                 goto out_trans_cancel;
> > > @@ -1054,6 +1066,17 @@ xfs_create(
> > >                 xfs_bumplink(tp, dp);
> > >         }
> > >  
> > > +       /*
> > > +        * If we have parent pointers, we need to add the attribute
> > > containing
> > > +        * the parent information now.
> > > +        */
> > > +       if (parent) {
> > > +               error = xfs_parent_defer_add(tp, parent, dp, name,
> > > diroffset,
> > > +                                            ip);
> > > +               if (error)
> > > +                       goto out_trans_cancel;
> > > +       }
> > > +
> > >         /*
> > >          * If this is a synchronous mount, make sure that the
> > >          * create transaction goes to disk before returning to
> > > @@ -1079,6 +1102,7 @@ xfs_create(
> > >  
> > >         *ipp = ip;
> > >         xfs_iunlock(ip, XFS_ILOCK_EXCL);
> > > +       xfs_iunlock(dp, XFS_ILOCK_EXCL | XFS_ILOCK_PARENT);
> > >         return 0;
> > >  
> > >   out_trans_cancel:
> > > @@ -1093,6 +1117,9 @@ xfs_create(
> > >                 xfs_finish_inode_setup(ip);
> > >                 xfs_irele(ip);
> > >         }
> > > + drop_incompat:
> > > +       if (parent)
> > > +               xfs_parent_cancel(mp, parent);
> > >   out_release_dquots:
> > >         xfs_qm_dqrele(udqp);
> > >         xfs_qm_dqrele(gdqp);
> > > diff --git a/fs/xfs/xfs_xattr.c b/fs/xfs/xfs_xattr.c
> > > index c325a28b89a8..d9067c5f6bd6 100644
> > > --- a/fs/xfs/xfs_xattr.c
> > > +++ b/fs/xfs/xfs_xattr.c
> > > @@ -27,7 +27,7 @@
> > >   * they must release the permission by calling
> > > xlog_drop_incompat_feat
> > >   * when they're done.
> > >   */
> > > -static inline int
> > > +int
> > >  xfs_attr_grab_log_assist(
> > >         struct xfs_mount        *mp)
> > >  {
> > > diff --git a/fs/xfs/xfs_xattr.h b/fs/xfs/xfs_xattr.h
> > > index 2b09133b1b9b..3fd6520a4d69 100644
> > > --- a/fs/xfs/xfs_xattr.h
> > > +++ b/fs/xfs/xfs_xattr.h
> > > @@ -7,6 +7,7 @@
> > >  #define __XFS_XATTR_H__
> > >  
> > >  int xfs_attr_change(struct xfs_da_args *args);
> > > +int xfs_attr_grab_log_assist(struct xfs_mount *mp);
> > >  
> > >  extern const struct xattr_handler *xfs_xattr_handlers[];
> > >  
> > > -- 
> > > 2.25.1
> > > 
> 

  reply	other threads:[~2022-09-26 23:54 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-22  5:44 [PATCH v3 00/26] Parent Pointers allison.henderson
2022-09-22  5:44 ` [PATCH v3 01/26] xfs: Add new name to attri/d allison.henderson
2022-09-23 18:53   ` Darrick J. Wong
2022-09-23 20:43     ` Allison Henderson
2022-09-22  5:44 ` [PATCH v3 02/26] xfs: Increase XFS_DEFER_OPS_NR_INODES to 5 allison.henderson
2022-09-23 19:02   ` Darrick J. Wong
2022-09-23 20:45     ` Allison Henderson
2022-09-22  5:44 ` [PATCH v3 03/26] xfs: Hold inode locks in xfs_ialloc allison.henderson
2022-09-22  5:44 ` [PATCH v3 04/26] xfs: Hold inode locks in xfs_trans_alloc_dir allison.henderson
2022-09-23 19:04   ` Darrick J. Wong
2022-09-23 20:44     ` Allison Henderson
2022-09-22  5:44 ` [PATCH v3 05/26] xfs: Hold inode locks in xfs_rename allison.henderson
2022-09-23 19:21   ` Darrick J. Wong
2022-09-23 20:44     ` Allison Henderson
2022-09-22  5:44 ` [PATCH v3 06/26] xfs: Expose init_xattrs in xfs_create_tmpfile allison.henderson
2022-09-23 19:25   ` Darrick J. Wong
2022-09-23 20:45     ` Allison Henderson
2022-09-23 21:18       ` Darrick J. Wong
2022-09-22  5:44 ` [PATCH v3 07/26] xfs: get directory offset when adding directory name allison.henderson
2022-09-22  5:44 ` [PATCH v3 08/26] xfs: get directory offset when removing " allison.henderson
2022-09-22  5:44 ` [PATCH v3 09/26] xfs: get directory offset when replacing a " allison.henderson
2022-09-22  5:44 ` [PATCH v3 10/26] xfs: add parent pointer support to attribute code allison.henderson
2022-09-22  5:44 ` [PATCH v3 11/26] xfs: define parent pointer xattr format allison.henderson
2022-09-22  5:44 ` [PATCH v3 12/26] xfs: Add xfs_verify_pptr allison.henderson
2022-09-22  5:44 ` [PATCH v3 13/26] xfs: extend transaction reservations for parent attributes allison.henderson
2022-09-23 20:17   ` Darrick J. Wong
2022-09-23 23:53     ` Allison Henderson
2022-09-26 23:53       ` Darrick J. Wong
2022-09-27 20:04         ` Allison Henderson
2022-09-27 20:44           ` Darrick J. Wong
2022-09-22  5:44 ` [PATCH v3 14/26] xfs: parent pointer attribute creation allison.henderson
2022-09-23 21:11   ` Darrick J. Wong
2022-09-26 21:48     ` Allison Henderson
2022-09-26 23:54       ` Darrick J. Wong [this message]
2022-09-27 20:10         ` Allison Henderson
2022-09-22  5:44 ` [PATCH v3 15/26] xfs: add parent attributes to link allison.henderson
2022-09-23 20:31   ` Darrick J. Wong
2022-09-26 21:49     ` Allison Henderson
2022-09-26 23:55       ` Darrick J. Wong
2022-09-22  5:44 ` [PATCH v3 16/26] xfs: add parent attributes to symlink allison.henderson
2022-09-23 21:16   ` Darrick J. Wong
2022-09-26 21:48     ` Allison Henderson
2022-09-22  5:44 ` [PATCH v3 17/26] xfs: remove parent pointers in unlink allison.henderson
2022-09-23 21:22   ` Darrick J. Wong
2022-09-26 21:49     ` Allison Henderson
2022-09-22  5:44 ` [PATCH v3 18/26] xfs: Add parent pointers to xfs_cross_rename allison.henderson
2022-09-23 21:52   ` Darrick J. Wong
2022-09-26 21:50     ` Allison Henderson
2022-09-22  5:44 ` [PATCH v3 19/26] xfs: Indent xfs_rename allison.henderson
2022-09-23 21:22   ` Darrick J. Wong
2022-09-26 21:49     ` Allison Henderson
2022-09-22  5:44 ` [PATCH v3 20/26] xfs: Add parent pointers to rename allison.henderson
2022-09-23 22:08   ` Darrick J. Wong
2022-09-26 21:50     ` Allison Henderson
2022-09-22  5:44 ` [PATCH v3 21/26] xfs: Add the parent pointer support to the superblock version 5 allison.henderson
2022-09-22  5:44 ` [PATCH v3 22/26] xfs: Add helper function xfs_attr_list_context_init allison.henderson
2022-09-22  5:44 ` [PATCH v3 23/26] xfs: Filter XFS_ATTR_PARENT for getfattr allison.henderson
2022-09-22 16:55   ` Allison Henderson
2022-09-23 21:45   ` Darrick J. Wong
2022-09-26 21:49     ` Allison Henderson
2022-09-27 18:32       ` Darrick J. Wong
2022-09-28 18:22         ` Allison Henderson
2022-09-28  1:13   ` [xfs] b73248c4ee: xfstests.xfs.269.fail kernel test robot
2022-09-28  1:13     ` kernel test robot
2022-09-22  5:44 ` [PATCH v3 24/26] xfs: Add parent pointer ioctl allison.henderson
2022-09-22 14:02   ` kernel test robot
2022-09-24  0:30   ` Darrick J. Wong
2022-09-26 21:50     ` Allison Henderson
2022-09-27 18:34       ` Darrick J. Wong
2022-09-22  5:44 ` [PATCH v3 25/26] xfs: fix unit conversion error in xfs_log_calc_max_attrsetm_res allison.henderson
2022-09-23 21:47   ` Darrick J. Wong
2022-09-26 21:50     ` Allison Henderson
2022-09-27  0:02       ` Darrick J. Wong
2022-09-22  5:44 ` [PATCH v3 26/26] xfs: drop compatibility minimum log size computations for reflink allison.henderson
2022-09-23 21:48   ` Darrick J. Wong
2022-09-26 21:50     ` 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=YzI7x64KUTdu1fWq@magnolia \
    --to=djwong@kernel.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.