Skip to content

Commit

Permalink
Virtuozzo 7 kernel compat: support HAVE_VFS_DIRECT_IO_ITER_RW_OFFSET …
Browse files Browse the repository at this point in the history
…+ no HAVE_VFS_RW_ITERATE case

Virtuozzo 7 kernels starting 3.10.0-1127.18.2.vz7.163.46
have the following configuration:

  * no HAVE_VFS_RW_ITERATE
  * HAVE_VFS_DIRECT_IO_ITER_RW_OFFSET

=> let's add implementation of zpl_direct_IO() via zpl_aio_{read,write}()
in this case.

https://bugs.openvz.org/browse/OVZ-7243

Signed-off-by: Konstantin Khorenko <khorenko@virtuozzo.com>
Closes openzfs#11410
  • Loading branch information
finist0 committed Dec 29, 2020
1 parent 808e681 commit 2bd5614
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion module/os/linux/zfs/zpl_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@ zpl_direct_IO(int rw, struct kiocb *kiocb, struct iov_iter *iter, loff_t pos)
#error "Unknown direct IO interface"
#endif

#else
#else /* HAVE_VFS_RW_ITERATE */

#if defined(HAVE_VFS_DIRECT_IO_IOVEC)
static ssize_t
Expand All @@ -475,6 +475,19 @@ zpl_direct_IO(int rw, struct kiocb *kiocb, const struct iovec *iov,
else
return (zpl_aio_read(kiocb, iov, nr_segs, pos));
}
#elif defined(HAVE_VFS_DIRECT_IO_ITER_RW_OFFSET)
static ssize_t
zpl_direct_IO(int rw, struct kiocb *kiocb, struct iov_iter *iter, loff_t pos)
{
const struct iovec *iovp = iov_iter_iovec(iter);
unsigned long nr_segs = iter->nr_segs;

ASSERT3S(pos, ==, kiocb->ki_pos);
if (rw == WRITE)
return (zpl_aio_write(kiocb, iovp, nr_segs, pos));
else
return (zpl_aio_read(kiocb, iovp, nr_segs, pos));
}
#else
#error "Unknown direct IO interface"
#endif
Expand Down

0 comments on commit 2bd5614

Please sign in to comment.