• Mark Fasheh's avatar
    [PATCH] kjournald: missing JFS_UNMOUNT check · cbf0d27a
    Mark Fasheh authored
    It seems that kjournald() may be missing a check of the JFS_UNMOUNT flag
    before calling schedule().  This showed up in testing of OCFS2 recovery
    where our recovery thread would hang in journal_kill_thread() called from
    journal_destroy() because kjournald never got a chance to read the flag to
    shut down before the schedule().
    
    Zach pointed out the missing check which led me to hack up this trivial
    patch.  It's been tested many times now and I have yet to reproduce the
    hang, which was happening very regularly before.
    
    <mild rant>
    I'm guessing that we could really use some wait_event() calls with helper
    functions in, well, most of jbd these days which would make a ton of the
    wait code there vastly cleaner.
    </mild rant>
    
    As for why this doesn't happen in ext3 (or OCFS2 during normal
    mount/unmount of the local nodes journal), I think it may that the specific
    timing of events in the ocfs2 recovery thread exposes a race there.
    Because ocfs2_replay_journal() is only interested in playing back the
    journal, initialization and shutdown happen very quicky with no other
    metadata put into that specific journal.
    Acked-by: default avatar"Stephen C. Tweedie" <sct@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    cbf0d27a
journal.c 53.7 KB