• Eric Sandeen's avatar
    [PATCH] jbd2: journal_dirty_data re-check for unmapped buffers · 9b57988d
    Eric Sandeen authored
    When running several fsx's and other filesystem stress tests, we found
    cases where an unmapped buffer was still being sent to submit_bh by the
    ext3 dirty data journaling code.
    
    I saw this happen in two ways, both related to another thread doing a
    truncate which would unmap the buffer in question.
    
    Either we would get into journal_dirty_data with a bh which was already
    unmapped (although journal_dirty_data_fn had checked for this earlier, the
    state was not locked at that point), or it would get unmapped in the middle
    of journal_dirty_data when we dropped locks to call sync_dirty_buffer.
    
    By re-checking for mapped state after we've acquired the bh state lock, we
    should avoid these races.  If we find a buffer which is no longer mapped,
    we essentially ignore it, because journal_unmap_buffer has already decided
    that this buffer can go away.
    
    I've also added tracepoints in these two cases, and made a couple other
    tracepoint changes that I found useful in debugging this.
    Signed-off-by: default avatarEric Sandeen <esandeen@redhat.com>
    Cc: <linux-ext4@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    9b57988d
transaction.c 62 KB