• Jan Kara's avatar
    ext3: fix data=journal fast mount/umount hang · e6436921
    Jan Kara authored
    In data=journal mode, if we unmount the file system before a
    transaction has a chance to complete, when the journal inode is being
    evicted, we can end up calling into log_wait_commit() for the
    last transaction, after the journalling machinery has been shut down.
    That triggers the WARN_ONCE in __log_start_commit().
    
    Arguably we should adjust ext3_should_journal_data() to return FALSE
    for the journal inode, but the only place it matters is
    ext3_evict_inode(), and so it's to save a bit of CPU time, and to make
    the patch much more obviously correct by inspection(tm), we'll fix it
    by explicitly not trying to waiting for a journal commit when we are
    evicting the journal inode, since it's guaranteed to never succeed in
    this case.
    
    This can be easily replicated via:
    
         mount -t ext3 -o data=journal /dev/vdb /vdb ; umount /vdb
    
    This is a port of ext4 fix from Ted Ts'o.
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    e6436921
inode.c 106 KB