summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2014-02-05 10:22:50 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2014-04-01 23:19:25 -0400
commitc61c70384fad407bfcb066c3fb9271164d630212 (patch)
tree662d34e8b1f7dc18f4d702a30f45aad29a52fda2
parent480402e18def5514c9dc8cb04e3c0e7482ff2b86 (diff)
untangling process_vm_..., part 2
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>
-rw-r--r--mm/process_vm_access.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/mm/process_vm_access.c b/mm/process_vm_access.c
index 7b8d63e6c30b..186ec5db6090 100644
--- a/mm/process_vm_access.c
+++ b/mm/process_vm_access.c
@@ -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);