Thread (6 messages) 6 messages, 2 authors, 2013-07-26

Re: [RFC PATCH 1/2] vmsplice unmap gifted pages for recipient

From: Dave Hansen <hidden>
Date: 2013-07-25 17:30:13
Also in: linux-fsdevel, lkml

On 07/25/2013 10:21 AM, Robert Jennings wrote:
quoted hunk ↗ jump to hunk
+static void zap_buf_page(unsigned long useraddr)
+{
+	struct vm_area_struct *vma;
+
+	down_read(&current->mm->mmap_sem);
+	vma = find_vma_intersection(current->mm, useraddr,
+			useraddr + PAGE_SIZE);
+	if (!IS_ERR_OR_NULL(vma))
+		zap_page_range(vma, useraddr, PAGE_SIZE, NULL);
+	up_read(&current->mm->mmap_sem);
+}
+
 /**
  * splice_to_pipe - fill passed data into a pipe
  * @pipe:	pipe to fill
@@ -212,8 +224,16 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
 			buf->len = spd->partial[page_nr].len;
 			buf->private = spd->partial[page_nr].private;
 			buf->ops = spd->ops;
-			if (spd->flags & SPLICE_F_GIFT)
+			if (spd->flags & SPLICE_F_GIFT) {
+				unsigned long useraddr =
+						spd->partial[page_nr].useraddr;
+
+				if ((spd->flags & SPLICE_F_MOVE) &&
+				    !buf->offset && (buf->len == PAGE_SIZE))
+					/* Can move page aligned buf */
+					zap_buf_page(useraddr);
 				buf->flags |= PIPE_BUF_FLAG_GIFT;
+			}
There isn't quite enough context here, but is it going to do this
zap_buf_page() very often?  Seems a bit wasteful to do the up/down and
find_vma() every trip through the loop.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help