• Brian Foster's avatar
    xfs: don't assert fail on non-async buffers on ioacct decrement · 4dd3fd71
    Brian Foster authored
    The buffer I/O accounting mechanism tracks async buffers under I/O.  As
    an optimization, the buffer I/O count is incremented only once on the
    first async I/O for a given hold cycle of a buffer and decremented once
    the buffer is released to the LRU (or freed).
    
    xfs_buf_ioacct_dec() has an ASSERT() check for an XBF_ASYNC buffer, but
    we have one or two corner cases where a buffer can be submitted for I/O
    multiple times via different methods in a single hold cycle. If an async
    I/O occurs first, the I/O count is incremented. If a sync I/O occurs
    before the hold count drops, XBF_ASYNC is cleared by the time the I/O
    count is decremented.
    
    Remove the async assert check from xfs_buf_ioacct_dec() as this is a
    perfectly valid scenario. For the purposes of I/O accounting, we really
    only care about the buffer async state at I/O submission time.
    Discovered-and-analyzed-by: default avatarDave Chinner <david@fromorbit.com>
    Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
    Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
    
    4dd3fd71
xfs_buf.c 47.4 KB