• Brian Foster's avatar
    xfs: support embedded dfops in transaction · e021a2e5
    Brian Foster authored
    The dfops structure used by multi-transaction operations is
    typically stored on the stack and carried around by the associated
    transaction. The lifecycle of dfops does not quite match that of the
    transaction, but they are tightly related in that the former depends
    on the latter.
    
    The relationship of these objects is tight enough that we can avoid
    the cumbersome boilerplate code required in most cases to manage
    them separately by just embedding an xfs_defer_ops in the
    transaction itself. This means that a transaction allocation returns
    with an initialized dfops, a transaction commit finishes pending
    deferred items before the tx commit, a transaction cancel cancels
    the dfops before the transaction and a transaction dup operation
    transfers the current dfops state to the new transaction.
    
    The dup operation is slightly complicated by the fact that we can no
    longer just copy a dfops pointer from the old transaction to the new
    transaction. This is solved through a dfops move helper that
    transfers the pending items and other dfops state across the
    transactions. This also requires that transaction rolling code
    always refer to the transaction for the current dfops reference.
    
    Finally, to facilitate incremental conversion to the internal dfops
    and continue to support the current external dfops mode of
    operation, create the new ->t_dfops_internal field with a layer of
    indirection. On allocation, ->t_dfops points to the internal dfops.
    This state is overridden by callers who re-init a local dfops on the
    transaction. Once ->t_dfops is overridden, the external dfops
    reference is maintained as the transaction rolls.
    
    This patch adds the fundamental ability to support an internal
    dfops. All codepaths that perform deferred processing continue to
    override the internal dfops until they are converted over in
    subsequent patches.
    Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarBill O'Donnell <billodo@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    e021a2e5
xfs_defer.h 2.88 KB