• Dave Chinner's avatar
    xfs: separate out initial attr_set states · e0c41089
    Dave Chinner authored
    We current use XFS_DAS_UNINIT for several steps in the attr_set
    state machine. We use it for setting shortform xattrs, converting
    from shortform to leaf, leaf add, leaf-to-node and leaf add. All of
    these things are essentially known before we start the state machine
    iterating, so we really should separate them out:
    
    XFS_DAS_SF_ADD:
    	- tries to do a shortform add
    	- on success -> done
    	- on ENOSPC converts to leaf, -> XFS_DAS_LEAF_ADD
    	- on error, dies.
    
    XFS_DAS_LEAF_ADD:
    	- tries to do leaf add
    	- on success:
    		- inline attr -> done
    		- remote xattr || REPLACE -> XFS_DAS_FOUND_LBLK
    	- on ENOSPC converts to node, -> XFS_DAS_NODE_ADD
    	- on error, dies
    
    XFS_DAS_NODE_ADD:
    	- tries to do node add
    	- on success:
    		- inline attr -> done
    		- remote xattr || REPLACE -> XFS_DAS_FOUND_NBLK
    	- on error, dies
    
    This makes it easier to understand how the state machine starts
    up and sets us up on the path to further state machine
    simplifications.
    
    This also converts the DAS state tracepoints to use strings rather
    than numbers, as converting between enums and numbers requires
    manual counting rather than just reading the name.
    
    This also introduces a XFS_DAS_DONE state so that we can trace
    successful operation completions easily.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: Allison Henderson<allison.henderson@oracle.com>
    Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
    e0c41089
xfs_attr.c 43.8 KB