untangling process_vm_..., part 2
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 5 Feb 2014 15:22:50 +0000 (10:22 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 2 Apr 2014 03:19:25 +0000 (23:19 -0400)
move iov to caller's stack frame; the value we assign to it on the
next call of process_vm_rw_pages() is equal to the value it had
when the last time we were leaving process_vm_rw_pages().

drop lvec argument of process_vm_rw_pages() - it's not used anymore.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
mm/process_vm_access.c

index 7b8d63e..186ec5d 100644 (file)
@@ -45,7 +45,7 @@ static int process_vm_rw_pages(struct task_struct *task,
                               unsigned long pa,
                               unsigned long start_offset,
                               unsigned long len,
-                              const struct iovec *lvec,
+                              const struct iovec **iovp,
                               unsigned long lvec_cnt,
                               unsigned long *lvec_current,
                               size_t *lvec_offset,
@@ -60,7 +60,7 @@ static int process_vm_rw_pages(struct task_struct *task,
        int ret;
        ssize_t bytes_to_copy;
        ssize_t rc = 0;
-       const struct iovec *iov = lvec + *lvec_current;
+       const struct iovec *iov = *iovp;
 
        *bytes_copied = 0;
 
@@ -149,6 +149,7 @@ end:
                        put_page(process_pages[j]);
        }
 
+       *iovp = iov;
        return rc;
 }
 
@@ -192,6 +193,7 @@ static int process_vm_rw_single_vec(unsigned long addr,
        unsigned long nr_pages_to_copy;
        unsigned long max_pages_per_loop = PVM_MAX_KMALLOC_PAGES
                / sizeof(struct pages *);
+       const struct iovec *iov = lvec + *lvec_current;
 
        *bytes_copied = 0;
 
@@ -206,7 +208,7 @@ static int process_vm_rw_single_vec(unsigned long addr,
 
                rc = process_vm_rw_pages(task, mm, process_pages, pa,
                                         start_offset, len,
-                                        lvec, lvec_cnt,
+                                        &iov, lvec_cnt,
                                         lvec_current, lvec_offset,
                                         vm_write, nr_pages_to_copy,
                                         &bytes_copied_loop);