From: Allison Henderson <allison.henderson@oracle.com>
To: linux-xfs@vger.kernel.org
Subject: [PATCH v8 00/28] Parent Pointers v8
Date: Tue, 28 Aug 2018 12:22:13 -0700 [thread overview]
Message-ID: <1535484161-11059-1-git-send-email-allison.henderson@oracle.com> (raw)
Hi all,
This is the 8th version of parent pointer attributes for xfs. The goal of
this patch set is to add a parent pointer attribute to each inode. The
attribute name containing the parent inode, generation, and directory offset,
while the attribute value contains the file name. This feature will enable
future optimizations for online scrub, or any other feature that could make
use of quickly deriving an inodes path from the mount point. This set also
introduces deferred attribute operations, though it is currently only used by
the new parent pointer code.
Some points of interest since v7:
I've integrated most of the feedback provided on v7 and done a lot of
stabilizing. In the last version, I had plumbed in a "roll_trans" boolean
into the attribute routines to prevent transactions from being rolled during the
defer finish. Some concerns were raised in the reviews because this caused
attribute operations to become one large transaction. The new proposal
was to have the attribute code periodically return EAGAIN to get the defer
finish routine to cycle out the transaction.
So in this solution setting an attribute is broken into 3 transactions.
I'm thinking that ideally it should send back the EAGAIN where ever the
existing code used to roll the transaction, but that gets more complex
since they're nested in sub functions. So I wanted to see what people
thought of this implementation first before proceeding any further.
This design has the following complexities that I think should be considered:
The attribute routines tend to pass around structures like xfs_da_args, and
xfs_buf (for holding and releasing leaf buffers). These structures need to
remain instantiated across the EAGAIN returns until the entire attribute
operation is complete. Additionally, this solution adds a state machine to
keep track of where to resume executing before we bailed out with the EAGAIN.
At the moment, I've put these items in the xfs_attr_item structure (patch 10).
Since the defer finish routine passes it back through through the
*_finish_item callback, xfs_attr_finish_item can plumb them back in from there
(patch 11). This works for now though maybe not the most appropriate place to
put it? Maybe we can move it if people have opinions about it.
Also, since this solution alters the behavior of the attribute set and remove
sub-routines, normal attribute operations have been made to use delayed
operations the same way parent pointers do. However, since delayed operations
cant return error codes, we need to take care of any condition that would
normally return an error to the user. For example ENOATTR if trying to remove
a non existent attribute. For this reason, all such error conditions need to
be resolved before calling the delayed operation. So I've added some extra
routines to check for that in xfs_attr_remove (added in patch 9).
I struggled a little with how to present this set in a way that broke the logic
down into manageable sized patches. In this solution, I chose to keep the
roll_trans boolean temporarily (patch 6), and then remove it later (in patch 12)
after all the code paths have been made to pass a false value. I thought this
helped to break up the changes into smaller patches without having to deal with
all affected code paths at once. Maybe if people are comfortable with the
changes going on in 6 though 12, we could consider collapsing them together
later.
For the most part I would appreciate review focus on patches 6 though 12,
since that is where most of the activity has been this for the revision.
Folks are certainly welcome to pour through the rest of it, but I know
it's a lot. I've tried to arrange the set such that 1-12 sets up delayed
attributes, and 13-28 adds the parent pointers. I don't have the xfsprogs
side just yet because this set is sitting a little upstream from where
xfsprogs is ATM and it had quite a few conflicts trying to sync it with
xfsprogs. So I'm just going to wait a bit for now until that catches up.
As always, comments and feedback are appreciated. Thank you!
Allison Henderson (19):
xfs: Move fs/xfs/xfs_attr.h to fs/xfs/libxfs/xfs_attr.h
xfs: Add helper function xfs_attr_try_sf_addname
xfs: Add attibute set and helper functions
xfs: Add attibute remove and helper functions
xfs: Hold inode locks in xfs_ialloc
xfs: Add trans toggle to attr routines
xfs: Set up infastructure for deferred attribute operations
xfs: Add xfs_attr_set_deferred and xfs_attr_remove_deferred
xfs: Add xfs_has_attr and subroutines
xfs: Add attr context to log item
xfs: Roll delayed attr operations by returning EAGAIN
xfs: Remove roll_trans boolean
xfs: Remove all strlen calls in all xfs_attr_* functions for attr
names.
xfs: Add parent pointers to rename
xfs: Add the parent pointer support to the superblock version 5.
xfs: Add helper function xfs_attr_list_context_init
xfs: Increase XFS_DEFER_OPS_NR_INODES to 4
xfs: Add parent pointer ioctl
xfs: Add delayed attributes error tag
Dave Chinner (5):
xfs: define parent pointer xattr format
xfs: extent transaction reservations for parent attributes
xfs: parent pointer attribute creation
xfs: add parent attributes to link
xfs: remove parent pointers in unlink
Mark Tinguely (4):
xfs: get directory offset when adding directory name
xfs: get directory offset when removing directory name
xfs: get directory offset when replacing a directory name
xfs: add parent pointer support to attribute code
fs/xfs/Makefile | 4 +
fs/xfs/libxfs/xfs_attr.c | 496 ++++++++++++++++++++++-----------
fs/xfs/libxfs/xfs_attr.h | 203 ++++++++++++++
fs/xfs/libxfs/xfs_attr_leaf.c | 49 +++-
fs/xfs/libxfs/xfs_attr_leaf.h | 3 +-
fs/xfs/libxfs/xfs_attr_remote.c | 20 --
fs/xfs/libxfs/xfs_bmap.c | 49 ++--
fs/xfs/libxfs/xfs_bmap.h | 1 +
fs/xfs/libxfs/xfs_da_btree.h | 1 +
fs/xfs/libxfs/xfs_da_format.h | 37 ++-
fs/xfs/libxfs/xfs_defer.h | 1 +
fs/xfs/libxfs/xfs_dir2.c | 21 +-
fs/xfs/libxfs/xfs_dir2.h | 7 +-
fs/xfs/libxfs/xfs_dir2_block.c | 9 +-
fs/xfs/libxfs/xfs_dir2_leaf.c | 8 +-
fs/xfs/libxfs/xfs_dir2_node.c | 8 +-
fs/xfs/libxfs/xfs_dir2_sf.c | 6 +
fs/xfs/libxfs/xfs_errortag.h | 4 +-
fs/xfs/libxfs/xfs_format.h | 10 +-
fs/xfs/libxfs/xfs_fs.h | 43 +++
fs/xfs/libxfs/xfs_log_format.h | 44 ++-
fs/xfs/libxfs/xfs_parent.c | 111 ++++++++
fs/xfs/libxfs/xfs_parent.h | 37 +++
fs/xfs/libxfs/xfs_sb.c | 2 +
fs/xfs/libxfs/xfs_trans_resv.c | 111 ++++++--
fs/xfs/libxfs/xfs_trans_resv.h | 1 +
fs/xfs/libxfs/xfs_types.h | 1 +
fs/xfs/scrub/common.c | 2 +
fs/xfs/xfs_acl.c | 14 +-
fs/xfs/xfs_attr.h | 148 ----------
fs/xfs/xfs_attr_item.c | 598 ++++++++++++++++++++++++++++++++++++++++
fs/xfs/xfs_attr_item.h | 114 ++++++++
fs/xfs/xfs_attr_list.c | 75 +++--
fs/xfs/xfs_error.c | 3 +
fs/xfs/xfs_inode.c | 159 ++++++++---
fs/xfs/xfs_ioctl.c | 101 ++++++-
fs/xfs/xfs_ioctl32.c | 2 +
fs/xfs/xfs_iops.c | 7 +-
fs/xfs/xfs_log_recover.c | 172 ++++++++++++
fs/xfs/xfs_ondisk.h | 6 +
fs/xfs/xfs_parent_utils.c | 152 ++++++++++
fs/xfs/xfs_parent_utils.h | 32 +++
fs/xfs/xfs_qm.c | 1 +
fs/xfs/xfs_super.c | 5 +
fs/xfs/xfs_symlink.c | 6 +-
fs/xfs/xfs_trans.h | 16 +-
fs/xfs/xfs_trans_attr.c | 275 ++++++++++++++++++
fs/xfs/xfs_xattr.c | 11 +-
48 files changed, 2700 insertions(+), 486 deletions(-)
create mode 100644 fs/xfs/libxfs/xfs_attr.h
create mode 100644 fs/xfs/libxfs/xfs_parent.c
create mode 100644 fs/xfs/libxfs/xfs_parent.h
delete mode 100644 fs/xfs/xfs_attr.h
create mode 100644 fs/xfs/xfs_attr_item.c
create mode 100644 fs/xfs/xfs_attr_item.h
create mode 100644 fs/xfs/xfs_parent_utils.c
create mode 100644 fs/xfs/xfs_parent_utils.h
create mode 100644 fs/xfs/xfs_trans_attr.c
--
2.7.4
next reply other threads:[~2018-08-28 23:17 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-28 19:22 Allison Henderson [this message]
2018-08-28 19:22 ` [PATCH v8 01/28] xfs: Move fs/xfs/xfs_attr.h to fs/xfs/libxfs/xfs_attr.h Allison Henderson
2018-08-28 19:22 ` [PATCH v8 02/28] xfs: Add helper function xfs_attr_try_sf_addname Allison Henderson
2018-08-28 19:22 ` [PATCH v8 03/28] xfs: Add attibute set and helper functions Allison Henderson
2018-08-28 19:22 ` [PATCH v8 04/28] xfs: Add attibute remove " Allison Henderson
2018-08-28 19:22 ` [PATCH v8 05/28] xfs: Hold inode locks in xfs_ialloc Allison Henderson
2018-08-28 19:22 ` [PATCH v8 06/28] xfs: Add trans toggle to attr routines Allison Henderson
2018-08-28 19:22 ` [PATCH v8 07/28] xfs: Set up infastructure for deferred attribute operations Allison Henderson
2018-08-28 19:22 ` [PATCH v8 08/28] xfs: Add xfs_attr_set_deferred and xfs_attr_remove_deferred Allison Henderson
2018-08-28 19:22 ` [PATCH v8 09/28] xfs: Add xfs_has_attr and subroutines Allison Henderson
2018-08-28 19:22 ` [PATCH v8 10/28] xfs: Add attr context to log item Allison Henderson
2018-08-28 19:22 ` [PATCH v8 11/28] xfs: Roll delayed attr operations by returning EAGAIN Allison Henderson
2018-08-28 19:22 ` [PATCH v8 12/28] xfs: Remove roll_trans boolean Allison Henderson
2018-08-28 19:22 ` [PATCH v8 13/28] xfs: Remove all strlen calls in all xfs_attr_* functions for attr names Allison Henderson
2018-08-28 19:22 ` [PATCH v8 14/28] xfs: get directory offset when adding directory name Allison Henderson
2018-08-28 19:22 ` [PATCH v8 15/28] xfs: get directory offset when removing " Allison Henderson
2018-08-28 19:22 ` [PATCH v8 16/28] xfs: get directory offset when replacing a " Allison Henderson
2018-08-28 19:22 ` [PATCH v8 17/28] xfs: add parent pointer support to attribute code Allison Henderson
2018-08-28 19:22 ` [PATCH v8 18/28] xfs: define parent pointer xattr format Allison Henderson
2018-08-28 19:22 ` [PATCH v8 19/28] xfs: extent transaction reservations for parent attributes Allison Henderson
2018-08-28 19:22 ` [PATCH v8 20/28] xfs: parent pointer attribute creation Allison Henderson
2018-08-28 19:22 ` [PATCH v8 21/28] xfs: add parent attributes to link Allison Henderson
2018-08-28 19:22 ` [PATCH v8 22/28] xfs: remove parent pointers in unlink Allison Henderson
2018-08-28 19:22 ` [PATCH v8 23/28] xfs: Add parent pointers to rename Allison Henderson
2018-09-03 3:20 ` Dave Chinner
2018-09-03 5:28 ` Amir Goldstein
2018-09-04 18:31 ` Allison Henderson
2018-09-04 18:31 ` Allison Henderson
2018-08-28 19:22 ` [PATCH v8 24/28] xfs: Add the parent pointer support to the superblock version 5 Allison Henderson
2018-08-28 19:22 ` [PATCH v8 25/28] xfs: Add helper function xfs_attr_list_context_init Allison Henderson
2018-08-28 19:22 ` [PATCH v8 26/28] xfs: Increase XFS_DEFER_OPS_NR_INODES to 4 Allison Henderson
2018-08-28 19:22 ` [PATCH v8 27/28] xfs: Add parent pointer ioctl Allison Henderson
2018-08-28 19:22 ` [PATCH v8 28/28] xfs: Add delayed attributes error tag Allison Henderson
2018-09-03 1:20 ` [PATCH v8 00/28] Parent Pointers v8 Dave Chinner
2018-09-03 1:40 ` Dave Chinner
2018-09-04 18:31 ` Allison Henderson
2018-09-03 5:41 ` Dave Chinner
2018-09-04 18:32 ` 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=1535484161-11059-1-git-send-email-allison.henderson@oracle.com \
--to=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).