• Allison Henderson's avatar
    xfs: Add delay ready attr remove routines · 2b74b03c
    Allison Henderson authored
    This patch modifies the attr remove routines to be delay ready. This
    means they no longer roll or commit transactions, but instead return
    -EAGAIN to have the calling routine roll and refresh the transaction. In
    this series, xfs_attr_remove_args is merged with
    xfs_attr_node_removename become a new function, xfs_attr_remove_iter.
    This new version uses a sort of state machine like switch to keep track
    of where it was when EAGAIN was returned. A new version of
    xfs_attr_remove_args consists of a simple loop to refresh the
    transaction until the operation is completed. A new XFS_DAC_DEFER_FINISH
    flag is used to finish the transaction where ever the existing code used
    to.
    
    Calls to xfs_attr_rmtval_remove are replaced with the delay ready
    version __xfs_attr_rmtval_remove. We will rename
    __xfs_attr_rmtval_remove back to xfs_attr_rmtval_remove when we are
    done.
    
    xfs_attr_rmtval_remove itself is still in use by the set routines (used
    during a rename).  For reasons of preserving existing function, we
    modify xfs_attr_rmtval_remove to call xfs_defer_finish when the flag is
    set.  Similar to how xfs_attr_remove_args does here.  Once we transition
    the set routines to be delay ready, xfs_attr_rmtval_remove is no longer
    used and will be removed.
    
    This patch also adds a new struct xfs_delattr_context, which we will use
    to keep track of the current state of an attribute operation. The new
    xfs_delattr_state enum is used to track various operations that are in
    progress so that we know not to repeat them, and resume where we left
    off before EAGAIN was returned to cycle out the transaction. Other
    members take the place of local variables that need to retain their
    values across multiple function calls.  See xfs_attr.h for a more
    detailed diagram of the states.
    Signed-off-by: default avatarAllison Henderson <allison.henderson@oracle.com>
    Reviewed-by: default avatarChandan Babu R <chandanrlinux@gmail.com>
    Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
    2b74b03c
xfs_attr_remote.c 17.5 KB