• Gabriel Krisman Bertazi's avatar
    f2fs: Return EOF on unaligned end of file DIO read · 20d0a107
    Gabriel Krisman Bertazi authored
    Reading past end of file returns EOF for aligned reads but -EINVAL for
    unaligned reads on f2fs.  While documentation is not strict about this
    corner case, most filesystem returns EOF on this case, like iomap
    filesystems.  This patch consolidates the behavior for f2fs, by making
    it return EOF(0).
    
    it can be verified by a read loop on a file that does a partial read
    before EOF (A file that doesn't end at an aligned address).  The
    following code fails on an unaligned file on f2fs, but not on
    btrfs, ext4, and xfs.
    
      while (done < total) {
        ssize_t delta = pread(fd, buf + done, total - done, off + done);
        if (!delta)
          break;
        ...
      }
    
    It is arguable whether filesystems should actually return EOF or
    -EINVAL, but since iomap filesystems support it, and so does the
    original DIO code, it seems reasonable to consolidate on that.
    Signed-off-by: default avatarGabriel Krisman Bertazi <krisman@collabora.com>
    Reviewed-by: default avatarChao Yu <yuchao0@huawei.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    20d0a107
data.c 97.7 KB