switch (vio->vui_io_subtype) {
case IO_NORMAL:
vio->vui_iter = args->u.normal.via_iter;
-#ifndef HAVE_FILE_OPERATIONS_READ_WRITE_ITER
- vio->vui_tot_nrsegs = vio->vui_iter->nr_segs;
-#endif /* !HAVE_FILE_OPERATIONS_READ_WRITE_ITER */
vio->vui_iocb = args->u.normal.via_iocb;
/* Direct IO reads must also take range lock,
* or multiple reads will try to work on the same pages
*ppos = io->u.ci_wr.wr.crw_pos; /* for splice */
/* prepare IO restart */
- if (count > 0 && args->via_io_subtype == IO_NORMAL) {
+ if (count > 0 && args->via_io_subtype == IO_NORMAL)
args->u.normal.via_iter = vio->vui_iter;
-#ifndef HAVE_FILE_OPERATIONS_READ_WRITE_ITER
- args->u.normal.via_iter->nr_segs = vio->vui_tot_nrsegs;
-#endif /* !HAVE_FILE_OPERATIONS_READ_WRITE_ITER */
- }
}
GOTO(out, rc);
out:
static ssize_t ll_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
unsigned long nr_segs, loff_t pos)
{
- struct iovec *local_iov;
struct iov_iter to;
size_t iov_count;
ssize_t result;
if (result)
RETURN(result);
- OBD_ALLOC(local_iov, sizeof(*iov) * nr_segs);
- if (local_iov == NULL)
- RETURN(-ENOMEM);
-
- memcpy(local_iov, iov, sizeof(*iov) * nr_segs);
-
# ifdef HAVE_IOV_ITER_INIT_DIRECTION
- iov_iter_init(&to, READ, local_iov, nr_segs, iov_count);
+ iov_iter_init(&to, READ, iov, nr_segs, iov_count);
# else /* !HAVE_IOV_ITER_INIT_DIRECTION */
- iov_iter_init(&to, local_iov, nr_segs, iov_count, 0);
+ iov_iter_init(&to, iov, nr_segs, iov_count, 0);
# endif /* HAVE_IOV_ITER_INIT_DIRECTION */
result = ll_file_read_iter(iocb, &to);
- OBD_FREE(local_iov, sizeof(*iov) * nr_segs);
RETURN(result);
}
static ssize_t ll_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
unsigned long nr_segs, loff_t pos)
{
- struct iovec *local_iov;
struct iov_iter from;
size_t iov_count;
ssize_t result;
if (result)
RETURN(result);
- OBD_ALLOC(local_iov, sizeof(*iov) * nr_segs);
- if (local_iov == NULL)
- RETURN(-ENOMEM);
-
- memcpy(local_iov, iov, sizeof(*iov) * nr_segs);
-
# ifdef HAVE_IOV_ITER_INIT_DIRECTION
- iov_iter_init(&from, WRITE, local_iov, nr_segs, iov_count);
+ iov_iter_init(&from, WRITE, iov, nr_segs, iov_count);
# else /* !HAVE_IOV_ITER_INIT_DIRECTION */
- iov_iter_init(&from, local_iov, nr_segs, iov_count, 0);
+ iov_iter_init(&from, iov, nr_segs, iov_count, 0);
# endif /* HAVE_IOV_ITER_INIT_DIRECTION */
result = ll_file_write_iter(iocb, &from);
- OBD_FREE(local_iov, sizeof(*iov) * nr_segs);
-
RETURN(result);
}