diff options
| -rw-r--r-- | mm/iov_iter.c | 8 |
1 files changed, 8 insertions, 0 deletions
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, | |||
| 74 | } | 74 | } |
| 75 | kunmap(page); | 75 | kunmap(page); |
| 76 | done: | 76 | done: |
| 77 | if (skip == iov->iov_len) { | ||
| 78 | iov++; | ||
| 79 | skip = 0; | ||
| 80 | } | ||
| 77 | i->count -= wanted - bytes; | 81 | i->count -= wanted - bytes; |
| 78 | i->nr_segs -= iov - i->iov; | 82 | i->nr_segs -= iov - i->iov; |
| 79 | i->iov = iov; | 83 | i->iov = iov; |
| @@ -152,6 +156,10 @@ size_t copy_page_from_iter(struct page *page, size_t offset, size_t bytes, | |||
| 152 | } | 156 | } |
| 153 | kunmap(page); | 157 | kunmap(page); |
| 154 | done: | 158 | done: |
| 159 | if (skip == iov->iov_len) { | ||
| 160 | iov++; | ||
| 161 | skip = 0; | ||
| 162 | } | ||
| 155 | i->count -= wanted - bytes; | 163 | i->count -= wanted - bytes; |
| 156 | i->nr_segs -= iov - i->iov; | 164 | i->nr_segs -= iov - i->iov; |
| 157 | i->iov = iov; | 165 | i->iov = iov; |
