• Darrick J. Wong's avatar
    xfs: scrub should use ECHRNG to signal that the drain is needed · 88accf17
    Darrick J. Wong authored
    In the previous patch, we added jump labels to the intent drain code so
    that regular filesystem operations need not pay the price of checking
    for someone (scrub) waiting on intents to drain from some part of the
    filesystem when that someone isn't running.
    
    However, I observed that xfs/285 now spends a lot more time pushing the
    AIL from the inode btree scrubber than it used to.  This is because the
    inobt scrubber will try push the AIL to try to get logged inode cores
    written to the filesystem when it sees a weird discrepancy between the
    ondisk inode and the inobt records.  This AIL push is triggered when the
    setup function sees TRY_HARDER is set; and the requisite EDEADLOCK
    return is initiated when the discrepancy is seen.
    
    The solution to this performance slow down is to use a different result
    code (ECHRNG) for scrub code to signal that it needs to wait for
    deferred intent work items to drain out of some part of the filesystem.
    When this happens, set a new scrub state flag (XCHK_NEED_DRAIN) so that
    setup functions will activate the jump label.
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
    88accf17
scrub.c 17.6 KB