• Darrick J. Wong's avatar
    xfs: allow scanning ranges of the buffer cache for live buffers · 9ed851f6
    Darrick J. Wong authored
    After an online repair, we need to invalidate buffers representing the
    blocks from the old metadata that we're replacing.  It's possible that
    parts of a tree that were previously cached in memory are no longer
    accessible due to media failure or other corruption on interior nodes,
    so repair figures out the old blocks from the reverse mapping data and
    scans the buffer cache directly.
    
    In other words, online fsck needs to find all the live (i.e. non-stale)
    buffers for a range of fsblocks so that it can invalidate them.
    
    Unfortunately, the current buffer cache code triggers asserts if the
    rhashtable lookup finds a non-stale buffer of a different length than
    the key we searched for.  For regular operation this is desirable, but
    for this repair procedure, we don't care since we're going to forcibly
    stale the buffer anyway.  Add an internal lookup flag to avoid the
    assert.  Skip buffers that are already XBF_STALE.
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
    9ed851f6
reap.c 7.82 KB