]> git.baikalelectronics.ru Git - kernel.git/commit
f2fs: Return EOF on unaligned end of file DIO read
authorGabriel Krisman Bertazi <krisman@collabora.com>
Wed, 19 Aug 2020 20:07:31 +0000 (16:07 -0400)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 9 Sep 2020 03:31:33 +0000 (20:31 -0700)
commit5a6f1aba6bf91695ecf8017371e93f7b3c7f7fa5
tree905c81ff334da88e122430b27bc3e554612c6637
parenta424ed0a0363b167ee055458822262ebd05d4140
f2fs: Return EOF on unaligned end of file DIO read

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: Gabriel Krisman Bertazi <krisman@collabora.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/data.c