VZ 7 kernel compat: introduce ITER-enabled .direct_IO() via IOVECs
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 Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Konstantin Khorenko <khorenko@virtuozzo.com> Closes #11410 Closes #11411
This commit is contained in:
parent
808e681238
commit
064c2cf40e
|
@ -463,7 +463,7 @@ zpl_direct_IO(int rw, struct kiocb *kiocb, struct iov_iter *iter, loff_t pos)
|
||||||
#error "Unknown direct IO interface"
|
#error "Unknown direct IO interface"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else
|
#else /* HAVE_VFS_RW_ITERATE */
|
||||||
|
|
||||||
#if defined(HAVE_VFS_DIRECT_IO_IOVEC)
|
#if defined(HAVE_VFS_DIRECT_IO_IOVEC)
|
||||||
static ssize_t
|
static ssize_t
|
||||||
|
@ -475,6 +475,19 @@ zpl_direct_IO(int rw, struct kiocb *kiocb, const struct iovec *iov,
|
||||||
else
|
else
|
||||||
return (zpl_aio_read(kiocb, iov, nr_segs, pos));
|
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
|
#else
|
||||||
#error "Unknown direct IO interface"
|
#error "Unknown direct IO interface"
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue