summary refs log tree commit diff
path: root/mm/process_vm_access.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2014-02-05 10:14:01 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2014-04-01 23:19:25 -0400
commit480402e18def5514c9dc8cb04e3c0e7482ff2b86 (patch)
tree905fa58d786565d9ee400102f2d1edfa1e0df1f5 /mm/process_vm_access.c
parentec69557982563c97b3a7d68dd271be5105b83869 (diff)
downloadlinux-480402e18def5514c9dc8cb04e3c0e7482ff2b86.tar.gz
untangling process_vm_..., part 1
we want to massage it to use of iov_iter.  This one is an equivalent
transformation - just introduce a local variable mirroring
lvec + *lvec_current.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'mm/process_vm_access.c')
-rw-r--r--mm/process_vm_access.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/mm/process_vm_access.c b/mm/process_vm_access.c
index fd26d0433509..7b8d63e6c30b 100644
--- a/mm/process_vm_access.c
+++ b/mm/process_vm_access.c
@@ -60,6 +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;
 
 	*bytes_copied = 0;
 
@@ -81,8 +82,10 @@ static int process_vm_rw_pages(struct task_struct *task,
 	     pgs_copied++) {
 		/* Make sure we have a non zero length iovec */
 		while (*lvec_current < lvec_cnt
-		       && lvec[*lvec_current].iov_len == 0)
+		       && iov->iov_len == 0) {
+			iov++;
 			(*lvec_current)++;
+		}
 		if (*lvec_current == lvec_cnt)
 			break;
 
@@ -94,18 +97,18 @@ static int process_vm_rw_pages(struct task_struct *task,
 		bytes_to_copy = min_t(ssize_t, PAGE_SIZE - start_offset,
 				      len - *bytes_copied);
 		bytes_to_copy = min_t(ssize_t, bytes_to_copy,
-				      lvec[*lvec_current].iov_len
+				      iov->iov_len
 				      - *lvec_offset);
 
 		target_kaddr = kmap(process_pages[pgs_copied]) + start_offset;
 
 		if (vm_write)
 			ret = copy_from_user(target_kaddr,
-					     lvec[*lvec_current].iov_base
+					     iov->iov_base
 					     + *lvec_offset,
 					     bytes_to_copy);
 		else
-			ret = copy_to_user(lvec[*lvec_current].iov_base
+			ret = copy_to_user(iov->iov_base
 					   + *lvec_offset,
 					   target_kaddr, bytes_to_copy);
 		kunmap(process_pages[pgs_copied]);
@@ -117,12 +120,13 @@ static int process_vm_rw_pages(struct task_struct *task,
 		}
 		*bytes_copied += bytes_to_copy;
 		*lvec_offset += bytes_to_copy;
-		if (*lvec_offset == lvec[*lvec_current].iov_len) {
+		if (*lvec_offset == iov->iov_len) {
 			/*
 			 * Need to copy remaining part of page into the
 			 * next iovec if there are any bytes left in page
 			 */
 			(*lvec_current)++;
+			iov++;
 			*lvec_offset = 0;
 			start_offset = (start_offset + bytes_to_copy)
 				% PAGE_SIZE;