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(¤t->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(¤t->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>