• O
    [PATCH] ext3/4: fix J_ASSERT(transaction->t_updates > 0) in journal_stop() · 3e2a532b
    OGAWA Hirofumi 提交于
    A disk generated some I/O error, after it, I hitted
    J_ASSERT(transaction->t_updates > 0) in journal_stop().
    
    It seems to happened on ext3_truncate() path from stack trace. Then,
    maybe the following case may trigger J_ASSERT(transaction->t_updates > 0).
    
    ext3_truncate()
        -> ext3_free_branches()
            -> ext3_journal_test_restart()
    	    -> ext3_journal_restart()
                    -> journal_restart()
                    transaction->t_updates--;
                    /* another process aborted journal */
                        -> start_this_handle()
    		    returns -EROFS without transaction->t_updates++;
    
        -> ext3_journal_stop()
            -> journal_stop()
    	J_ASSERT(transaction->t_updates > 0)
    
    If journal was aborted in middle of journal_restart(), ext3_truncate()
    may trigger J_ASSERT().
    Signed-off-by: NOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
    Cc: <linux-ext4@vger.kernel.org>
    Signed-off-by: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    3e2a532b
transaction.c 61.6 KB