• Jan Kara's avatar
    [PATCH] jbd: fix commit of ordered data buffers · 3998b930
    Jan Kara authored
    Original commit code assumes, that when a buffer on BJ_SyncData list is
    locked, it is being written to disk.  But this is not true and hence it can
    lead to a potential data loss on crash.  Also the code didn't count with
    the fact that journal_dirty_data() can steal buffers from committing
    transaction and hence could write buffers that no longer belong to the
    committing transaction.  Finally it could possibly happen that we tried
    writing out one buffer several times.
    
    The patch below tries to solve these problems by a complete rewrite of the
    data commit code.  We go through buffers on t_sync_datalist, lock buffers
    needing write out and store them in an array.  Buffers are also immediately
    refiled to BJ_Locked list or unfiled (if the write out is completed).  When
    the array is full or we have to block on buffer lock, we submit all
    accumulated buffers for IO.
    
    [suitable for 2.6.18.x around the 2.6.19-rc2 timeframe]
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Cc: Badari Pulavarty <pbadari@us.ibm.com>
    Cc: <stable@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    3998b930
commit.c 26.5 KB