xref: /linux/lib/iov_iter.c (revision 0c8bf38058e5ac0e42246acb13f623b7962a3922)
1 // SPDX-License-Identifier: GPL-2.0-only
2 #include <linux/export.h>
3 #include <linux/bvec.h>
4 #include <linux/fault-inject-usercopy.h>
5 #include <linux/uio.h>
6 #include <linux/pagemap.h>
7 #include <linux/highmem.h>
8 #include <linux/slab.h>
9 #include <linux/vmalloc.h>
10 #include <linux/splice.h>
11 #include <linux/compat.h>
12 #include <linux/scatterlist.h>
13 #include <linux/instrumented.h>
14 #include <linux/iov_iter.h>
15 
16 static __always_inline
17 size_t copy_to_user_iter(void __user *iter_to, size_t progress,
18 			 size_t len, void *from, void *priv2)
19 {
20 	if (should_fail_usercopy())
21 		return len;
22 	if (access_ok(iter_to, len)) {
23 		from += progress;
24 		instrument_copy_to_user(iter_to, from, len);
25 		len = raw_copy_to_user(iter_to, from, len);
26 	}
27 	return len;
28 }
29 
30 static __always_inline
31 size_t copy_to_user_iter_nofault(void __user *iter_to, size_t progress,
32 				 size_t len, void *from, void *priv2)
33 {
34 	ssize_t res;
35 
36 	if (should_fail_usercopy())
37 		return len;
38 
39 	from += progress;
40 	res = copy_to_user_nofault(iter_to, from, len);
41 	return res < 0 ? len : res;
42 }
43 
44 static __always_inline
45 size_t copy_from_user_iter(void __user *iter_from, size_t progress,
46 			   size_t len, void *to, void *priv2)
47 {
48 	size_t res = len;
49 
50 	if (should_fail_usercopy())
51 		return len;
52 	if (can_do_masked_user_access()) {
53 		iter_from = mask_user_address(iter_from);
54 	} else {
55 		if (!access_ok(iter_from, len))
56 			return res;
57 
58 		/*
59 		 * Ensure that bad access_ok() speculation will not
60 		 * lead to nasty side effects *after* the copy is
61 		 * finished:
62 		 */
63 		barrier_nospec();
64 	}
65 	to += progress;
66 	instrument_copy_from_user_before(to, iter_from, len);
67 	res = raw_copy_from_user(to, iter_from, len);
68 	instrument_copy_from_user_after(to, iter_from, len, res);
69 
70 	return res;
71 }
72 
73 static __always_inline
74 size_t memcpy_to_iter(void *iter_to, size_t progress,
75 		      size_t len, void *from, void *priv2)
76 {
77 	memcpy(iter_to, from + progress, len);
78 	return 0;
79 }
80 
81 static __always_inline
82 size_t memcpy_from_iter(void *iter_from, size_t progress,
83 			size_t len, void *to, void *priv2)
84 {
85 	memcpy(to + progress, iter_from, len);
86 	return 0;
87 }
88 
89 /*
90  * fault_in_iov_iter_readable - fault in iov iterator for reading
91  * @i: iterator
92  * @size: maximum length
93  *
94  * Fault in one or more iovecs of the given iov_iter, to a maximum length of
95  * @size.  For each iovec, fault in each page that constitutes the iovec.
96  *
97  * Returns the number of bytes not faulted in (like copy_to_user() and
98  * copy_from_user()).
99  *
100  * Always returns 0 for non-userspace iterators.
101  */
102 size_t fault_in_iov_iter_readable(const struct iov_iter *i, size_t size)
103 {
104 	if (iter_is_ubuf(i)) {
105 		size_t n = min(size, iov_iter_count(i));
106 		n -= fault_in_readable(i->ubuf + i->iov_offset, n);
107 		return size - n;
108 	} else if (iter_is_iovec(i)) {
109 		size_t count = min(size, iov_iter_count(i));
110 		const struct iovec *p;
111 		size_t skip;
112 
113 		size -= count;
114 		for (p = iter_iov(i), skip = i->iov_offset; count; p++, skip = 0) {
115 			size_t len = min(count, p->iov_len - skip);
116 			size_t ret;
117 
118 			if (unlikely(!len))
119 				continue;
120 			ret = fault_in_readable(p->iov_base + skip, len);
121 			count -= len - ret;
122 			if (ret)
123 				break;
124 		}
125 		return count + size;
126 	}
127 	return 0;
128 }
129 EXPORT_SYMBOL(fault_in_iov_iter_readable);
130 
131 /*
132  * fault_in_iov_iter_writeable - fault in iov iterator for writing
133  * @i: iterator
134  * @size: maximum length
135  *
136  * Faults in the iterator using get_user_pages(), i.e., without triggering
137  * hardware page faults.  This is primarily useful when we already know that
138  * some or all of the pages in @i aren't in memory.
139  *
140  * Returns the number of bytes not faulted in, like copy_to_user() and
141  * copy_from_user().
142  *
143  * Always returns 0 for non-user-space iterators.
144  */
145 size_t fault_in_iov_iter_writeable(const struct iov_iter *i, size_t size)
146 {
147 	if (iter_is_ubuf(i)) {
148 		size_t n = min(size, iov_iter_count(i));
149 		n -= fault_in_safe_writeable(i->ubuf + i->iov_offset, n);
150 		return size - n;
151 	} else if (iter_is_iovec(i)) {
152 		size_t count = min(size, iov_iter_count(i));
153 		const struct iovec *p;
154 		size_t skip;
155 
156 		size -= count;
157 		for (p = iter_iov(i), skip = i->iov_offset; count; p++, skip = 0) {
158 			size_t len = min(count, p->iov_len - skip);
159 			size_t ret;
160 
161 			if (unlikely(!len))
162 				continue;
163 			ret = fault_in_safe_writeable(p->iov_base + skip, len);
164 			count -= len - ret;
165 			if (ret)
166 				break;
167 		}
168 		return count + size;
169 	}
170 	return 0;
171 }
172 EXPORT_SYMBOL(fault_in_iov_iter_writeable);
173 
174 void iov_iter_init(struct iov_iter *i, unsigned int direction,
175 			const struct iovec *iov, unsigned long nr_segs,
176 			size_t count)
177 {
178 	WARN_ON(direction & ~(READ | WRITE));
179 	*i = (struct iov_iter) {
180 		.iter_type = ITER_IOVEC,
181 		.nofault = false,
182 		.data_source = direction,
183 		.__iov = iov,
184 		.nr_segs = nr_segs,
185 		.iov_offset = 0,
186 		.count = count
187 	};
188 }
189 EXPORT_SYMBOL(iov_iter_init);
190 
191 size_t _copy_to_iter(const void *addr, size_t bytes, struct iov_iter *i)
192 {
193 	if (WARN_ON_ONCE(i->data_source))
194 		return 0;
195 	if (user_backed_iter(i))
196 		might_fault();
197 	return iterate_and_advance(i, bytes, (void *)addr,
198 				   copy_to_user_iter, memcpy_to_iter);
199 }
200 EXPORT_SYMBOL(_copy_to_iter);
201 
202 #ifdef CONFIG_ARCH_HAS_COPY_MC
203 static __always_inline
204 size_t copy_to_user_iter_mc(void __user *iter_to, size_t progress,
205 			    size_t len, void *from, void *priv2)
206 {
207 	if (access_ok(iter_to, len)) {
208 		from += progress;
209 		instrument_copy_to_user(iter_to, from, len);
210 		len = copy_mc_to_user(iter_to, from, len);
211 	}
212 	return len;
213 }
214 
215 static __always_inline
216 size_t memcpy_to_iter_mc(void *iter_to, size_t progress,
217 			 size_t len, void *from, void *priv2)
218 {
219 	return copy_mc_to_kernel(iter_to, from + progress, len);
220 }
221 
222 /**
223  * _copy_mc_to_iter - copy to iter with source memory error exception handling
224  * @addr: source kernel address
225  * @bytes: total transfer length
226  * @i: destination iterator
227  *
228  * The pmem driver deploys this for the dax operation
229  * (dax_copy_to_iter()) for dax reads (bypass page-cache and the
230  * block-layer). Upon #MC read(2) aborts and returns EIO or the bytes
231  * successfully copied.
232  *
233  * The main differences between this and typical _copy_to_iter().
234  *
235  * * Typical tail/residue handling after a fault retries the copy
236  *   byte-by-byte until the fault happens again. Re-triggering machine
237  *   checks is potentially fatal so the implementation uses source
238  *   alignment and poison alignment assumptions to avoid re-triggering
239  *   hardware exceptions.
240  *
241  * * ITER_KVEC and ITER_BVEC can return short copies.  Compare to
242  *   copy_to_iter() where only ITER_IOVEC attempts might return a short copy.
243  *
244  * Return: number of bytes copied (may be %0)
245  */
246 size_t _copy_mc_to_iter(const void *addr, size_t bytes, struct iov_iter *i)
247 {
248 	if (WARN_ON_ONCE(i->data_source))
249 		return 0;
250 	if (user_backed_iter(i))
251 		might_fault();
252 	return iterate_and_advance(i, bytes, (void *)addr,
253 				   copy_to_user_iter_mc, memcpy_to_iter_mc);
254 }
255 EXPORT_SYMBOL_GPL(_copy_mc_to_iter);
256 #endif /* CONFIG_ARCH_HAS_COPY_MC */
257 
258 static __always_inline
259 size_t __copy_from_iter(void *addr, size_t bytes, struct iov_iter *i)
260 {
261 	return iterate_and_advance(i, bytes, addr,
262 				   copy_from_user_iter, memcpy_from_iter);
263 }
264 
265 size_t _copy_from_iter(void *addr, size_t bytes, struct iov_iter *i)
266 {
267 	if (WARN_ON_ONCE(!i->data_source))
268 		return 0;
269 
270 	if (user_backed_iter(i))
271 		might_fault();
272 	return __copy_from_iter(addr, bytes, i);
273 }
274 EXPORT_SYMBOL(_copy_from_iter);
275 
276 static __always_inline
277 size_t copy_from_user_iter_nocache(void __user *iter_from, size_t progress,
278 				   size_t len, void *to, void *priv2)
279 {
280 	return copy_from_user_inatomic_nontemporal(to + progress, iter_from, len);
281 }
282 
283 size_t _copy_from_iter_nocache(void *addr, size_t bytes, struct iov_iter *i)
284 {
285 	if (WARN_ON_ONCE(!i->data_source))
286 		return 0;
287 
288 	return iterate_and_advance(i, bytes, addr,
289 				   copy_from_user_iter_nocache,
290 				   memcpy_from_iter);
291 }
292 EXPORT_SYMBOL(_copy_from_iter_nocache);
293 
294 #ifdef CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE
295 static __always_inline
296 size_t copy_from_user_iter_flushcache(void __user *iter_from, size_t progress,
297 				      size_t len, void *to, void *priv2)
298 {
299 	return copy_from_user_flushcache(to + progress, iter_from, len);
300 }
301 
302 static __always_inline
303 size_t memcpy_from_iter_flushcache(void *iter_from, size_t progress,
304 				   size_t len, void *to, void *priv2)
305 {
306 	memcpy_flushcache(to + progress, iter_from, len);
307 	return 0;
308 }
309 
310 /**
311  * _copy_from_iter_flushcache - write destination through cpu cache
312  * @addr: destination kernel address
313  * @bytes: total transfer length
314  * @i: source iterator
315  *
316  * The pmem driver arranges for filesystem-dax to use this facility via
317  * dax_copy_from_iter() for ensuring that writes to persistent memory
318  * are flushed through the CPU cache. It is differentiated from
319  * _copy_from_iter_nocache() in that guarantees all data is flushed for
320  * all iterator types. The _copy_from_iter_nocache() only attempts to
321  * bypass the cache for the ITER_IOVEC case, and on some archs may use
322  * instructions that strand dirty-data in the cache.
323  *
324  * Return: number of bytes copied (may be %0)
325  */
326 size_t _copy_from_iter_flushcache(void *addr, size_t bytes, struct iov_iter *i)
327 {
328 	if (WARN_ON_ONCE(!i->data_source))
329 		return 0;
330 
331 	return iterate_and_advance(i, bytes, addr,
332 				   copy_from_user_iter_flushcache,
333 				   memcpy_from_iter_flushcache);
334 }
335 EXPORT_SYMBOL_GPL(_copy_from_iter_flushcache);
336 #endif
337 
338 static inline bool page_copy_sane(struct page *page, size_t offset, size_t n)
339 {
340 	struct page *head;
341 	size_t v = n + offset;
342 
343 	/*
344 	 * The general case needs to access the page order in order
345 	 * to compute the page size.
346 	 * However, we mostly deal with order-0 pages and thus can
347 	 * avoid a possible cache line miss for requests that fit all
348 	 * page orders.
349 	 */
350 	if (n <= v && v <= PAGE_SIZE)
351 		return true;
352 
353 	head = compound_head(page);
354 	v += (page - head) << PAGE_SHIFT;
355 
356 	if (WARN_ON(n > v || v > page_size(head)))
357 		return false;
358 	return true;
359 }
360 
361 size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes,
362 			 struct iov_iter *i)
363 {
364 	size_t res = 0;
365 	if (!page_copy_sane(page, offset, bytes))
366 		return 0;
367 	if (WARN_ON_ONCE(i->data_source))
368 		return 0;
369 	page += offset / PAGE_SIZE; // first subpage
370 	offset %= PAGE_SIZE;
371 	while (1) {
372 		void *kaddr = kmap_local_page(page);
373 		size_t n = min(bytes, (size_t)PAGE_SIZE - offset);
374 		n = _copy_to_iter(kaddr + offset, n, i);
375 		kunmap_local(kaddr);
376 		res += n;
377 		bytes -= n;
378 		if (!bytes || !n)
379 			break;
380 		offset += n;
381 		if (offset == PAGE_SIZE) {
382 			page++;
383 			offset = 0;
384 		}
385 	}
386 	return res;
387 }
388 EXPORT_SYMBOL(copy_page_to_iter);
389 
390 size_t copy_page_to_iter_nofault(struct page *page, unsigned offset, size_t bytes,
391 				 struct iov_iter *i)
392 {
393 	size_t res = 0;
394 
395 	if (!page_copy_sane(page, offset, bytes))
396 		return 0;
397 	if (WARN_ON_ONCE(i->data_source))
398 		return 0;
399 	page += offset / PAGE_SIZE; // first subpage
400 	offset %= PAGE_SIZE;
401 	while (1) {
402 		void *kaddr = kmap_local_page(page);
403 		size_t n = min(bytes, (size_t)PAGE_SIZE - offset);
404 
405 		n = iterate_and_advance(i, n, kaddr + offset,
406 					copy_to_user_iter_nofault,
407 					memcpy_to_iter);
408 		kunmap_local(kaddr);
409 		res += n;
410 		bytes -= n;
411 		if (!bytes || !n)
412 			break;
413 		offset += n;
414 		if (offset == PAGE_SIZE) {
415 			page++;
416 			offset = 0;
417 		}
418 	}
419 	return res;
420 }
421 EXPORT_SYMBOL(copy_page_to_iter_nofault);
422 
423 size_t copy_page_from_iter(struct page *page, size_t offset, size_t bytes,
424 			 struct iov_iter *i)
425 {
426 	size_t res = 0;
427 	if (!page_copy_sane(page, offset, bytes))
428 		return 0;
429 	page += offset / PAGE_SIZE; // first subpage
430 	offset %= PAGE_SIZE;
431 	while (1) {
432 		void *kaddr = kmap_local_page(page);
433 		size_t n = min(bytes, (size_t)PAGE_SIZE - offset);
434 		n = _copy_from_iter(kaddr + offset, n, i);
435 		kunmap_local(kaddr);
436 		res += n;
437 		bytes -= n;
438 		if (!bytes || !n)
439 			break;
440 		offset += n;
441 		if (offset == PAGE_SIZE) {
442 			page++;
443 			offset = 0;
444 		}
445 	}
446 	return res;
447 }
448 EXPORT_SYMBOL(copy_page_from_iter);
449 
450 static __always_inline
451 size_t zero_to_user_iter(void __user *iter_to, size_t progress,
452 			 size_t len, void *priv, void *priv2)
453 {
454 	return clear_user(iter_to, len);
455 }
456 
457 static __always_inline
458 size_t zero_to_iter(void *iter_to, size_t progress,
459 		    size_t len, void *priv, void *priv2)
460 {
461 	memset(iter_to, 0, len);
462 	return 0;
463 }
464 
465 size_t iov_iter_zero(size_t bytes, struct iov_iter *i)
466 {
467 	return iterate_and_advance(i, bytes, NULL,
468 				   zero_to_user_iter, zero_to_iter);
469 }
470 EXPORT_SYMBOL(iov_iter_zero);
471 
472 size_t copy_folio_from_iter_atomic(struct folio *folio, size_t offset,
473 		size_t bytes, struct iov_iter *i)
474 {
475 	size_t n, copied = 0;
476 
477 	if (!page_copy_sane(&folio->page, offset, bytes))
478 		return 0;
479 	if (WARN_ON_ONCE(!i->data_source))
480 		return 0;
481 
482 	do {
483 		char *to = kmap_local_folio(folio, offset);
484 
485 		n = bytes - copied;
486 		if (folio_test_partial_kmap(folio) &&
487 		    n > PAGE_SIZE - offset_in_page(offset))
488 			n = PAGE_SIZE - offset_in_page(offset);
489 
490 		pagefault_disable();
491 		n = __copy_from_iter(to, n, i);
492 		pagefault_enable();
493 		kunmap_local(to);
494 		copied += n;
495 		offset += n;
496 	} while (copied != bytes && n > 0);
497 
498 	return copied;
499 }
500 EXPORT_SYMBOL(copy_folio_from_iter_atomic);
501 
502 static void iov_iter_bvec_advance(struct iov_iter *i, size_t size)
503 {
504 	const struct bio_vec *bvec, *end;
505 
506 	if (!i->count)
507 		return;
508 	i->count -= size;
509 
510 	size += i->iov_offset;
511 
512 	for (bvec = i->bvec, end = bvec + i->nr_segs; bvec < end; bvec++) {
513 		if (likely(size < bvec->bv_len))
514 			break;
515 		size -= bvec->bv_len;
516 	}
517 	i->iov_offset = size;
518 	i->nr_segs -= bvec - i->bvec;
519 	i->bvec = bvec;
520 }
521 
522 static void iov_iter_iovec_advance(struct iov_iter *i, size_t size)
523 {
524 	const struct iovec *iov, *end;
525 
526 	if (!i->count)
527 		return;
528 	i->count -= size;
529 
530 	size += i->iov_offset; // from beginning of current segment
531 	for (iov = iter_iov(i), end = iov + i->nr_segs; iov < end; iov++) {
532 		if (likely(size < iov->iov_len))
533 			break;
534 		size -= iov->iov_len;
535 	}
536 	i->iov_offset = size;
537 	i->nr_segs -= iov - iter_iov(i);
538 	i->__iov = iov;
539 }
540 
541 static void iov_iter_folioq_advance(struct iov_iter *i, size_t size)
542 {
543 	const struct folio_queue *folioq = i->folioq;
544 	unsigned int slot = i->folioq_slot;
545 
546 	if (!i->count)
547 		return;
548 	i->count -= size;
549 
550 	if (slot >= folioq_nr_slots(folioq)) {
551 		folioq = folioq->next;
552 		slot = 0;
553 	}
554 
555 	size += i->iov_offset; /* From beginning of current segment. */
556 	do {
557 		size_t fsize = folioq_folio_size(folioq, slot);
558 
559 		if (likely(size < fsize))
560 			break;
561 		size -= fsize;
562 		slot++;
563 		if (slot >= folioq_nr_slots(folioq) && folioq->next) {
564 			folioq = folioq->next;
565 			slot = 0;
566 		}
567 	} while (size);
568 
569 	i->iov_offset = size;
570 	i->folioq_slot = slot;
571 	i->folioq = folioq;
572 }
573 
574 void iov_iter_advance(struct iov_iter *i, size_t size)
575 {
576 	if (unlikely(i->count < size))
577 		size = i->count;
578 	if (likely(iter_is_ubuf(i)) || unlikely(iov_iter_is_xarray(i)) ||
579 	    unlikely(iov_iter_is_dmabuf_map(i))) {
580 		i->iov_offset += size;
581 		i->count -= size;
582 	} else if (likely(iter_is_iovec(i) || iov_iter_is_kvec(i))) {
583 		/* iovec and kvec have identical layouts */
584 		iov_iter_iovec_advance(i, size);
585 	} else if (iov_iter_is_bvec(i)) {
586 		iov_iter_bvec_advance(i, size);
587 	} else if (iov_iter_is_folioq(i)) {
588 		iov_iter_folioq_advance(i, size);
589 	} else if (iov_iter_is_discard(i)) {
590 		i->count -= size;
591 	}
592 }
593 EXPORT_SYMBOL(iov_iter_advance);
594 
595 static void iov_iter_folioq_revert(struct iov_iter *i, size_t unroll)
596 {
597 	const struct folio_queue *folioq = i->folioq;
598 	unsigned int slot = i->folioq_slot;
599 
600 	for (;;) {
601 		size_t fsize;
602 
603 		if (slot == 0) {
604 			folioq = folioq->prev;
605 			slot = folioq_nr_slots(folioq);
606 		}
607 		slot--;
608 
609 		fsize = folioq_folio_size(folioq, slot);
610 		if (unroll <= fsize) {
611 			i->iov_offset = fsize - unroll;
612 			break;
613 		}
614 		unroll -= fsize;
615 	}
616 
617 	i->folioq_slot = slot;
618 	i->folioq = folioq;
619 }
620 
621 void iov_iter_revert(struct iov_iter *i, size_t unroll)
622 {
623 	if (!unroll)
624 		return;
625 	if (WARN_ON(unroll > MAX_RW_COUNT))
626 		return;
627 	i->count += unroll;
628 	if (unlikely(iov_iter_is_discard(i)))
629 		return;
630 	if (unroll <= i->iov_offset) {
631 		i->iov_offset -= unroll;
632 		return;
633 	}
634 	unroll -= i->iov_offset;
635 	if (iov_iter_is_xarray(i) || iter_is_ubuf(i) ||
636 	    iov_iter_is_dmabuf_map(i)) {
637 		BUG(); /* We should never go beyond the start of the specified
638 			* range since we might then be straying into pages that
639 			* aren't pinned.
640 			*/
641 	} else if (iov_iter_is_bvec(i)) {
642 		const struct bio_vec *bvec = i->bvec;
643 		while (1) {
644 			size_t n = (--bvec)->bv_len;
645 			i->nr_segs++;
646 			if (unroll <= n) {
647 				i->bvec = bvec;
648 				i->iov_offset = n - unroll;
649 				return;
650 			}
651 			unroll -= n;
652 		}
653 	} else if (iov_iter_is_folioq(i)) {
654 		i->iov_offset = 0;
655 		iov_iter_folioq_revert(i, unroll);
656 	} else { /* same logics for iovec and kvec */
657 		const struct iovec *iov = iter_iov(i);
658 		while (1) {
659 			size_t n = (--iov)->iov_len;
660 			i->nr_segs++;
661 			if (unroll <= n) {
662 				i->__iov = iov;
663 				i->iov_offset = n - unroll;
664 				return;
665 			}
666 			unroll -= n;
667 		}
668 	}
669 }
670 EXPORT_SYMBOL(iov_iter_revert);
671 
672 /*
673  * Return the count of just the current iov_iter segment.
674  */
675 size_t iov_iter_single_seg_count(const struct iov_iter *i)
676 {
677 	if (i->nr_segs > 1) {
678 		if (likely(iter_is_iovec(i) || iov_iter_is_kvec(i)))
679 			return min(i->count, iter_iov(i)->iov_len - i->iov_offset);
680 		if (iov_iter_is_bvec(i))
681 			return min(i->count, i->bvec->bv_len - i->iov_offset);
682 	}
683 	if (unlikely(iov_iter_is_folioq(i)))
684 		return !i->count ? 0 :
685 			umin(folioq_folio_size(i->folioq, i->folioq_slot), i->count);
686 	return i->count;
687 }
688 EXPORT_SYMBOL(iov_iter_single_seg_count);
689 
690 void iov_iter_kvec(struct iov_iter *i, unsigned int direction,
691 			const struct kvec *kvec, unsigned long nr_segs,
692 			size_t count)
693 {
694 	WARN_ON(direction & ~(READ | WRITE));
695 	*i = (struct iov_iter){
696 		.iter_type = ITER_KVEC,
697 		.data_source = direction,
698 		.kvec = kvec,
699 		.nr_segs = nr_segs,
700 		.iov_offset = 0,
701 		.count = count
702 	};
703 }
704 EXPORT_SYMBOL(iov_iter_kvec);
705 
706 void iov_iter_bvec(struct iov_iter *i, unsigned int direction,
707 			const struct bio_vec *bvec, unsigned long nr_segs,
708 			size_t count)
709 {
710 	WARN_ON(direction & ~(READ | WRITE));
711 	*i = (struct iov_iter){
712 		.iter_type = ITER_BVEC,
713 		.data_source = direction,
714 		.bvec = bvec,
715 		.nr_segs = nr_segs,
716 		.iov_offset = 0,
717 		.count = count
718 	};
719 }
720 EXPORT_SYMBOL(iov_iter_bvec);
721 
722 /**
723  * iov_iter_folio_queue - Initialise an I/O iterator to use the folios in a folio queue
724  * @i: The iterator to initialise.
725  * @direction: The direction of the transfer.
726  * @folioq: The starting point in the folio queue.
727  * @first_slot: The first slot in the folio queue to use
728  * @offset: The offset into the folio in the first slot to start at
729  * @count: The size of the I/O buffer in bytes.
730  *
731  * Set up an I/O iterator to either draw data out of the pages attached to an
732  * inode or to inject data into those pages.  The pages *must* be prevented
733  * from evaporation, either by taking a ref on them or locking them by the
734  * caller.
735  */
736 void iov_iter_folio_queue(struct iov_iter *i, unsigned int direction,
737 			  const struct folio_queue *folioq, unsigned int first_slot,
738 			  unsigned int offset, size_t count)
739 {
740 	BUG_ON(direction & ~1);
741 	*i = (struct iov_iter) {
742 		.iter_type = ITER_FOLIOQ,
743 		.data_source = direction,
744 		.folioq = folioq,
745 		.folioq_slot = first_slot,
746 		.count = count,
747 		.iov_offset = offset,
748 	};
749 }
750 EXPORT_SYMBOL(iov_iter_folio_queue);
751 
752 /**
753  * iov_iter_xarray - Initialise an I/O iterator to use the pages in an xarray
754  * @i: The iterator to initialise.
755  * @direction: The direction of the transfer.
756  * @xarray: The xarray to access.
757  * @start: The start file position.
758  * @count: The size of the I/O buffer in bytes.
759  *
760  * Set up an I/O iterator to either draw data out of the pages attached to an
761  * inode or to inject data into those pages.  The pages *must* be prevented
762  * from evaporation, either by taking a ref on them or locking them by the
763  * caller.
764  */
765 void iov_iter_xarray(struct iov_iter *i, unsigned int direction,
766 		     struct xarray *xarray, loff_t start, size_t count)
767 {
768 	BUG_ON(direction & ~1);
769 	*i = (struct iov_iter) {
770 		.iter_type = ITER_XARRAY,
771 		.data_source = direction,
772 		.xarray = xarray,
773 		.xarray_start = start,
774 		.count = count,
775 		.iov_offset = 0
776 	};
777 }
778 EXPORT_SYMBOL(iov_iter_xarray);
779 
780 void iov_iter_dmabuf_map(struct iov_iter *i, unsigned int direction,
781 			 struct dma_buf_io_map *map,
782 			 loff_t off, size_t count)
783 {
784 	WARN_ON(direction & ~(READ | WRITE));
785 	*i = (struct iov_iter){
786 		.iter_type = ITER_DMABUF_MAP,
787 		.data_source = direction,
788 		.dmabuf_map = map,
789 		.count = count,
790 		.iov_offset = off,
791 	};
792 }
793 
794 /**
795  * iov_iter_discard - Initialise an I/O iterator that discards data
796  * @i: The iterator to initialise.
797  * @direction: The direction of the transfer.
798  * @count: The size of the I/O buffer in bytes.
799  *
800  * Set up an I/O iterator that just discards everything that's written to it.
801  * It's only available as a READ iterator.
802  */
803 void iov_iter_discard(struct iov_iter *i, unsigned int direction, size_t count)
804 {
805 	BUG_ON(direction != READ);
806 	*i = (struct iov_iter){
807 		.iter_type = ITER_DISCARD,
808 		.data_source = false,
809 		.count = count,
810 		.iov_offset = 0
811 	};
812 }
813 EXPORT_SYMBOL(iov_iter_discard);
814 
815 static unsigned long iov_iter_alignment_iovec(const struct iov_iter *i)
816 {
817 	const struct iovec *iov = iter_iov(i);
818 	unsigned long res = 0;
819 	size_t size = i->count;
820 	size_t skip = i->iov_offset;
821 
822 	do {
823 		size_t len = iov->iov_len - skip;
824 		if (len) {
825 			res |= (unsigned long)iov->iov_base + skip;
826 			if (len > size)
827 				len = size;
828 			res |= len;
829 			size -= len;
830 		}
831 		iov++;
832 		skip = 0;
833 	} while (size);
834 	return res;
835 }
836 
837 static unsigned long iov_iter_alignment_bvec(const struct iov_iter *i)
838 {
839 	const struct bio_vec *bvec = i->bvec;
840 	unsigned res = 0;
841 	size_t size = i->count;
842 	unsigned skip = i->iov_offset;
843 
844 	do {
845 		size_t len = bvec->bv_len - skip;
846 		res |= (unsigned long)bvec->bv_offset + skip;
847 		if (len > size)
848 			len = size;
849 		res |= len;
850 		bvec++;
851 		size -= len;
852 		skip = 0;
853 	} while (size);
854 
855 	return res;
856 }
857 
858 unsigned long iov_iter_alignment(const struct iov_iter *i)
859 {
860 	if (likely(iter_is_ubuf(i))) {
861 		size_t size = i->count;
862 		if (size)
863 			return ((unsigned long)i->ubuf + i->iov_offset) | size;
864 		return 0;
865 	}
866 
867 	/* An empty iterator may have no segment array at all. */
868 	if (!i->count)
869 		return 0;
870 
871 	/* iovec and kvec have identical layouts */
872 	if (likely(iter_is_iovec(i) || iov_iter_is_kvec(i)))
873 		return iov_iter_alignment_iovec(i);
874 
875 	if (iov_iter_is_bvec(i))
876 		return iov_iter_alignment_bvec(i);
877 
878 	/* With both xarray and folioq types, we're dealing with whole folios. */
879 	if (iov_iter_is_folioq(i) || iov_iter_is_dmabuf_map(i))
880 		return i->iov_offset | i->count;
881 	if (iov_iter_is_xarray(i))
882 		return (i->xarray_start + i->iov_offset) | i->count;
883 
884 	return 0;
885 }
886 EXPORT_SYMBOL(iov_iter_alignment);
887 
888 unsigned long iov_iter_gap_alignment(const struct iov_iter *i)
889 {
890 	unsigned long res = 0;
891 	unsigned long v = 0;
892 	size_t size = i->count;
893 	unsigned k;
894 
895 	if (iter_is_ubuf(i) || iov_iter_is_dmabuf_map(i))
896 		return 0;
897 
898 	if (WARN_ON(!iter_is_iovec(i)))
899 		return ~0U;
900 
901 	for (k = 0; k < i->nr_segs; k++) {
902 		const struct iovec *iov = iter_iov(i) + k;
903 		if (iov->iov_len) {
904 			unsigned long base = (unsigned long)iov->iov_base;
905 			if (v) // if not the first one
906 				res |= base | v; // this start | previous end
907 			v = base + iov->iov_len;
908 			if (size <= iov->iov_len)
909 				break;
910 			size -= iov->iov_len;
911 		}
912 	}
913 	return res;
914 }
915 EXPORT_SYMBOL(iov_iter_gap_alignment);
916 
917 static int want_pages_array(struct page ***res, size_t size,
918 			    size_t start, unsigned int maxpages)
919 {
920 	unsigned int count = DIV_ROUND_UP(size + start, PAGE_SIZE);
921 
922 	if (count > maxpages)
923 		count = maxpages;
924 	WARN_ON(!count);	// caller should've prevented that
925 	if (!*res) {
926 		*res = kvmalloc_objs(struct page *, count);
927 		if (!*res)
928 			return 0;
929 	}
930 	return count;
931 }
932 
933 static ssize_t iter_folioq_get_pages(struct iov_iter *iter,
934 				     struct page ***ppages, size_t maxsize,
935 				     unsigned maxpages, size_t *_start_offset)
936 {
937 	const struct folio_queue *folioq = iter->folioq;
938 	struct page **pages;
939 	unsigned int slot = iter->folioq_slot;
940 	size_t extracted = 0, count = iter->count, iov_offset = iter->iov_offset;
941 
942 	if (slot >= folioq_nr_slots(folioq)) {
943 		folioq = folioq->next;
944 		slot = 0;
945 		if (WARN_ON(iov_offset != 0))
946 			return -EIO;
947 	}
948 
949 	maxpages = want_pages_array(ppages, maxsize, iov_offset & ~PAGE_MASK, maxpages);
950 	if (!maxpages)
951 		return -ENOMEM;
952 	*_start_offset = iov_offset & ~PAGE_MASK;
953 	pages = *ppages;
954 
955 	for (;;) {
956 		struct folio *folio = folioq_folio(folioq, slot);
957 		size_t offset = iov_offset, fsize = folioq_folio_size(folioq, slot);
958 		size_t part = PAGE_SIZE - offset % PAGE_SIZE;
959 
960 		if (offset < fsize) {
961 			part = umin(part, umin(maxsize - extracted, fsize - offset));
962 			count -= part;
963 			iov_offset += part;
964 			extracted += part;
965 
966 			*pages = folio_page(folio, offset / PAGE_SIZE);
967 			get_page(*pages);
968 			pages++;
969 			maxpages--;
970 		}
971 
972 		if (maxpages == 0 || extracted >= maxsize)
973 			break;
974 
975 		if (iov_offset >= fsize) {
976 			iov_offset = 0;
977 			slot++;
978 			if (slot == folioq_nr_slots(folioq) && folioq->next) {
979 				folioq = folioq->next;
980 				slot = 0;
981 			}
982 		}
983 	}
984 
985 	iter->count = count;
986 	iter->iov_offset = iov_offset;
987 	iter->folioq = folioq;
988 	iter->folioq_slot = slot;
989 	return extracted;
990 }
991 
992 static ssize_t iter_xarray_populate_pages(struct page **pages, struct xarray *xa,
993 					  pgoff_t index, unsigned int nr_pages)
994 {
995 	XA_STATE(xas, xa, index);
996 	struct folio *folio;
997 	unsigned int ret = 0;
998 
999 	rcu_read_lock();
1000 	for (folio = xas_load(&xas); folio; folio = xas_next(&xas)) {
1001 		if (xas_retry(&xas, folio))
1002 			continue;
1003 
1004 		/* Has the folio moved or been split? */
1005 		if (unlikely(folio != xas_reload(&xas))) {
1006 			xas_reset(&xas);
1007 			continue;
1008 		}
1009 
1010 		pages[ret] = folio_file_page(folio, xas.xa_index);
1011 		folio_get(folio);
1012 		if (++ret == nr_pages)
1013 			break;
1014 	}
1015 	rcu_read_unlock();
1016 	return ret;
1017 }
1018 
1019 static ssize_t iter_xarray_get_pages(struct iov_iter *i,
1020 				     struct page ***pages, size_t maxsize,
1021 				     unsigned maxpages, size_t *_start_offset)
1022 {
1023 	unsigned nr, offset, count;
1024 	pgoff_t index;
1025 	loff_t pos;
1026 
1027 	pos = i->xarray_start + i->iov_offset;
1028 	index = pos >> PAGE_SHIFT;
1029 	offset = pos & ~PAGE_MASK;
1030 	*_start_offset = offset;
1031 
1032 	count = want_pages_array(pages, maxsize, offset, maxpages);
1033 	if (!count)
1034 		return -ENOMEM;
1035 	nr = iter_xarray_populate_pages(*pages, i->xarray, index, count);
1036 	if (nr == 0)
1037 		return 0;
1038 
1039 	maxsize = min_t(size_t, nr * PAGE_SIZE - offset, maxsize);
1040 	i->iov_offset += maxsize;
1041 	i->count -= maxsize;
1042 	return maxsize;
1043 }
1044 
1045 /* must be done on non-empty ITER_UBUF or ITER_IOVEC one */
1046 static unsigned long first_iovec_segment(const struct iov_iter *i, size_t *size)
1047 {
1048 	size_t skip;
1049 	long k;
1050 
1051 	if (iter_is_ubuf(i))
1052 		return (unsigned long)i->ubuf + i->iov_offset;
1053 
1054 	for (k = 0, skip = i->iov_offset; k < i->nr_segs; k++, skip = 0) {
1055 		const struct iovec *iov = iter_iov(i) + k;
1056 		size_t len = iov->iov_len - skip;
1057 
1058 		if (unlikely(!len))
1059 			continue;
1060 		if (*size > len)
1061 			*size = len;
1062 		return (unsigned long)iov->iov_base + skip;
1063 	}
1064 	BUG(); // if it had been empty, we wouldn't get called
1065 }
1066 
1067 /* must be done on non-empty ITER_BVEC one */
1068 static struct page *first_bvec_segment(const struct iov_iter *i,
1069 				       size_t *size, size_t *start)
1070 {
1071 	struct page *page;
1072 	size_t skip = i->iov_offset, len;
1073 
1074 	len = i->bvec->bv_len - skip;
1075 	if (*size > len)
1076 		*size = len;
1077 	skip += i->bvec->bv_offset;
1078 	page = i->bvec->bv_page + skip / PAGE_SIZE;
1079 	*start = skip % PAGE_SIZE;
1080 	return page;
1081 }
1082 
1083 static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,
1084 		   struct page ***pages, size_t maxsize,
1085 		   unsigned int maxpages, size_t *start)
1086 {
1087 	unsigned int n, gup_flags = 0;
1088 
1089 	if (maxsize > i->count)
1090 		maxsize = i->count;
1091 	if (!maxsize)
1092 		return 0;
1093 	if (maxsize > MAX_RW_COUNT)
1094 		maxsize = MAX_RW_COUNT;
1095 
1096 	if (likely(user_backed_iter(i))) {
1097 		unsigned long addr;
1098 		int res;
1099 
1100 		if (iov_iter_rw(i) != WRITE)
1101 			gup_flags |= FOLL_WRITE;
1102 		if (i->nofault)
1103 			gup_flags |= FOLL_NOFAULT;
1104 
1105 		addr = first_iovec_segment(i, &maxsize);
1106 		*start = addr % PAGE_SIZE;
1107 		addr &= PAGE_MASK;
1108 		n = want_pages_array(pages, maxsize, *start, maxpages);
1109 		if (!n)
1110 			return -ENOMEM;
1111 		res = get_user_pages_fast(addr, n, gup_flags, *pages);
1112 		if (unlikely(res <= 0))
1113 			return res;
1114 		maxsize = min_t(size_t, maxsize, res * PAGE_SIZE - *start);
1115 		iov_iter_advance(i, maxsize);
1116 		return maxsize;
1117 	}
1118 	if (iov_iter_is_bvec(i)) {
1119 		struct page **p;
1120 		struct page *page;
1121 
1122 		page = first_bvec_segment(i, &maxsize, start);
1123 		n = want_pages_array(pages, maxsize, *start, maxpages);
1124 		if (!n)
1125 			return -ENOMEM;
1126 		p = *pages;
1127 		for (int k = 0; k < n; k++) {
1128 			struct folio *folio = page_folio(page + k);
1129 			p[k] = page + k;
1130 			if (!folio_test_slab(folio))
1131 				folio_get(folio);
1132 		}
1133 		maxsize = min_t(size_t, maxsize, n * PAGE_SIZE - *start);
1134 		i->count -= maxsize;
1135 		i->iov_offset += maxsize;
1136 		if (i->iov_offset == i->bvec->bv_len) {
1137 			i->iov_offset = 0;
1138 			i->bvec++;
1139 			i->nr_segs--;
1140 		}
1141 		return maxsize;
1142 	}
1143 	if (iov_iter_is_folioq(i))
1144 		return iter_folioq_get_pages(i, pages, maxsize, maxpages, start);
1145 	if (iov_iter_is_xarray(i))
1146 		return iter_xarray_get_pages(i, pages, maxsize, maxpages, start);
1147 	return -EFAULT;
1148 }
1149 
1150 ssize_t iov_iter_get_pages2(struct iov_iter *i, struct page **pages,
1151 		size_t maxsize, unsigned maxpages, size_t *start)
1152 {
1153 	if (!maxpages)
1154 		return 0;
1155 	BUG_ON(!pages);
1156 
1157 	return __iov_iter_get_pages_alloc(i, &pages, maxsize, maxpages, start);
1158 }
1159 EXPORT_SYMBOL(iov_iter_get_pages2);
1160 
1161 ssize_t iov_iter_get_pages_alloc2(struct iov_iter *i,
1162 		struct page ***pages, size_t maxsize, size_t *start)
1163 {
1164 	ssize_t len;
1165 
1166 	*pages = NULL;
1167 
1168 	len = __iov_iter_get_pages_alloc(i, pages, maxsize, ~0U, start);
1169 	if (len <= 0) {
1170 		kvfree(*pages);
1171 		*pages = NULL;
1172 	}
1173 	return len;
1174 }
1175 EXPORT_SYMBOL(iov_iter_get_pages_alloc2);
1176 
1177 static int iov_npages(const struct iov_iter *i, int maxpages)
1178 {
1179 	size_t skip = i->iov_offset, size = i->count;
1180 	const struct iovec *p;
1181 	int npages = 0;
1182 
1183 	for (p = iter_iov(i); size; skip = 0, p++) {
1184 		unsigned offs = offset_in_page(p->iov_base + skip);
1185 		size_t len = min(p->iov_len - skip, size);
1186 
1187 		if (len) {
1188 			size -= len;
1189 			npages += DIV_ROUND_UP(offs + len, PAGE_SIZE);
1190 			if (unlikely(npages > maxpages))
1191 				return maxpages;
1192 		}
1193 	}
1194 	return npages;
1195 }
1196 
1197 static int bvec_npages(const struct iov_iter *i, int maxpages)
1198 {
1199 	size_t skip = i->iov_offset, size = i->count;
1200 	const struct bio_vec *p;
1201 	int npages = 0;
1202 
1203 	for (p = i->bvec; size; skip = 0, p++) {
1204 		unsigned offs = (p->bv_offset + skip) % PAGE_SIZE;
1205 		size_t len = min(p->bv_len - skip, size);
1206 
1207 		size -= len;
1208 		npages += DIV_ROUND_UP(offs + len, PAGE_SIZE);
1209 		if (unlikely(npages > maxpages))
1210 			return maxpages;
1211 	}
1212 	return npages;
1213 }
1214 
1215 int iov_iter_npages(const struct iov_iter *i, int maxpages)
1216 {
1217 	if (unlikely(!i->count))
1218 		return 0;
1219 	if (likely(iter_is_ubuf(i))) {
1220 		unsigned offs = offset_in_page(i->ubuf + i->iov_offset);
1221 		int npages = DIV_ROUND_UP(offs + i->count, PAGE_SIZE);
1222 		return min(npages, maxpages);
1223 	}
1224 	/* iovec and kvec have identical layouts */
1225 	if (likely(iter_is_iovec(i) || iov_iter_is_kvec(i)))
1226 		return iov_npages(i, maxpages);
1227 	if (iov_iter_is_bvec(i))
1228 		return bvec_npages(i, maxpages);
1229 	if (iov_iter_is_folioq(i)) {
1230 		unsigned offset = i->iov_offset % PAGE_SIZE;
1231 		int npages = DIV_ROUND_UP(offset + i->count, PAGE_SIZE);
1232 		return min(npages, maxpages);
1233 	}
1234 	if (iov_iter_is_xarray(i)) {
1235 		unsigned offset = (i->xarray_start + i->iov_offset) % PAGE_SIZE;
1236 		int npages = DIV_ROUND_UP(offset + i->count, PAGE_SIZE);
1237 		return min(npages, maxpages);
1238 	}
1239 	return 0;
1240 }
1241 EXPORT_SYMBOL(iov_iter_npages);
1242 
1243 const void *dup_iter(struct iov_iter *new, struct iov_iter *old, gfp_t flags)
1244 {
1245 	*new = *old;
1246 	if (iov_iter_is_bvec(new))
1247 		return new->bvec = kmemdup_array(new->bvec,
1248 				    new->nr_segs, sizeof(struct bio_vec),
1249 				    flags);
1250 	else if (iov_iter_is_kvec(new) || iter_is_iovec(new))
1251 		/* iovec and kvec have identical layout */
1252 		return new->__iov = kmemdup_array(new->__iov,
1253 				   new->nr_segs, sizeof(struct iovec),
1254 				   flags);
1255 	return NULL;
1256 }
1257 EXPORT_SYMBOL(dup_iter);
1258 
1259 static __noclone int copy_compat_iovec_from_user(struct iovec *iov,
1260 		const struct iovec __user *uvec, u32 nr_segs)
1261 {
1262 	const struct compat_iovec __user *uiov =
1263 		(const struct compat_iovec __user *)uvec;
1264 	int ret = -EFAULT;
1265 	u32 i;
1266 
1267 	if (!user_access_begin(uiov, nr_segs * sizeof(*uiov)))
1268 		return -EFAULT;
1269 
1270 	for (i = 0; i < nr_segs; i++) {
1271 		compat_uptr_t buf;
1272 		compat_ssize_t len;
1273 
1274 		unsafe_get_user(len, &uiov[i].iov_len, uaccess_end);
1275 		unsafe_get_user(buf, &uiov[i].iov_base, uaccess_end);
1276 
1277 		/* check for compat_size_t not fitting in compat_ssize_t .. */
1278 		if (len < 0) {
1279 			ret = -EINVAL;
1280 			goto uaccess_end;
1281 		}
1282 		iov[i].iov_base = compat_ptr(buf);
1283 		iov[i].iov_len = len;
1284 	}
1285 
1286 	ret = 0;
1287 uaccess_end:
1288 	user_access_end();
1289 	return ret;
1290 }
1291 
1292 static __noclone int copy_iovec_from_user(struct iovec *iov,
1293 		const struct iovec __user *uiov, unsigned long nr_segs)
1294 {
1295 	int ret = -EFAULT;
1296 
1297 	if (!user_access_begin(uiov, nr_segs * sizeof(*uiov)))
1298 		return -EFAULT;
1299 
1300 	do {
1301 		void __user *buf;
1302 		ssize_t len;
1303 
1304 		unsafe_get_user(len, &uiov->iov_len, uaccess_end);
1305 		unsafe_get_user(buf, &uiov->iov_base, uaccess_end);
1306 
1307 		/* check for size_t not fitting in ssize_t .. */
1308 		if (unlikely(len < 0)) {
1309 			ret = -EINVAL;
1310 			goto uaccess_end;
1311 		}
1312 		iov->iov_base = buf;
1313 		iov->iov_len = len;
1314 
1315 		uiov++; iov++;
1316 	} while (--nr_segs);
1317 
1318 	ret = 0;
1319 uaccess_end:
1320 	user_access_end();
1321 	return ret;
1322 }
1323 
1324 struct iovec *iovec_from_user(const struct iovec __user *uvec,
1325 		unsigned long nr_segs, unsigned long fast_segs,
1326 		struct iovec *fast_iov, bool compat)
1327 {
1328 	struct iovec *iov = fast_iov;
1329 	int ret;
1330 
1331 	/*
1332 	 * SuS says "The readv() function *may* fail if the iovcnt argument was
1333 	 * less than or equal to 0, or greater than {IOV_MAX}.  Linux has
1334 	 * traditionally returned zero for zero segments, so...
1335 	 */
1336 	if (nr_segs == 0)
1337 		return iov;
1338 	if (nr_segs > UIO_MAXIOV)
1339 		return ERR_PTR(-EINVAL);
1340 	if (nr_segs > fast_segs) {
1341 		iov = kmalloc_objs(struct iovec, nr_segs);
1342 		if (!iov)
1343 			return ERR_PTR(-ENOMEM);
1344 	}
1345 
1346 	if (unlikely(compat))
1347 		ret = copy_compat_iovec_from_user(iov, uvec, nr_segs);
1348 	else
1349 		ret = copy_iovec_from_user(iov, uvec, nr_segs);
1350 	if (ret) {
1351 		if (iov != fast_iov)
1352 			kfree(iov);
1353 		return ERR_PTR(ret);
1354 	}
1355 
1356 	return iov;
1357 }
1358 
1359 /*
1360  * Single segment iovec supplied by the user, import it as ITER_UBUF.
1361  */
1362 static ssize_t __import_iovec_ubuf(int type, const struct iovec __user *uvec,
1363 				   struct iovec **iovp, struct iov_iter *i,
1364 				   bool compat)
1365 {
1366 	struct iovec *iov = *iovp;
1367 	ssize_t ret;
1368 
1369 	*iovp = NULL;
1370 
1371 	if (compat)
1372 		ret = copy_compat_iovec_from_user(iov, uvec, 1);
1373 	else
1374 		ret = copy_iovec_from_user(iov, uvec, 1);
1375 	if (unlikely(ret))
1376 		return ret;
1377 
1378 	ret = import_ubuf(type, iov->iov_base, iov->iov_len, i);
1379 	if (unlikely(ret))
1380 		return ret;
1381 	return i->count;
1382 }
1383 
1384 ssize_t __import_iovec(int type, const struct iovec __user *uvec,
1385 		 unsigned nr_segs, unsigned fast_segs, struct iovec **iovp,
1386 		 struct iov_iter *i, bool compat)
1387 {
1388 	ssize_t total_len = 0;
1389 	unsigned long seg;
1390 	struct iovec *iov;
1391 
1392 	if (nr_segs == 1)
1393 		return __import_iovec_ubuf(type, uvec, iovp, i, compat);
1394 
1395 	iov = iovec_from_user(uvec, nr_segs, fast_segs, *iovp, compat);
1396 	if (IS_ERR(iov)) {
1397 		*iovp = NULL;
1398 		return PTR_ERR(iov);
1399 	}
1400 
1401 	/*
1402 	 * According to the Single Unix Specification we should return EINVAL if
1403 	 * an element length is < 0 when cast to ssize_t or if the total length
1404 	 * would overflow the ssize_t return value of the system call.
1405 	 *
1406 	 * Linux caps all read/write calls to MAX_RW_COUNT, and avoids the
1407 	 * overflow case.
1408 	 */
1409 	for (seg = 0; seg < nr_segs; seg++) {
1410 		ssize_t len = (ssize_t)iov[seg].iov_len;
1411 
1412 		if (!access_ok(iov[seg].iov_base, len)) {
1413 			if (iov != *iovp)
1414 				kfree(iov);
1415 			*iovp = NULL;
1416 			return -EFAULT;
1417 		}
1418 
1419 		if (len > MAX_RW_COUNT - total_len) {
1420 			len = MAX_RW_COUNT - total_len;
1421 			iov[seg].iov_len = len;
1422 		}
1423 		total_len += len;
1424 	}
1425 
1426 	iov_iter_init(i, type, iov, nr_segs, total_len);
1427 	if (iov == *iovp)
1428 		*iovp = NULL;
1429 	else
1430 		*iovp = iov;
1431 	return total_len;
1432 }
1433 
1434 /**
1435  * import_iovec() - Copy an array of &struct iovec from userspace
1436  *     into the kernel, check that it is valid, and initialize a new
1437  *     &struct iov_iter iterator to access it.
1438  *
1439  * @type: One of %READ or %WRITE.
1440  * @uvec: Pointer to the userspace array.
1441  * @nr_segs: Number of elements in userspace array.
1442  * @fast_segs: Number of elements in @iov.
1443  * @iovp: (input and output parameter) Pointer to pointer to (usually small
1444  *     on-stack) kernel array.
1445  * @i: Pointer to iterator that will be initialized on success.
1446  *
1447  * If the array pointed to by *@iov is large enough to hold all @nr_segs,
1448  * then this function places %NULL in *@iov on return. Otherwise, a new
1449  * array will be allocated and the result placed in *@iov. This means that
1450  * the caller may call kfree() on *@iov regardless of whether the small
1451  * on-stack array was used or not (and regardless of whether this function
1452  * returns an error or not).
1453  *
1454  * Return: Negative error code on error, bytes imported on success
1455  */
1456 ssize_t import_iovec(int type, const struct iovec __user *uvec,
1457 		 unsigned nr_segs, unsigned fast_segs,
1458 		 struct iovec **iovp, struct iov_iter *i)
1459 {
1460 	return __import_iovec(type, uvec, nr_segs, fast_segs, iovp, i,
1461 			      in_compat_syscall());
1462 }
1463 EXPORT_SYMBOL(import_iovec);
1464 
1465 int import_ubuf(int rw, void __user *buf, size_t len, struct iov_iter *i)
1466 {
1467 	if (len > MAX_RW_COUNT)
1468 		len = MAX_RW_COUNT;
1469 	if (unlikely(!access_ok(buf, len)))
1470 		return -EFAULT;
1471 
1472 	iov_iter_ubuf(i, rw, buf, len);
1473 	return 0;
1474 }
1475 EXPORT_SYMBOL_GPL(import_ubuf);
1476 
1477 /**
1478  * iov_iter_restore() - Restore a &struct iov_iter to the same state as when
1479  *     iov_iter_save_state() was called.
1480  *
1481  * @i: &struct iov_iter to restore
1482  * @state: state to restore from
1483  *
1484  * Used after iov_iter_save_state() to bring restore @i, if operations may
1485  * have advanced it.
1486  *
1487  * Note: only works on ITER_IOVEC, ITER_BVEC, and ITER_KVEC
1488  */
1489 void iov_iter_restore(struct iov_iter *i, struct iov_iter_state *state)
1490 {
1491 	if (WARN_ON_ONCE(!iov_iter_is_bvec(i) && !iter_is_iovec(i) &&
1492 			 !iter_is_ubuf(i) && !iov_iter_is_kvec(i) &&
1493 			 !iov_iter_is_dmabuf_map(i)))
1494 		return;
1495 	i->iov_offset = state->iov_offset;
1496 	i->count = state->count;
1497 	if (iter_is_ubuf(i) || iov_iter_is_dmabuf_map(i))
1498 		return;
1499 	/*
1500 	 * For the *vec iters, nr_segs + iov is constant - if we increment
1501 	 * the vec, then we also decrement the nr_segs count. Hence we don't
1502 	 * need to track both of these, just one is enough and we can deduct
1503 	 * the other from that. ITER_KVEC and ITER_IOVEC are the same struct
1504 	 * size, so we can just increment the iov pointer as they are unionzed.
1505 	 * ITER_BVEC _may_ be the same size on some archs, but on others it is
1506 	 * not. Be safe and handle it separately.
1507 	 */
1508 	BUILD_BUG_ON(sizeof(struct iovec) != sizeof(struct kvec));
1509 	if (iov_iter_is_bvec(i))
1510 		i->bvec -= state->nr_segs - i->nr_segs;
1511 	else
1512 		i->__iov -= state->nr_segs - i->nr_segs;
1513 	i->nr_segs = state->nr_segs;
1514 }
1515 EXPORT_SYMBOL_FOR_MODULES(iov_iter_restore, "vmw_vsock_virtio_transport_common");
1516 
1517 /*
1518  * Extract a list of contiguous pages from an ITER_FOLIOQ iterator.  This does
1519  * not get references on the pages, nor does it get a pin on them.
1520  */
1521 static ssize_t iov_iter_extract_folioq_pages(struct iov_iter *i,
1522 					     struct page ***pages, size_t maxsize,
1523 					     unsigned int maxpages,
1524 					     iov_iter_extraction_t extraction_flags,
1525 					     size_t *offset0)
1526 {
1527 	const struct folio_queue *folioq = i->folioq;
1528 	struct page **p;
1529 	unsigned int nr = 0;
1530 	size_t extracted = 0, offset, slot = i->folioq_slot;
1531 
1532 	if (slot >= folioq_nr_slots(folioq)) {
1533 		folioq = folioq->next;
1534 		slot = 0;
1535 		if (WARN_ON(i->iov_offset != 0))
1536 			return -EIO;
1537 	}
1538 
1539 	offset = i->iov_offset & ~PAGE_MASK;
1540 	*offset0 = offset;
1541 
1542 	maxpages = want_pages_array(pages, maxsize, offset, maxpages);
1543 	if (!maxpages)
1544 		return -ENOMEM;
1545 	p = *pages;
1546 
1547 	for (;;) {
1548 		struct folio *folio = folioq_folio(folioq, slot);
1549 		size_t offset = i->iov_offset, fsize = folioq_folio_size(folioq, slot);
1550 		size_t part = PAGE_SIZE - offset % PAGE_SIZE;
1551 
1552 		if (offset < fsize) {
1553 			part = umin(part, umin(maxsize - extracted, fsize - offset));
1554 			i->count -= part;
1555 			i->iov_offset += part;
1556 			extracted += part;
1557 
1558 			p[nr++] = folio_page(folio, offset / PAGE_SIZE);
1559 		}
1560 
1561 		if (nr >= maxpages || extracted >= maxsize)
1562 			break;
1563 
1564 		if (i->iov_offset >= fsize) {
1565 			i->iov_offset = 0;
1566 			slot++;
1567 			if (slot == folioq_nr_slots(folioq) && folioq->next) {
1568 				folioq = folioq->next;
1569 				slot = 0;
1570 			}
1571 		}
1572 	}
1573 
1574 	i->folioq = folioq;
1575 	i->folioq_slot = slot;
1576 	return extracted;
1577 }
1578 
1579 /*
1580  * Extract a list of contiguous pages from an ITER_XARRAY iterator.  This does not
1581  * get references on the pages, nor does it get a pin on them.
1582  */
1583 static ssize_t iov_iter_extract_xarray_pages(struct iov_iter *i,
1584 					     struct page ***pages, size_t maxsize,
1585 					     unsigned int maxpages,
1586 					     iov_iter_extraction_t extraction_flags,
1587 					     size_t *offset0)
1588 {
1589 	struct page **p;
1590 	struct folio *folio;
1591 	unsigned int nr = 0, offset;
1592 	loff_t pos = i->xarray_start + i->iov_offset;
1593 	bool will_alloc = !*pages;
1594 	XA_STATE(xas, i->xarray, pos >> PAGE_SHIFT);
1595 
1596 	offset = pos & ~PAGE_MASK;
1597 	*offset0 = offset;
1598 
1599 	maxpages = want_pages_array(pages, maxsize, offset, maxpages);
1600 	if (!maxpages)
1601 		return -ENOMEM;
1602 	p = *pages;
1603 
1604 	rcu_read_lock();
1605 	for (folio = xas_load(&xas); folio; folio = xas_next(&xas)) {
1606 		if (xas_retry(&xas, folio))
1607 			continue;
1608 
1609 		/* Has the folio moved or been split? */
1610 		if (unlikely(folio != xas_reload(&xas))) {
1611 			xas_reset(&xas);
1612 			continue;
1613 		}
1614 
1615 		p[nr++] = folio_file_page(folio, xas.xa_index);
1616 		if (nr == maxpages)
1617 			break;
1618 	}
1619 	rcu_read_unlock();
1620 
1621 	if (!nr) {
1622 		if (will_alloc) {
1623 			kvfree(*pages);
1624 			*pages = NULL;
1625 		}
1626 		return 0;
1627 	}
1628 
1629 	maxsize = min_t(size_t, nr * PAGE_SIZE - offset, maxsize);
1630 	iov_iter_advance(i, maxsize);
1631 	return maxsize;
1632 }
1633 
1634 /*
1635  * Extract a list of virtually contiguous pages from an ITER_BVEC iterator.
1636  * This does not get references on the pages, nor does it get a pin on them.
1637  */
1638 static ssize_t iov_iter_extract_bvec_pages(struct iov_iter *i,
1639 					   struct page ***pages, size_t maxsize,
1640 					   unsigned int maxpages,
1641 					   iov_iter_extraction_t extraction_flags,
1642 					   size_t *offset0)
1643 {
1644 	size_t skip = i->iov_offset, size = 0;
1645 	struct bvec_iter bi;
1646 	int k = 0;
1647 
1648 	if (i->nr_segs == 0)
1649 		return 0;
1650 
1651 	if (i->iov_offset == i->bvec->bv_len) {
1652 		i->iov_offset = 0;
1653 		i->nr_segs--;
1654 		i->bvec++;
1655 		skip = 0;
1656 	}
1657 	bi.bi_idx = 0;
1658 	bi.bi_size = maxsize;
1659 	bi.bi_offset = skip;
1660 
1661 	maxpages = want_pages_array(pages, maxsize, skip, maxpages);
1662 	if (!maxpages)
1663 		return -ENOMEM;
1664 
1665 	while (bi.bi_size && bi.bi_idx < i->nr_segs) {
1666 		struct bio_vec bv = bvec_iter_bvec(i->bvec, bi);
1667 
1668 		/*
1669 		 * The iov_iter_extract_pages interface only allows an offset
1670 		 * into the first page.  Break out of the loop if we see an
1671 		 * offset into subsequent pages, the caller will have to call
1672 		 * iov_iter_extract_pages again for the reminder.
1673 		 */
1674 		if (k) {
1675 			if (bv.bv_offset)
1676 				break;
1677 		} else {
1678 			*offset0 = bv.bv_offset;
1679 		}
1680 
1681 		(*pages)[k++] = bv.bv_page;
1682 		size += bv.bv_len;
1683 
1684 		if (k >= maxpages)
1685 			break;
1686 
1687 		/*
1688 		 * We are done when the end of the bvec doesn't align to a page
1689 		 * boundary as that would create a hole in the returned space.
1690 		 * The caller will handle this with another call to
1691 		 * iov_iter_extract_pages.
1692 		 */
1693 		if (bv.bv_offset + bv.bv_len != PAGE_SIZE)
1694 			break;
1695 
1696 		bvec_iter_advance_single(i->bvec, &bi, bv.bv_len);
1697 	}
1698 
1699 	iov_iter_advance(i, size);
1700 	return size;
1701 }
1702 
1703 /*
1704  * Extract a list of virtually contiguous pages from an ITER_KVEC iterator.
1705  * This does not get references on the pages, nor does it get a pin on them.
1706  */
1707 static ssize_t iov_iter_extract_kvec_pages(struct iov_iter *i,
1708 					   struct page ***pages, size_t maxsize,
1709 					   unsigned int maxpages,
1710 					   iov_iter_extraction_t extraction_flags,
1711 					   size_t *offset0)
1712 {
1713 	struct page **p, *page;
1714 	const void *kaddr;
1715 	size_t skip = i->iov_offset, offset, len, size;
1716 	int k;
1717 
1718 	for (;;) {
1719 		if (i->nr_segs == 0)
1720 			return 0;
1721 		size = min(maxsize, i->kvec->iov_len - skip);
1722 		if (size)
1723 			break;
1724 		i->iov_offset = 0;
1725 		i->nr_segs--;
1726 		i->kvec++;
1727 		skip = 0;
1728 	}
1729 
1730 	kaddr = i->kvec->iov_base + skip;
1731 	offset = (unsigned long)kaddr & ~PAGE_MASK;
1732 	*offset0 = offset;
1733 
1734 	maxpages = want_pages_array(pages, size, offset, maxpages);
1735 	if (!maxpages)
1736 		return -ENOMEM;
1737 	p = *pages;
1738 
1739 	kaddr -= offset;
1740 	len = offset + size;
1741 	for (k = 0; k < maxpages; k++) {
1742 		size_t seg = min_t(size_t, len, PAGE_SIZE);
1743 
1744 		if (is_vmalloc_or_module_addr(kaddr))
1745 			page = vmalloc_to_page(kaddr);
1746 		else
1747 			page = virt_to_page(kaddr);
1748 
1749 		p[k] = page;
1750 		len -= seg;
1751 		kaddr += PAGE_SIZE;
1752 	}
1753 
1754 	size = min_t(size_t, size, maxpages * PAGE_SIZE - offset);
1755 	iov_iter_advance(i, size);
1756 	return size;
1757 }
1758 
1759 /*
1760  * Extract a list of contiguous pages from a user iterator and get a pin on
1761  * each of them.  This should only be used if the iterator is user-backed
1762  * (IOBUF/UBUF).
1763  *
1764  * It does not get refs on the pages, but the pages must be unpinned by the
1765  * caller once the transfer is complete.
1766  *
1767  * This is safe to be used where background IO/DMA *is* going to be modifying
1768  * the buffer; using a pin rather than a ref makes forces fork() to give the
1769  * child a copy of the page.
1770  */
1771 static ssize_t iov_iter_extract_user_pages(struct iov_iter *i,
1772 					   struct page ***pages,
1773 					   size_t maxsize,
1774 					   unsigned int maxpages,
1775 					   iov_iter_extraction_t extraction_flags,
1776 					   size_t *offset0)
1777 {
1778 	unsigned long addr;
1779 	unsigned int gup_flags = 0;
1780 	size_t offset;
1781 	bool will_alloc = !*pages;
1782 	int res;
1783 
1784 	if (i->data_source == ITER_DEST)
1785 		gup_flags |= FOLL_WRITE;
1786 	if (extraction_flags & ITER_ALLOW_P2PDMA)
1787 		gup_flags |= FOLL_PCI_P2PDMA;
1788 	if (i->nofault)
1789 		gup_flags |= FOLL_NOFAULT;
1790 
1791 	addr = first_iovec_segment(i, &maxsize);
1792 	*offset0 = offset = addr % PAGE_SIZE;
1793 	addr &= PAGE_MASK;
1794 	maxpages = want_pages_array(pages, maxsize, offset, maxpages);
1795 	if (!maxpages)
1796 		return -ENOMEM;
1797 	res = pin_user_pages_fast(addr, maxpages, gup_flags, *pages);
1798 	if (unlikely(res <= 0)) {
1799 		if (will_alloc) {
1800 			kvfree(*pages);
1801 			*pages = NULL;
1802 		}
1803 		return res;
1804 	}
1805 
1806 	maxsize = min_t(size_t, maxsize, res * PAGE_SIZE - offset);
1807 	iov_iter_advance(i, maxsize);
1808 	return maxsize;
1809 }
1810 
1811 /**
1812  * iov_iter_extract_pages - Extract a list of contiguous pages from an iterator
1813  * @i: The iterator to extract from
1814  * @pages: Where to return the list of pages
1815  * @maxsize: The maximum amount of iterator to extract
1816  * @maxpages: The maximum size of the list of pages
1817  * @extraction_flags: Flags to qualify request
1818  * @offset0: Where to return the starting offset into (*@pages)[0]
1819  *
1820  * Extract a list of contiguous pages from the current point of the iterator,
1821  * advancing the iterator.  The maximum number of pages and the maximum amount
1822  * of page contents can be set.
1823  *
1824  * If *@pages is NULL, a page list will be allocated to the required size and
1825  * *@pages will be set to its base.  If *@pages is not NULL, it will be assumed
1826  * that the caller allocated a page list at least @maxpages in size and this
1827  * will be filled in.
1828  *
1829  * @extraction_flags can have ITER_ALLOW_P2PDMA set to request peer-to-peer DMA
1830  * be allowed on the pages extracted.
1831  *
1832  * The iov_iter_extract_will_pin() function can be used to query how cleanup
1833  * should be performed.
1834  *
1835  * Extra refs or pins on the pages may be obtained as follows:
1836  *
1837  *  (*) If the iterator is user-backed (ITER_IOVEC/ITER_UBUF), pins will be
1838  *      added to the pages, but refs will not be taken.
1839  *      iov_iter_extract_will_pin() will return true.
1840  *
1841  *  (*) If the iterator is ITER_KVEC, ITER_BVEC, ITER_FOLIOQ or ITER_XARRAY, the
1842  *      pages are merely listed; no extra refs or pins are obtained.
1843  *      iov_iter_extract_will_pin() will return 0.
1844  *
1845  * Note also:
1846  *
1847  *  (*) Use with ITER_DISCARD is not supported as that has no content.
1848  *
1849  * On success, the function sets *@pages to the new pagelist, if allocated, and
1850  * sets *offset0 to the offset into the first page.
1851  *
1852  * It may also return -ENOMEM and -EFAULT.
1853  */
1854 ssize_t iov_iter_extract_pages(struct iov_iter *i,
1855 			       struct page ***pages,
1856 			       size_t maxsize,
1857 			       unsigned int maxpages,
1858 			       iov_iter_extraction_t extraction_flags,
1859 			       size_t *offset0)
1860 {
1861 	maxsize = min_t(size_t, min_t(size_t, maxsize, i->count), MAX_RW_COUNT);
1862 	if (!maxsize)
1863 		return 0;
1864 
1865 	if (likely(user_backed_iter(i)))
1866 		return iov_iter_extract_user_pages(i, pages, maxsize,
1867 						   maxpages, extraction_flags,
1868 						   offset0);
1869 	if (iov_iter_is_kvec(i))
1870 		return iov_iter_extract_kvec_pages(i, pages, maxsize,
1871 						   maxpages, extraction_flags,
1872 						   offset0);
1873 	if (iov_iter_is_bvec(i))
1874 		return iov_iter_extract_bvec_pages(i, pages, maxsize,
1875 						   maxpages, extraction_flags,
1876 						   offset0);
1877 	if (iov_iter_is_folioq(i))
1878 		return iov_iter_extract_folioq_pages(i, pages, maxsize,
1879 						     maxpages, extraction_flags,
1880 						     offset0);
1881 	if (iov_iter_is_xarray(i))
1882 		return iov_iter_extract_xarray_pages(i, pages, maxsize,
1883 						     maxpages, extraction_flags,
1884 						     offset0);
1885 	return -EFAULT;
1886 }
1887 EXPORT_SYMBOL_GPL(iov_iter_extract_pages);
1888 
1889 static unsigned int get_contig_folio_len(struct page **pages,
1890 		unsigned int *num_pages, size_t left, size_t offset)
1891 {
1892 	struct folio *folio = page_folio(pages[0]);
1893 	size_t contig_sz = min_t(size_t, PAGE_SIZE - offset, left);
1894 	unsigned int max_pages, i;
1895 	size_t folio_offset, len;
1896 
1897 	folio_offset = PAGE_SIZE * folio_page_idx(folio, pages[0]) + offset;
1898 	len = min(folio_size(folio) - folio_offset, left);
1899 
1900 	/*
1901 	 * We might COW a single page in the middle of a large folio, so we have
1902 	 * to check that all pages belong to the same folio.
1903 	 */
1904 	left -= contig_sz;
1905 	max_pages = DIV_ROUND_UP(offset + len, PAGE_SIZE);
1906 	for (i = 1; i < max_pages; i++) {
1907 		size_t next = min_t(size_t, PAGE_SIZE, left);
1908 
1909 		if (page_folio(pages[i]) != folio ||
1910 		    pages[i] != pages[i - 1] + 1)
1911 			break;
1912 		contig_sz += next;
1913 		left -= next;
1914 	}
1915 
1916 	*num_pages = i;
1917 	return contig_sz;
1918 }
1919 
1920 #define PAGE_PTRS_PER_BVEC     (sizeof(struct bio_vec) / sizeof(struct page *))
1921 
1922 /**
1923  * iov_iter_extract_bvecs - Extract bvecs from an iterator
1924  * @iter:	the iterator to extract from
1925  * @bv:		bvec return array
1926  * @max_size:	maximum size to extract from @iter
1927  * @nr_vecs:	number of vectors in @bv (on in and output)
1928  * @max_vecs:	maximum vectors in @bv, including those filled before calling
1929  * @mem_align_mask:	reject with -EINVAL if the source address or
1930  *		length is not aligned to this mask
1931  * @extraction_flags: flags to qualify request
1932  *
1933  * Like iov_iter_extract_pages(), but returns physically contiguous ranges
1934  * contained in a single folio as a single bvec instead of multiple entries.
1935  *
1936  * Returns the number of bytes extracted when successful, or a negative errno.
1937  * If @nr_vecs was non-zero on entry, the number of successfully extracted bytes
1938  * can be 0.
1939  */
1940 ssize_t iov_iter_extract_bvecs(struct iov_iter *iter, struct bio_vec *bv,
1941 		size_t max_size, unsigned short *nr_vecs,
1942 		unsigned short max_vecs, unsigned mem_align_mask,
1943 		iov_iter_extraction_t extraction_flags)
1944 {
1945 	unsigned short entries_left = max_vecs - *nr_vecs;
1946 	unsigned short nr_pages, i = 0;
1947 	size_t left, offset, len;
1948 	struct page **pages;
1949 	ssize_t size;
1950 
1951 	/*
1952 	 * DMA engines typically have both memory address and length alignment
1953 	 * requirements, so check these against the alignment mask.  For UBUF,
1954 	 * IOVEC and KVEC, only the current segment will be extracted from; for
1955 	 * everything else we might extract from multiple segments, so we need
1956 	 * to check those too.
1957 	 */
1958 	if (likely(iter_is_ubuf(iter) ||
1959 		   iter_is_iovec(iter) ||
1960 		   iov_iter_is_kvec(iter))) {
1961 		unsigned long start = (unsigned long)iter_iov_addr(iter);
1962 
1963 		if ((start | iter_iov_len(iter)) & mem_align_mask)
1964 			return -EINVAL;
1965 	} else if (iov_iter_alignment(iter) & mem_align_mask) {
1966 		return -EINVAL;
1967 	}
1968 
1969 	/*
1970 	 * Move page array up in the allocated memory for the bio vecs as far as
1971 	 * possible so that we can start filling biovecs from the beginning
1972 	 * without overwriting the temporary page array.
1973 	 */
1974 	BUILD_BUG_ON(PAGE_PTRS_PER_BVEC < 2);
1975 	pages = (struct page **)(bv + *nr_vecs) +
1976 		entries_left * (PAGE_PTRS_PER_BVEC - 1);
1977 
1978 	size = iov_iter_extract_pages(iter, &pages, max_size, entries_left,
1979 			extraction_flags, &offset);
1980 	if (unlikely(size <= 0))
1981 		return size ? size : -EFAULT;
1982 
1983 	nr_pages = DIV_ROUND_UP(offset + size, PAGE_SIZE);
1984 	for (left = size; left > 0; left -= len) {
1985 		unsigned int nr_to_add;
1986 
1987 		if (*nr_vecs > 0 &&
1988 		    !zone_device_pages_have_same_pgmap(bv[*nr_vecs - 1].bv_page,
1989 				pages[i]))
1990 			break;
1991 
1992 		len = get_contig_folio_len(&pages[i], &nr_to_add, left, offset);
1993 		bvec_set_page(&bv[*nr_vecs], pages[i], len, offset);
1994 		i += nr_to_add;
1995 		(*nr_vecs)++;
1996 		offset = 0;
1997 	}
1998 
1999 	iov_iter_revert(iter, left);
2000 	if (iov_iter_extract_will_pin(iter)) {
2001 		while (i < nr_pages)
2002 			unpin_user_page(pages[i++]);
2003 	}
2004 	return size - left;
2005 }
2006 EXPORT_SYMBOL_GPL(iov_iter_extract_bvecs);
2007