• Stephen C. Tweedie's avatar
    [PATCH] ext3: handle attempted double-delete of metadata. · a3192788
    Stephen C. Tweedie authored
    This patch improves ext3's ability to deal with corruption on-disk.  If we
    try to delete a metadata block twice, we confuse ext3's internal revoke
    error-checking, resulting in a BUG().  But this can occur in practice due
    to a corrupt indirect block, so we should attempt to fail gracefully.
    
    Downgrade the assert failure to a JH_EXPECT_BH failure, and return EIO when
    it occurs.
    
    This is easily reproduced with a sample ext3 fs image containing an inode
    which references the same indirect block more than once.  Deleting that
    inode will BUG() an unfixed kernel with:
    
    Assertion failure in journal_revoke() at fs/jbd/revoke.c:379:
    "!buffer_revoked(bh)"
    
    With the fix, ext3 recovers gracefully.
    Signed-off-by: default avatarStephen Tweedie <sct@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    a3192788
revoke.c 19.9 KB