Skip to content
  • Ryan Ding's avatar
    ocfs2: use c_new to indicate newly allocated extents · b46637d5
    Ryan Ding authored
    
    
    To support direct io in ocfs2_write_begin_nolock & ocfs2_write_end_nolock.
    
    There is a problem in ocfs2's direct io implement: if system crashed
    after extents allocated, and before data return, we will get a extent
    with dirty data on disk.  This problem violate the journal=order
    semantics, which means meta changes take effect after data written to
    disk.  To resolve this issue, direct write can use the UNWRITTEN flag to
    describe a extent during direct data writeback.  The direct write
    procedure should act in the following order:
    
    phase 1: alloc extent with UNWRITTEN flag
    phase 2: submit direct data to disk, add zero page to page cache
    phase 3: clear UNWRITTEN flag when data has been written to disk
    
    This patch is to change the 'c_unwritten' member of
    ocfs2_write_cluster_desc to 'c_clear_unwritten'.  Means whether to clear
    the unwritten flag.  It do not care if a extent is allocated or not.
    And use 'c_new' to specify a newly allocated extent.  So the direct io
    procedure can use c_clear_unwritten to control the UNWRITTEN bit on
    extent.
    
    Signed-off-by: default avatarRyan Ding <ryan.ding@oracle.com>
    Reviewed-by: default avatarJunxiao Bi <junxiao.bi@oracle.com>
    Cc: Joseph Qi <joseph.qi@huawei.com>
    Cc: Mark Fasheh <mfasheh@suse.de>
    Cc: Joel Becker <jlbec@evilplan.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b46637d5