Whamcloud - gitweb
LU-4257 llite: fix up iov_iter implementation
[fs/lustre-release.git] / lustre / llite / file.c
index 258efb8..1fe33f8 100644 (file)
@@ -1069,9 +1069,6 @@ restart:
                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
@@ -1117,12 +1114,8 @@ restart:
                *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:
@@ -1245,7 +1238,6 @@ static int ll_file_get_iov_count(const struct iovec *iov,
 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;
@@ -1255,21 +1247,14 @@ static ssize_t ll_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
        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);
 }
 
@@ -1307,7 +1292,6 @@ static ssize_t ll_file_read(struct file *file, char __user *buf, size_t count,
 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;
@@ -1317,22 +1301,14 @@ static ssize_t ll_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
        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);
 }