Skip to content
  • Ryan Ding's avatar
    ocfs2: record UNWRITTEN extents when populate write desc · 4506cfb6
    Ryan Ding authored
    
    
    To support direct io in ocfs2_write_begin_nolock & ocfs2_write_end_nolock.
    
    There is still one issue in the direct write procedure.
    
    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
    
    When there are 2 direct write A(0~3KB),B(4~7KB) writing to the same
    cluster 0~7KB (cluster size 8KB).  Write request A arrive phase 2 first,
    it will zero the region (4~7KB).  Before request A enter to phase 3,
    request B arrive phase 2, it will zero region (0~3KB).  This is just like
    request B steps request A.
    
    To resolve this issue, we should let request B knows this cluster is already
    under zero, to prevent it from steps the previous write request.
    
    This patch will add function ocfs2_unwritten_check() to do this job.  It
    will record all clusters that are under direct write(it will be recorded
    in the 'ip_unwritten_list' member of inode info), and prevent the later
    direct write writing to the same cluster to do the zero work again.
    
    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>
    4506cfb6