• Dave Chinner's avatar
    xfs: separate CIL commit record IO · a79b28c2
    Dave Chinner authored
    To allow for iclog IO device cache flush behaviour to be optimised,
    we first need to separate out the commit record iclog IO from the
    rest of the checkpoint so we can wait for the checkpoint IO to
    complete before we issue the commit record.
    
    This separation is only necessary if the commit record is being
    written into a different iclog to the start of the checkpoint as the
    upcoming cache flushing changes requires completion ordering against
    the other iclogs submitted by the checkpoint.
    
    If the entire checkpoint and commit is in the one iclog, then they
    are both covered by the one set of cache flush primitives on the
    iclog and hence there is no need to separate them for ordering.
    
    Otherwise, we need to wait for all the previous iclogs to complete
    so they are ordered correctly and made stable by the REQ_PREFLUSH
    that the commit record iclog IO issues. This guarantees that if a
    reader sees the commit record in the journal, they will also see the
    entire checkpoint that commit record closes off.
    
    This also provides the guarantee that when the commit record IO
    completes, we can safely unpin all the log items in the checkpoint
    so they can be written back because the entire checkpoint is stable
    in the journal.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: default avatarChandan Babu R <chandanrlinux@gmail.com>
    Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarAllison Henderson <allison.henderson@oracle.com>
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    a79b28c2
xfs_log_cil.c 38.3 KB