Skip to content
  • Chao Yu's avatar
    f2fs: report EINVAL for unalignment direct IO · c15e8599
    Chao Yu authored
    
    
    We run ltp testcase with f2fs and obtain a TFAIL in diotest4, the result in
    detail is as fallow:
    
    dio04
    
    <<<test_start>>>
    tag=dio04 stime=1432278894
    cmdline="diotest4"
    contacts=""
    analysis=exit
    <<<test_output>>>
    diotest4    1  TPASS  :  Negative Offset
    diotest4    2  TPASS  :  removed
    diotest4    3  TFAIL  :  diotest4.c:129: write allows odd count.returns 1: Success
    diotest4    4  TFAIL  :  diotest4.c:183: Odd count of read and write
    diotest4    5  TPASS  :  Read beyond the file size
    ......
    
    the result of ext4 with same environment:
    
    dio04
    
    <<<test_start>>>
    tag=dio04 stime=1432259643
    cmdline="diotest4"
    contacts=""
    analysis=exit
    <<<test_output>>>
    diotest4    1  TPASS  :  Negative Offset
    diotest4    2  TPASS  :  removed
    diotest4    3  TPASS  :  Odd count of read and write
    diotest4    4  TPASS  :  Read beyond the file size
    ......
    
    The reason is that when triggering DIO in f2fs, we will return zero value
    in ->direct_IO if writer's buffer offset, file offset and transfer size is
    not alignment to block size of filesystem, resulting in falling back into
    buffered write instead of returning -EINVAL.
    
    This patch fixes that problem by returning correct error number for above
    case, and removing the judgement condition in check_direct_IO to make sure
    the verification will be enabled for direct reader too.
    
    Besides, Jaegeuk Kim pointed out that there is expectional cases we should
    always make direct-io falling back into buffered write, such as dio in
    encrypted file.
    
    Signed-off-by: default avatarYunlei He <heyunlei@huawei.com>
    [Chao Yu make small change and add detail description in commit message]
    Signed-off-by: default avatarChao Yu <chao2.yu@samsung.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    c15e8599