Hi all, This set is a subset of a larger series for Dealyed Attributes. Which is a subset of a yet larger series for parent pointers. Delayed attributes allow attribute operations (set and remove) to be logged and committed in the same way that other delayed operations do. This allows more complex operations (like parent pointers) to be broken up into multiple smaller transactions. To do this, the existing attr operations must be modified to operate as a delayed operation. This means that they cannot roll, commit, or finish transactions. Instead, they return -EAGAIN to allow the calling function to handle the transaction. In this series, we focus on only the delayed attribute portion. We will introduce parent pointers in a later set. The set as a whole is a bit much to digest at once, so I usually send out the smaller sub series to reduce reviewer burn out. But the entire extended series is visible through the included github links. Updates since v16: Mostly just review feed back from the previous revision. I've tracked changes below to help reviews recall the changes discussed xfs: Reverse apply 72b97ea40d No change xfs: Add xfs_attr_node_remove_cleanup No change xfs: Hoist xfs_attr_set_shortform No change xfs: Add helper xfs_attr_set_fmt No change xfs: Separate xfs_attr_node_addname and xfs_attr_node_addname_work No change xfs: Add helper xfs_attr_node_addname_find_attr No change xfs: Hoist xfs_attr_node_addname Moved the xfs_da_state_free in xfs_attr_set_args into xfs_attr_node_addname to fix memleak xfs: Hoist xfs_attr_leaf_addname Removed trace_xfs_attr_leaf_addname from trace.h xfs: Hoist node transaction handling No change xfs: Add delay ready attr remove routines Comment for xfs_attr_trans_roll updated Return error from xfs_attr_node_removename_setup call Changed breaks to gotos in xfs_attr_remove_iter Moved xfs_attr_node_removename_setup into the uninit state Added extra state XFS_DAS_CLNUP Diagram updated xfs: Add delay ready attr set routines Added a xfs_trans_brelse in xfs_attr_set_args when xfs_attr_trans_roll fails Fixed misc nits with if/else bracket consistency Move XFS_DAS_FOUND_LBLK state assignment in to leaf scope Add extra -EAGAIN after calls to __xfs_at__xfs_attr_rmtval_remove Added extra state XFS_DAS_RD_LEAF and XFS_DAS_CLR_FLAG Diagram updated This series can be viewed on github here: https://github.com/allisonhenderson/xfs_work/tree/delay_ready_attrs_v17 As well as the extended delayed attribute and parent pointer series: https://github.com/allisonhenderson/xfs_work/tree/delay_ready_attrs_v17_extended And the test cases: https://github.com/allisonhenderson/xfs_work/tree/pptr_xfstestsv2 In order to run the test cases, you will need have the corresponding xfsprogs changes as well. Which can be found here: https://github.com/allisonhenderson/xfs_work/tree/delay_ready_attrs_xfsprogs_v17 https://github.com/allisonhenderson/xfs_work/tree/delay_ready_attrs_xfsprogs_v17_extended To run the xfs attributes tests run: check -g attr To run as delayed attributes run: export MOUNT_OPTIONS="-o delattr" check -g attr To run parent pointer tests: check -g parent I've also made the corresponding updates to the user space side as well, and ported anything they need to seat correctly. Questions, comment and feedback appreciated! Thanks all! Allison Allison Henderson (11): xfs: Reverse apply 72b97ea40d xfs: Add xfs_attr_node_remove_cleanup xfs: Hoist xfs_attr_set_shortform xfs: Add helper xfs_attr_set_fmt xfs: Separate xfs_attr_node_addname and xfs_attr_node_addname_clear_incomplete xfs: Add helper xfs_attr_node_addname_find_attr xfs: Hoist xfs_attr_node_addname xfs: Hoist xfs_attr_leaf_addname xfs: Hoist node transaction handling xfs: Add delay ready attr remove routines xfs: Add delay ready attr set routines fs/xfs/libxfs/xfs_attr.c | 908 ++++++++++++++++++++++++---------------- fs/xfs/libxfs/xfs_attr.h | 401 ++++++++++++++++++ fs/xfs/libxfs/xfs_attr_leaf.c | 2 +- fs/xfs/libxfs/xfs_attr_remote.c | 126 ++++-- fs/xfs/libxfs/xfs_attr_remote.h | 7 +- fs/xfs/xfs_attr_inactive.c | 2 +- fs/xfs/xfs_trace.h | 2 - 7 files changed, 1038 insertions(+), 410 deletions(-) -- 2.7.4