From: Al Viro Date: Fri, 4 Apr 2014 23:23:46 +0000 (-0400) Subject: optimize copy_page_{to,from}_iter() X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=81055e584f9d743cb13dc7944923d817c20f089d;p=deliverable%2Flinux.git optimize copy_page_{to,from}_iter() if we'd ended up in the end of a segment, jump to the beginning of the next one (iov_offset = 0, iov++), rather than having the next primitive deal with that. Ought to be folded back... Signed-off-by: Al Viro --- diff --git a/mm/iov_iter.c b/mm/iov_iter.c index 081e3273085b..fcdaaab438b6 100644 --- a/mm/iov_iter.c +++ b/mm/iov_iter.c @@ -74,6 +74,10 @@ size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes, } kunmap(page); done: + if (skip == iov->iov_len) { + iov++; + skip = 0; + } i->count -= wanted - bytes; i->nr_segs -= iov - i->iov; i->iov = iov; @@ -152,6 +156,10 @@ size_t copy_page_from_iter(struct page *page, size_t offset, size_t bytes, } kunmap(page); done: + if (skip == iov->iov_len) { + iov++; + skip = 0; + } i->count -= wanted - bytes; i->nr_segs -= iov - i->iov; i->iov = iov;