• Tahsin Erdogan's avatar
    jbd2: preserve original nofs flag during journal restart · b4709067
    Tahsin Erdogan authored
    When a transaction starts, start_this_handle() saves current
    PF_MEMALLOC_NOFS value so that it can be restored at journal stop time.
    Journal restart is a special case that calls start_this_handle() without
    stopping the transaction. start_this_handle() isn't aware that the
    original value is already stored so it overwrites it with current value.
    
    For instance, a call sequence like below leaves PF_MEMALLOC_NOFS flag set
    at the end:
    
      jbd2_journal_start()
      jbd2__journal_restart()
      jbd2_journal_stop()
    
    Make jbd2__journal_restart() restore the original value before calling
    start_this_handle().
    
    Fixes: 81378da6 ("jbd2: mark the transaction context with the scope GFP_NOFS context")
    Signed-off-by: default avatarTahsin Erdogan <tahsin@google.com>
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    b4709067
transaction.c 79.7 KB