xref: /linux/lib/iov_iter.c (revision ed02f4f7ad9b5dabae2118e642cbbafe7dc9bb62)
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 	/* iovec and kvec have identical layouts */
868 	if (likely(iter_is_iovec(i) || iov_iter_is_kvec(i)))
869 		return iov_iter_alignment_iovec(i);
870 
871 	if (iov_iter_is_bvec(i))
872 		return iov_iter_alignment_bvec(i);
873 
874 	/* With both xarray and folioq types, we're dealing with whole folios. */
875 	if (iov_iter_is_folioq(i) || iov_iter_is_dmabuf_map(i))
876 		return i->iov_offset | i->count;
877 	if (iov_iter_is_xarray(i))
878 		return (i->xarray_start + i->iov_offset) | i->count;
879 
880 	return 0;
881 }
882 EXPORT_SYMBOL(iov_iter_alignment);
883 
884 unsigned long iov_iter_gap_alignment(const struct iov_iter *i)
885 {
886 	unsigned long res = 0;
887 	unsigned long v = 0;
888 	size_t size = i->count;
889 	unsigned k;
890 
891 	if (iter_is_ubuf(i) || iov_iter_is_dmabuf_map(i))
892 		return 0;
893 
894 	if (WARN_ON(!iter_is_iovec(i)))
895 		return ~0U;
896 
897 	for (k = 0; k < i->nr_segs; k++) {
898 		const struct iovec *iov = iter_iov(i) + k;
899 		if (iov->iov_len) {
900 			unsigned long base = (unsigned long)iov->iov_base;
901 			if (v) // if not the first one
902 				res |= base | v; // this start | previous end
903 			v = base + iov->iov_len;
904 			if (size <= iov->iov_len)
905 				break;
906 			size -= iov->iov_len;
907 		}
908 	}
909 	return res;
910 }
911 EXPORT_SYMBOL(iov_iter_gap_alignment);
912 
913 static int want_pages_array(struct page ***res, size_t size,
914 			    size_t start, unsigned int maxpages)
915 {
916 	unsigned int count = DIV_ROUND_UP(size + start, PAGE_SIZE);
917 
918 	if (count > maxpages)
919 		count = maxpages;
920 	WARN_ON(!count);	// caller should've prevented that
921 	if (!*res) {
922 		*res = kvmalloc_objs(struct page *, count);
923 		if (!*res)
924 			return 0;
925 	}
926 	return count;
927 }
928 
929 static ssize_t iter_folioq_get_pages(struct iov_iter *iter,
930 				     struct page ***ppages, size_t maxsize,
931 				     unsigned maxpages, size_t *_start_offset)
932 {
933 	const struct folio_queue *folioq = iter->folioq;
934 	struct page **pages;
935 	unsigned int slot = iter->folioq_slot;
936 	size_t extracted = 0, count = iter->count, iov_offset = iter->iov_offset;
937 
938 	if (slot >= folioq_nr_slots(folioq)) {
939 		folioq = folioq->next;
940 		slot = 0;
941 		if (WARN_ON(iov_offset != 0))
942 			return -EIO;
943 	}
944 
945 	maxpages = want_pages_array(ppages, maxsize, iov_offset & ~PAGE_MASK, maxpages);
946 	if (!maxpages)
947 		return -ENOMEM;
948 	*_start_offset = iov_offset & ~PAGE_MASK;
949 	pages = *ppages;
950 
951 	for (;;) {
952 		struct folio *folio = folioq_folio(folioq, slot);
953 		size_t offset = iov_offset, fsize = folioq_folio_size(folioq, slot);
954 		size_t part = PAGE_SIZE - offset % PAGE_SIZE;
955 
956 		if (offset < fsize) {
957 			part = umin(part, umin(maxsize - extracted, fsize - offset));
958 			count -= part;
959 			iov_offset += part;
960 			extracted += part;
961 
962 			*pages = folio_page(folio, offset / PAGE_SIZE);
963 			get_page(*pages);
964 			pages++;
965 			maxpages--;
966 		}
967 
968 		if (maxpages == 0 || extracted >= maxsize)
969 			break;
970 
971 		if (iov_offset >= fsize) {
972 			iov_offset = 0;
973 			slot++;
974 			if (slot == folioq_nr_slots(folioq) && folioq->next) {
975 				folioq = folioq->next;
976 				slot = 0;
977 			}
978 		}
979 	}
980 
981 	iter->count = count;
982 	iter->iov_offset = iov_offset;
983 	iter->folioq = folioq;
984 	iter->folioq_slot = slot;
985 	return extracted;
986 }
987 
988 static ssize_t iter_xarray_populate_pages(struct page **pages, struct xarray *xa,
989 					  pgoff_t index, unsigned int nr_pages)
990 {
991 	XA_STATE(xas, xa, index);
992 	struct folio *folio;
993 	unsigned int ret = 0;
994 
995 	rcu_read_lock();
996 	for (folio = xas_load(&xas); folio; folio = xas_next(&xas)) {
997 		if (xas_retry(&xas, folio))
998 			continue;
999 
1000 		/* Has the folio moved or been split? */
1001 		if (unlikely(folio != xas_reload(&xas))) {
1002 			xas_reset(&xas);
1003 			continue;
1004 		}
1005 
1006 		pages[ret] = folio_file_page(folio, xas.xa_index);
1007 		folio_get(folio);
1008 		if (++ret == nr_pages)
1009 			break;
1010 	}
1011 	rcu_read_unlock();
1012 	return ret;
1013 }
1014 
1015 static ssize_t iter_xarray_get_pages(struct iov_iter *i,
1016 				     struct page ***pages, size_t maxsize,
1017 				     unsigned maxpages, size_t *_start_offset)
1018 {
1019 	unsigned nr, offset, count;
1020 	pgoff_t index;
1021 	loff_t pos;
1022 
1023 	pos = i->xarray_start + i->iov_offset;
1024 	index = pos >> PAGE_SHIFT;
1025 	offset = pos & ~PAGE_MASK;
1026 	*_start_offset = offset;
1027 
1028 	count = want_pages_array(pages, maxsize, offset, maxpages);
1029 	if (!count)
1030 		return -ENOMEM;
1031 	nr = iter_xarray_populate_pages(*pages, i->xarray, index, count);
1032 	if (nr == 0)
1033 		return 0;
1034 
1035 	maxsize = min_t(size_t, nr * PAGE_SIZE - offset, maxsize);
1036 	i->iov_offset += maxsize;
1037 	i->count -= maxsize;
1038 	return maxsize;
1039 }
1040 
1041 /* must be done on non-empty ITER_UBUF or ITER_IOVEC one */
1042 static unsigned long first_iovec_segment(const struct iov_iter *i, size_t *size)
1043 {
1044 	size_t skip;
1045 	long k;
1046 
1047 	if (iter_is_ubuf(i))
1048 		return (unsigned long)i->ubuf + i->iov_offset;
1049 
1050 	for (k = 0, skip = i->iov_offset; k < i->nr_segs; k++, skip = 0) {
1051 		const struct iovec *iov = iter_iov(i) + k;
1052 		size_t len = iov->iov_len - skip;
1053 
1054 		if (unlikely(!len))
1055 			continue;
1056 		if (*size > len)
1057 			*size = len;
1058 		return (unsigned long)iov->iov_base + skip;
1059 	}
1060 	BUG(); // if it had been empty, we wouldn't get called
1061 }
1062 
1063 /* must be done on non-empty ITER_BVEC one */
1064 static struct page *first_bvec_segment(const struct iov_iter *i,
1065 				       size_t *size, size_t *start)
1066 {
1067 	struct page *page;
1068 	size_t skip = i->iov_offset, len;
1069 
1070 	len = i->bvec->bv_len - skip;
1071 	if (*size > len)
1072 		*size = len;
1073 	skip += i->bvec->bv_offset;
1074 	page = i->bvec->bv_page + skip / PAGE_SIZE;
1075 	*start = skip % PAGE_SIZE;
1076 	return page;
1077 }
1078 
1079 static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,
1080 		   struct page ***pages, size_t maxsize,
1081 		   unsigned int maxpages, size_t *start)
1082 {
1083 	unsigned int n, gup_flags = 0;
1084 
1085 	if (maxsize > i->count)
1086 		maxsize = i->count;
1087 	if (!maxsize)
1088 		return 0;
1089 	if (maxsize > MAX_RW_COUNT)
1090 		maxsize = MAX_RW_COUNT;
1091 
1092 	if (likely(user_backed_iter(i))) {
1093 		unsigned long addr;
1094 		int res;
1095 
1096 		if (iov_iter_rw(i) != WRITE)
1097 			gup_flags |= FOLL_WRITE;
1098 		if (i->nofault)
1099 			gup_flags |= FOLL_NOFAULT;
1100 
1101 		addr = first_iovec_segment(i, &maxsize);
1102 		*start = addr % PAGE_SIZE;
1103 		addr &= PAGE_MASK;
1104 		n = want_pages_array(pages, maxsize, *start, maxpages);
1105 		if (!n)
1106 			return -ENOMEM;
1107 		res = get_user_pages_fast(addr, n, gup_flags, *pages);
1108 		if (unlikely(res <= 0))
1109 			return res;
1110 		maxsize = min_t(size_t, maxsize, res * PAGE_SIZE - *start);
1111 		iov_iter_advance(i, maxsize);
1112 		return maxsize;
1113 	}
1114 	if (iov_iter_is_bvec(i)) {
1115 		struct page **p;
1116 		struct page *page;
1117 
1118 		page = first_bvec_segment(i, &maxsize, start);
1119 		n = want_pages_array(pages, maxsize, *start, maxpages);
1120 		if (!n)
1121 			return -ENOMEM;
1122 		p = *pages;
1123 		for (int k = 0; k < n; k++) {
1124 			struct folio *folio = page_folio(page + k);
1125 			p[k] = page + k;
1126 			if (!folio_test_slab(folio))
1127 				folio_get(folio);
1128 		}
1129 		maxsize = min_t(size_t, maxsize, n * PAGE_SIZE - *start);
1130 		i->count -= maxsize;
1131 		i->iov_offset += maxsize;
1132 		if (i->iov_offset == i->bvec->bv_len) {
1133 			i->iov_offset = 0;
1134 			i->bvec++;
1135 			i->nr_segs--;
1136 		}
1137 		return maxsize;
1138 	}
1139 	if (iov_iter_is_folioq(i))
1140 		return iter_folioq_get_pages(i, pages, maxsize, maxpages, start);
1141 	if (iov_iter_is_xarray(i))
1142 		return iter_xarray_get_pages(i, pages, maxsize, maxpages, start);
1143 	return -EFAULT;
1144 }
1145 
1146 ssize_t iov_iter_get_pages2(struct iov_iter *i, struct page **pages,
1147 		size_t maxsize, unsigned maxpages, size_t *start)
1148 {
1149 	if (!maxpages)
1150 		return 0;
1151 	BUG_ON(!pages);
1152 
1153 	return __iov_iter_get_pages_alloc(i, &pages, maxsize, maxpages, start);
1154 }
1155 EXPORT_SYMBOL(iov_iter_get_pages2);
1156 
1157 ssize_t iov_iter_get_pages_alloc2(struct iov_iter *i,
1158 		struct page ***pages, size_t maxsize, size_t *start)
1159 {
1160 	ssize_t len;
1161 
1162 	*pages = NULL;
1163 
1164 	len = __iov_iter_get_pages_alloc(i, pages, maxsize, ~0U, start);
1165 	if (len <= 0) {
1166 		kvfree(*pages);
1167 		*pages = NULL;
1168 	}
1169 	return len;
1170 }
1171 EXPORT_SYMBOL(iov_iter_get_pages_alloc2);
1172 
1173 static int iov_npages(const struct iov_iter *i, int maxpages)
1174 {
1175 	size_t skip = i->iov_offset, size = i->count;
1176 	const struct iovec *p;
1177 	int npages = 0;
1178 
1179 	for (p = iter_iov(i); size; skip = 0, p++) {
1180 		unsigned offs = offset_in_page(p->iov_base + skip);
1181 		size_t len = min(p->iov_len - skip, size);
1182 
1183 		if (len) {
1184 			size -= len;
1185 			npages += DIV_ROUND_UP(offs + len, PAGE_SIZE);
1186 			if (unlikely(npages > maxpages))
1187 				return maxpages;
1188 		}
1189 	}
1190 	return npages;
1191 }
1192 
1193 static int bvec_npages(const struct iov_iter *i, int maxpages)
1194 {
1195 	size_t skip = i->iov_offset, size = i->count;
1196 	const struct bio_vec *p;
1197 	int npages = 0;
1198 
1199 	for (p = i->bvec; size; skip = 0, p++) {
1200 		unsigned offs = (p->bv_offset + skip) % PAGE_SIZE;
1201 		size_t len = min(p->bv_len - skip, size);
1202 
1203 		size -= len;
1204 		npages += DIV_ROUND_UP(offs + len, PAGE_SIZE);
1205 		if (unlikely(npages > maxpages))
1206 			return maxpages;
1207 	}
1208 	return npages;
1209 }
1210 
1211 int iov_iter_npages(const struct iov_iter *i, int maxpages)
1212 {
1213 	if (unlikely(!i->count))
1214 		return 0;
1215 	if (likely(iter_is_ubuf(i))) {
1216 		unsigned offs = offset_in_page(i->ubuf + i->iov_offset);
1217 		int npages = DIV_ROUND_UP(offs + i->count, PAGE_SIZE);
1218 		return min(npages, maxpages);
1219 	}
1220 	/* iovec and kvec have identical layouts */
1221 	if (likely(iter_is_iovec(i) || iov_iter_is_kvec(i)))
1222 		return iov_npages(i, maxpages);
1223 	if (iov_iter_is_bvec(i))
1224 		return bvec_npages(i, maxpages);
1225 	if (iov_iter_is_folioq(i)) {
1226 		unsigned offset = i->iov_offset % PAGE_SIZE;
1227 		int npages = DIV_ROUND_UP(offset + i->count, PAGE_SIZE);
1228 		return min(npages, maxpages);
1229 	}
1230 	if (iov_iter_is_xarray(i)) {
1231 		unsigned offset = (i->xarray_start + i->iov_offset) % PAGE_SIZE;
1232 		int npages = DIV_ROUND_UP(offset + i->count, PAGE_SIZE);
1233 		return min(npages, maxpages);
1234 	}
1235 	return 0;
1236 }
1237 EXPORT_SYMBOL(iov_iter_npages);
1238 
1239 const void *dup_iter(struct iov_iter *new, struct iov_iter *old, gfp_t flags)
1240 {
1241 	*new = *old;
1242 	if (iov_iter_is_bvec(new))
1243 		return new->bvec = kmemdup_array(new->bvec,
1244 				    new->nr_segs, sizeof(struct bio_vec),
1245 				    flags);
1246 	else if (iov_iter_is_kvec(new) || iter_is_iovec(new))
1247 		/* iovec and kvec have identical layout */
1248 		return new->__iov = kmemdup_array(new->__iov,
1249 				   new->nr_segs, sizeof(struct iovec),
1250 				   flags);
1251 	return NULL;
1252 }
1253 EXPORT_SYMBOL(dup_iter);
1254 
1255 static __noclone int copy_compat_iovec_from_user(struct iovec *iov,
1256 		const struct iovec __user *uvec, u32 nr_segs)
1257 {
1258 	const struct compat_iovec __user *uiov =
1259 		(const struct compat_iovec __user *)uvec;
1260 	int ret = -EFAULT;
1261 	u32 i;
1262 
1263 	if (!user_access_begin(uiov, nr_segs * sizeof(*uiov)))
1264 		return -EFAULT;
1265 
1266 	for (i = 0; i < nr_segs; i++) {
1267 		compat_uptr_t buf;
1268 		compat_ssize_t len;
1269 
1270 		unsafe_get_user(len, &uiov[i].iov_len, uaccess_end);
1271 		unsafe_get_user(buf, &uiov[i].iov_base, uaccess_end);
1272 
1273 		/* check for compat_size_t not fitting in compat_ssize_t .. */
1274 		if (len < 0) {
1275 			ret = -EINVAL;
1276 			goto uaccess_end;
1277 		}
1278 		iov[i].iov_base = compat_ptr(buf);
1279 		iov[i].iov_len = len;
1280 	}
1281 
1282 	ret = 0;
1283 uaccess_end:
1284 	user_access_end();
1285 	return ret;
1286 }
1287 
1288 static __noclone int copy_iovec_from_user(struct iovec *iov,
1289 		const struct iovec __user *uiov, unsigned long nr_segs)
1290 {
1291 	int ret = -EFAULT;
1292 
1293 	if (!user_access_begin(uiov, nr_segs * sizeof(*uiov)))
1294 		return -EFAULT;
1295 
1296 	do {
1297 		void __user *buf;
1298 		ssize_t len;
1299 
1300 		unsafe_get_user(len, &uiov->iov_len, uaccess_end);
1301 		unsafe_get_user(buf, &uiov->iov_base, uaccess_end);
1302 
1303 		/* check for size_t not fitting in ssize_t .. */
1304 		if (unlikely(len < 0)) {
1305 			ret = -EINVAL;
1306 			goto uaccess_end;
1307 		}
1308 		iov->iov_base = buf;
1309 		iov->iov_len = len;
1310 
1311 		uiov++; iov++;
1312 	} while (--nr_segs);
1313 
1314 	ret = 0;
1315 uaccess_end:
1316 	user_access_end();
1317 	return ret;
1318 }
1319 
1320 struct iovec *iovec_from_user(const struct iovec __user *uvec,
1321 		unsigned long nr_segs, unsigned long fast_segs,
1322 		struct iovec *fast_iov, bool compat)
1323 {
1324 	struct iovec *iov = fast_iov;
1325 	int ret;
1326 
1327 	/*
1328 	 * SuS says "The readv() function *may* fail if the iovcnt argument was
1329 	 * less than or equal to 0, or greater than {IOV_MAX}.  Linux has
1330 	 * traditionally returned zero for zero segments, so...
1331 	 */
1332 	if (nr_segs == 0)
1333 		return iov;
1334 	if (nr_segs > UIO_MAXIOV)
1335 		return ERR_PTR(-EINVAL);
1336 	if (nr_segs > fast_segs) {
1337 		iov = kmalloc_objs(struct iovec, nr_segs);
1338 		if (!iov)
1339 			return ERR_PTR(-ENOMEM);
1340 	}
1341 
1342 	if (unlikely(compat))
1343 		ret = copy_compat_iovec_from_user(iov, uvec, nr_segs);
1344 	else
1345 		ret = copy_iovec_from_user(iov, uvec, nr_segs);
1346 	if (ret) {
1347 		if (iov != fast_iov)
1348 			kfree(iov);
1349 		return ERR_PTR(ret);
1350 	}
1351 
1352 	return iov;
1353 }
1354 
1355 /*
1356  * Single segment iovec supplied by the user, import it as ITER_UBUF.
1357  */
1358 static ssize_t __import_iovec_ubuf(int type, const struct iovec __user *uvec,
1359 				   struct iovec **iovp, struct iov_iter *i,
1360 				   bool compat)
1361 {
1362 	struct iovec *iov = *iovp;
1363 	ssize_t ret;
1364 
1365 	*iovp = NULL;
1366 
1367 	if (compat)
1368 		ret = copy_compat_iovec_from_user(iov, uvec, 1);
1369 	else
1370 		ret = copy_iovec_from_user(iov, uvec, 1);
1371 	if (unlikely(ret))
1372 		return ret;
1373 
1374 	ret = import_ubuf(type, iov->iov_base, iov->iov_len, i);
1375 	if (unlikely(ret))
1376 		return ret;
1377 	return i->count;
1378 }
1379 
1380 ssize_t __import_iovec(int type, const struct iovec __user *uvec,
1381 		 unsigned nr_segs, unsigned fast_segs, struct iovec **iovp,
1382 		 struct iov_iter *i, bool compat)
1383 {
1384 	ssize_t total_len = 0;
1385 	unsigned long seg;
1386 	struct iovec *iov;
1387 
1388 	if (nr_segs == 1)
1389 		return __import_iovec_ubuf(type, uvec, iovp, i, compat);
1390 
1391 	iov = iovec_from_user(uvec, nr_segs, fast_segs, *iovp, compat);
1392 	if (IS_ERR(iov)) {
1393 		*iovp = NULL;
1394 		return PTR_ERR(iov);
1395 	}
1396 
1397 	/*
1398 	 * According to the Single Unix Specification we should return EINVAL if
1399 	 * an element length is < 0 when cast to ssize_t or if the total length
1400 	 * would overflow the ssize_t return value of the system call.
1401 	 *
1402 	 * Linux caps all read/write calls to MAX_RW_COUNT, and avoids the
1403 	 * overflow case.
1404 	 */
1405 	for (seg = 0; seg < nr_segs; seg++) {
1406 		ssize_t len = (ssize_t)iov[seg].iov_len;
1407 
1408 		if (!access_ok(iov[seg].iov_base, len)) {
1409 			if (iov != *iovp)
1410 				kfree(iov);
1411 			*iovp = NULL;
1412 			return -EFAULT;
1413 		}
1414 
1415 		if (len > MAX_RW_COUNT - total_len) {
1416 			len = MAX_RW_COUNT - total_len;
1417 			iov[seg].iov_len = len;
1418 		}
1419 		total_len += len;
1420 	}
1421 
1422 	iov_iter_init(i, type, iov, nr_segs, total_len);
1423 	if (iov == *iovp)
1424 		*iovp = NULL;
1425 	else
1426 		*iovp = iov;
1427 	return total_len;
1428 }
1429 
1430 /**
1431  * import_iovec() - Copy an array of &struct iovec from userspace
1432  *     into the kernel, check that it is valid, and initialize a new
1433  *     &struct iov_iter iterator to access it.
1434  *
1435  * @type: One of %READ or %WRITE.
1436  * @uvec: Pointer to the userspace array.
1437  * @nr_segs: Number of elements in userspace array.
1438  * @fast_segs: Number of elements in @iov.
1439  * @iovp: (input and output parameter) Pointer to pointer to (usually small
1440  *     on-stack) kernel array.
1441  * @i: Pointer to iterator that will be initialized on success.
1442  *
1443  * If the array pointed to by *@iov is large enough to hold all @nr_segs,
1444  * then this function places %NULL in *@iov on return. Otherwise, a new
1445  * array will be allocated and the result placed in *@iov. This means that
1446  * the caller may call kfree() on *@iov regardless of whether the small
1447  * on-stack array was used or not (and regardless of whether this function
1448  * returns an error or not).
1449  *
1450  * Return: Negative error code on error, bytes imported on success
1451  */
1452 ssize_t import_iovec(int type, const struct iovec __user *uvec,
1453 		 unsigned nr_segs, unsigned fast_segs,
1454 		 struct iovec **iovp, struct iov_iter *i)
1455 {
1456 	return __import_iovec(type, uvec, nr_segs, fast_segs, iovp, i,
1457 			      in_compat_syscall());
1458 }
1459 EXPORT_SYMBOL(import_iovec);
1460 
1461 int import_ubuf(int rw, void __user *buf, size_t len, struct iov_iter *i)
1462 {
1463 	if (len > MAX_RW_COUNT)
1464 		len = MAX_RW_COUNT;
1465 	if (unlikely(!access_ok(buf, len)))
1466 		return -EFAULT;
1467 
1468 	iov_iter_ubuf(i, rw, buf, len);
1469 	return 0;
1470 }
1471 EXPORT_SYMBOL_GPL(import_ubuf);
1472 
1473 /**
1474  * iov_iter_restore() - Restore a &struct iov_iter to the same state as when
1475  *     iov_iter_save_state() was called.
1476  *
1477  * @i: &struct iov_iter to restore
1478  * @state: state to restore from
1479  *
1480  * Used after iov_iter_save_state() to bring restore @i, if operations may
1481  * have advanced it.
1482  *
1483  * Note: only works on ITER_IOVEC, ITER_BVEC, and ITER_KVEC
1484  */
1485 void iov_iter_restore(struct iov_iter *i, struct iov_iter_state *state)
1486 {
1487 	if (WARN_ON_ONCE(!iov_iter_is_bvec(i) && !iter_is_iovec(i) &&
1488 			 !iter_is_ubuf(i) && !iov_iter_is_kvec(i) &&
1489 			 !iov_iter_is_dmabuf_map(i)))
1490 		return;
1491 	i->iov_offset = state->iov_offset;
1492 	i->count = state->count;
1493 	if (iter_is_ubuf(i) || iov_iter_is_dmabuf_map(i))
1494 		return;
1495 	/*
1496 	 * For the *vec iters, nr_segs + iov is constant - if we increment
1497 	 * the vec, then we also decrement the nr_segs count. Hence we don't
1498 	 * need to track both of these, just one is enough and we can deduct
1499 	 * the other from that. ITER_KVEC and ITER_IOVEC are the same struct
1500 	 * size, so we can just increment the iov pointer as they are unionzed.
1501 	 * ITER_BVEC _may_ be the same size on some archs, but on others it is
1502 	 * not. Be safe and handle it separately.
1503 	 */
1504 	BUILD_BUG_ON(sizeof(struct iovec) != sizeof(struct kvec));
1505 	if (iov_iter_is_bvec(i))
1506 		i->bvec -= state->nr_segs - i->nr_segs;
1507 	else
1508 		i->__iov -= state->nr_segs - i->nr_segs;
1509 	i->nr_segs = state->nr_segs;
1510 }
1511 EXPORT_SYMBOL_FOR_MODULES(iov_iter_restore, "vmw_vsock_virtio_transport_common");
1512 
1513 /*
1514  * Extract a list of contiguous pages from an ITER_FOLIOQ iterator.  This does
1515  * not get references on the pages, nor does it get a pin on them.
1516  */
1517 static ssize_t iov_iter_extract_folioq_pages(struct iov_iter *i,
1518 					     struct page ***pages, size_t maxsize,
1519 					     unsigned int maxpages,
1520 					     iov_iter_extraction_t extraction_flags,
1521 					     size_t *offset0)
1522 {
1523 	const struct folio_queue *folioq = i->folioq;
1524 	struct page **p;
1525 	unsigned int nr = 0;
1526 	size_t extracted = 0, offset, slot = i->folioq_slot;
1527 
1528 	if (slot >= folioq_nr_slots(folioq)) {
1529 		folioq = folioq->next;
1530 		slot = 0;
1531 		if (WARN_ON(i->iov_offset != 0))
1532 			return -EIO;
1533 	}
1534 
1535 	offset = i->iov_offset & ~PAGE_MASK;
1536 	*offset0 = offset;
1537 
1538 	maxpages = want_pages_array(pages, maxsize, offset, maxpages);
1539 	if (!maxpages)
1540 		return -ENOMEM;
1541 	p = *pages;
1542 
1543 	for (;;) {
1544 		struct folio *folio = folioq_folio(folioq, slot);
1545 		size_t offset = i->iov_offset, fsize = folioq_folio_size(folioq, slot);
1546 		size_t part = PAGE_SIZE - offset % PAGE_SIZE;
1547 
1548 		if (offset < fsize) {
1549 			part = umin(part, umin(maxsize - extracted, fsize - offset));
1550 			i->count -= part;
1551 			i->iov_offset += part;
1552 			extracted += part;
1553 
1554 			p[nr++] = folio_page(folio, offset / PAGE_SIZE);
1555 		}
1556 
1557 		if (nr >= maxpages || extracted >= maxsize)
1558 			break;
1559 
1560 		if (i->iov_offset >= fsize) {
1561 			i->iov_offset = 0;
1562 			slot++;
1563 			if (slot == folioq_nr_slots(folioq) && folioq->next) {
1564 				folioq = folioq->next;
1565 				slot = 0;
1566 			}
1567 		}
1568 	}
1569 
1570 	i->folioq = folioq;
1571 	i->folioq_slot = slot;
1572 	return extracted;
1573 }
1574 
1575 /*
1576  * Extract a list of contiguous pages from an ITER_XARRAY iterator.  This does not
1577  * get references on the pages, nor does it get a pin on them.
1578  */
1579 static ssize_t iov_iter_extract_xarray_pages(struct iov_iter *i,
1580 					     struct page ***pages, size_t maxsize,
1581 					     unsigned int maxpages,
1582 					     iov_iter_extraction_t extraction_flags,
1583 					     size_t *offset0)
1584 {
1585 	struct page **p;
1586 	struct folio *folio;
1587 	unsigned int nr = 0, offset;
1588 	loff_t pos = i->xarray_start + i->iov_offset;
1589 	bool will_alloc = !*pages;
1590 	XA_STATE(xas, i->xarray, pos >> PAGE_SHIFT);
1591 
1592 	offset = pos & ~PAGE_MASK;
1593 	*offset0 = offset;
1594 
1595 	maxpages = want_pages_array(pages, maxsize, offset, maxpages);
1596 	if (!maxpages)
1597 		return -ENOMEM;
1598 	p = *pages;
1599 
1600 	rcu_read_lock();
1601 	for (folio = xas_load(&xas); folio; folio = xas_next(&xas)) {
1602 		if (xas_retry(&xas, folio))
1603 			continue;
1604 
1605 		/* Has the folio moved or been split? */
1606 		if (unlikely(folio != xas_reload(&xas))) {
1607 			xas_reset(&xas);
1608 			continue;
1609 		}
1610 
1611 		p[nr++] = folio_file_page(folio, xas.xa_index);
1612 		if (nr == maxpages)
1613 			break;
1614 	}
1615 	rcu_read_unlock();
1616 
1617 	if (!nr) {
1618 		if (will_alloc) {
1619 			kvfree(*pages);
1620 			*pages = NULL;
1621 		}
1622 		return 0;
1623 	}
1624 
1625 	maxsize = min_t(size_t, nr * PAGE_SIZE - offset, maxsize);
1626 	iov_iter_advance(i, maxsize);
1627 	return maxsize;
1628 }
1629 
1630 /*
1631  * Extract a list of virtually contiguous pages from an ITER_BVEC iterator.
1632  * This does not get references on the pages, nor does it get a pin on them.
1633  */
1634 static ssize_t iov_iter_extract_bvec_pages(struct iov_iter *i,
1635 					   struct page ***pages, size_t maxsize,
1636 					   unsigned int maxpages,
1637 					   iov_iter_extraction_t extraction_flags,
1638 					   size_t *offset0)
1639 {
1640 	size_t skip = i->iov_offset, size = 0;
1641 	struct bvec_iter bi;
1642 	int k = 0;
1643 
1644 	if (i->nr_segs == 0)
1645 		return 0;
1646 
1647 	if (i->iov_offset == i->bvec->bv_len) {
1648 		i->iov_offset = 0;
1649 		i->nr_segs--;
1650 		i->bvec++;
1651 		skip = 0;
1652 	}
1653 	bi.bi_idx = 0;
1654 	bi.bi_size = maxsize;
1655 	bi.bi_offset = skip;
1656 
1657 	maxpages = want_pages_array(pages, maxsize, skip, maxpages);
1658 	if (!maxpages)
1659 		return -ENOMEM;
1660 
1661 	while (bi.bi_size && bi.bi_idx < i->nr_segs) {
1662 		struct bio_vec bv = bvec_iter_bvec(i->bvec, bi);
1663 
1664 		/*
1665 		 * The iov_iter_extract_pages interface only allows an offset
1666 		 * into the first page.  Break out of the loop if we see an
1667 		 * offset into subsequent pages, the caller will have to call
1668 		 * iov_iter_extract_pages again for the reminder.
1669 		 */
1670 		if (k) {
1671 			if (bv.bv_offset)
1672 				break;
1673 		} else {
1674 			*offset0 = bv.bv_offset;
1675 		}
1676 
1677 		(*pages)[k++] = bv.bv_page;
1678 		size += bv.bv_len;
1679 
1680 		if (k >= maxpages)
1681 			break;
1682 
1683 		/*
1684 		 * We are done when the end of the bvec doesn't align to a page
1685 		 * boundary as that would create a hole in the returned space.
1686 		 * The caller will handle this with another call to
1687 		 * iov_iter_extract_pages.
1688 		 */
1689 		if (bv.bv_offset + bv.bv_len != PAGE_SIZE)
1690 			break;
1691 
1692 		bvec_iter_advance_single(i->bvec, &bi, bv.bv_len);
1693 	}
1694 
1695 	iov_iter_advance(i, size);
1696 	return size;
1697 }
1698 
1699 /*
1700  * Extract a list of virtually contiguous pages from an ITER_KVEC iterator.
1701  * This does not get references on the pages, nor does it get a pin on them.
1702  */
1703 static ssize_t iov_iter_extract_kvec_pages(struct iov_iter *i,
1704 					   struct page ***pages, size_t maxsize,
1705 					   unsigned int maxpages,
1706 					   iov_iter_extraction_t extraction_flags,
1707 					   size_t *offset0)
1708 {
1709 	struct page **p, *page;
1710 	const void *kaddr;
1711 	size_t skip = i->iov_offset, offset, len, size;
1712 	int k;
1713 
1714 	for (;;) {
1715 		if (i->nr_segs == 0)
1716 			return 0;
1717 		size = min(maxsize, i->kvec->iov_len - skip);
1718 		if (size)
1719 			break;
1720 		i->iov_offset = 0;
1721 		i->nr_segs--;
1722 		i->kvec++;
1723 		skip = 0;
1724 	}
1725 
1726 	kaddr = i->kvec->iov_base + skip;
1727 	offset = (unsigned long)kaddr & ~PAGE_MASK;
1728 	*offset0 = offset;
1729 
1730 	maxpages = want_pages_array(pages, size, offset, maxpages);
1731 	if (!maxpages)
1732 		return -ENOMEM;
1733 	p = *pages;
1734 
1735 	kaddr -= offset;
1736 	len = offset + size;
1737 	for (k = 0; k < maxpages; k++) {
1738 		size_t seg = min_t(size_t, len, PAGE_SIZE);
1739 
1740 		if (is_vmalloc_or_module_addr(kaddr))
1741 			page = vmalloc_to_page(kaddr);
1742 		else
1743 			page = virt_to_page(kaddr);
1744 
1745 		p[k] = page;
1746 		len -= seg;
1747 		kaddr += PAGE_SIZE;
1748 	}
1749 
1750 	size = min_t(size_t, size, maxpages * PAGE_SIZE - offset);
1751 	iov_iter_advance(i, size);
1752 	return size;
1753 }
1754 
1755 /*
1756  * Extract a list of contiguous pages from a user iterator and get a pin on
1757  * each of them.  This should only be used if the iterator is user-backed
1758  * (IOBUF/UBUF).
1759  *
1760  * It does not get refs on the pages, but the pages must be unpinned by the
1761  * caller once the transfer is complete.
1762  *
1763  * This is safe to be used where background IO/DMA *is* going to be modifying
1764  * the buffer; using a pin rather than a ref makes forces fork() to give the
1765  * child a copy of the page.
1766  */
1767 static ssize_t iov_iter_extract_user_pages(struct iov_iter *i,
1768 					   struct page ***pages,
1769 					   size_t maxsize,
1770 					   unsigned int maxpages,
1771 					   iov_iter_extraction_t extraction_flags,
1772 					   size_t *offset0)
1773 {
1774 	unsigned long addr;
1775 	unsigned int gup_flags = 0;
1776 	size_t offset;
1777 	bool will_alloc = !*pages;
1778 	int res;
1779 
1780 	if (i->data_source == ITER_DEST)
1781 		gup_flags |= FOLL_WRITE;
1782 	if (extraction_flags & ITER_ALLOW_P2PDMA)
1783 		gup_flags |= FOLL_PCI_P2PDMA;
1784 	if (i->nofault)
1785 		gup_flags |= FOLL_NOFAULT;
1786 
1787 	addr = first_iovec_segment(i, &maxsize);
1788 	*offset0 = offset = addr % PAGE_SIZE;
1789 	addr &= PAGE_MASK;
1790 	maxpages = want_pages_array(pages, maxsize, offset, maxpages);
1791 	if (!maxpages)
1792 		return -ENOMEM;
1793 	res = pin_user_pages_fast(addr, maxpages, gup_flags, *pages);
1794 	if (unlikely(res <= 0)) {
1795 		if (will_alloc) {
1796 			kvfree(*pages);
1797 			*pages = NULL;
1798 		}
1799 		return res;
1800 	}
1801 
1802 	maxsize = min_t(size_t, maxsize, res * PAGE_SIZE - offset);
1803 	iov_iter_advance(i, maxsize);
1804 	return maxsize;
1805 }
1806 
1807 /**
1808  * iov_iter_extract_pages - Extract a list of contiguous pages from an iterator
1809  * @i: The iterator to extract from
1810  * @pages: Where to return the list of pages
1811  * @maxsize: The maximum amount of iterator to extract
1812  * @maxpages: The maximum size of the list of pages
1813  * @extraction_flags: Flags to qualify request
1814  * @offset0: Where to return the starting offset into (*@pages)[0]
1815  *
1816  * Extract a list of contiguous pages from the current point of the iterator,
1817  * advancing the iterator.  The maximum number of pages and the maximum amount
1818  * of page contents can be set.
1819  *
1820  * If *@pages is NULL, a page list will be allocated to the required size and
1821  * *@pages will be set to its base.  If *@pages is not NULL, it will be assumed
1822  * that the caller allocated a page list at least @maxpages in size and this
1823  * will be filled in.
1824  *
1825  * @extraction_flags can have ITER_ALLOW_P2PDMA set to request peer-to-peer DMA
1826  * be allowed on the pages extracted.
1827  *
1828  * The iov_iter_extract_will_pin() function can be used to query how cleanup
1829  * should be performed.
1830  *
1831  * Extra refs or pins on the pages may be obtained as follows:
1832  *
1833  *  (*) If the iterator is user-backed (ITER_IOVEC/ITER_UBUF), pins will be
1834  *      added to the pages, but refs will not be taken.
1835  *      iov_iter_extract_will_pin() will return true.
1836  *
1837  *  (*) If the iterator is ITER_KVEC, ITER_BVEC, ITER_FOLIOQ or ITER_XARRAY, the
1838  *      pages are merely listed; no extra refs or pins are obtained.
1839  *      iov_iter_extract_will_pin() will return 0.
1840  *
1841  * Note also:
1842  *
1843  *  (*) Use with ITER_DISCARD is not supported as that has no content.
1844  *
1845  * On success, the function sets *@pages to the new pagelist, if allocated, and
1846  * sets *offset0 to the offset into the first page.
1847  *
1848  * It may also return -ENOMEM and -EFAULT.
1849  */
1850 ssize_t iov_iter_extract_pages(struct iov_iter *i,
1851 			       struct page ***pages,
1852 			       size_t maxsize,
1853 			       unsigned int maxpages,
1854 			       iov_iter_extraction_t extraction_flags,
1855 			       size_t *offset0)
1856 {
1857 	maxsize = min_t(size_t, min_t(size_t, maxsize, i->count), MAX_RW_COUNT);
1858 	if (!maxsize)
1859 		return 0;
1860 
1861 	if (likely(user_backed_iter(i)))
1862 		return iov_iter_extract_user_pages(i, pages, maxsize,
1863 						   maxpages, extraction_flags,
1864 						   offset0);
1865 	if (iov_iter_is_kvec(i))
1866 		return iov_iter_extract_kvec_pages(i, pages, maxsize,
1867 						   maxpages, extraction_flags,
1868 						   offset0);
1869 	if (iov_iter_is_bvec(i))
1870 		return iov_iter_extract_bvec_pages(i, pages, maxsize,
1871 						   maxpages, extraction_flags,
1872 						   offset0);
1873 	if (iov_iter_is_folioq(i))
1874 		return iov_iter_extract_folioq_pages(i, pages, maxsize,
1875 						     maxpages, extraction_flags,
1876 						     offset0);
1877 	if (iov_iter_is_xarray(i))
1878 		return iov_iter_extract_xarray_pages(i, pages, maxsize,
1879 						     maxpages, extraction_flags,
1880 						     offset0);
1881 	return -EFAULT;
1882 }
1883 EXPORT_SYMBOL_GPL(iov_iter_extract_pages);
1884 
1885 static unsigned int get_contig_folio_len(struct page **pages,
1886 		unsigned int *num_pages, size_t left, size_t offset)
1887 {
1888 	struct folio *folio = page_folio(pages[0]);
1889 	size_t contig_sz = min_t(size_t, PAGE_SIZE - offset, left);
1890 	unsigned int max_pages, i;
1891 	size_t folio_offset, len;
1892 
1893 	folio_offset = PAGE_SIZE * folio_page_idx(folio, pages[0]) + offset;
1894 	len = min(folio_size(folio) - folio_offset, left);
1895 
1896 	/*
1897 	 * We might COW a single page in the middle of a large folio, so we have
1898 	 * to check that all pages belong to the same folio.
1899 	 */
1900 	left -= contig_sz;
1901 	max_pages = DIV_ROUND_UP(offset + len, PAGE_SIZE);
1902 	for (i = 1; i < max_pages; i++) {
1903 		size_t next = min_t(size_t, PAGE_SIZE, left);
1904 
1905 		if (page_folio(pages[i]) != folio ||
1906 		    pages[i] != pages[i - 1] + 1)
1907 			break;
1908 		contig_sz += next;
1909 		left -= next;
1910 	}
1911 
1912 	*num_pages = i;
1913 	return contig_sz;
1914 }
1915 
1916 #define PAGE_PTRS_PER_BVEC     (sizeof(struct bio_vec) / sizeof(struct page *))
1917 
1918 /**
1919  * iov_iter_extract_bvecs - Extract bvecs from an iterator
1920  * @iter:	the iterator to extract from
1921  * @bv:		bvec return array
1922  * @max_size:	maximum size to extract from @iter
1923  * @nr_vecs:	number of vectors in @bv (on in and output)
1924  * @max_vecs:	maximum vectors in @bv, including those filled before calling
1925  * @mem_align_mask:	reject with -EINVAL if the source address or
1926  *		length is not aligned to this mask
1927  * @extraction_flags: flags to qualify request
1928  *
1929  * Like iov_iter_extract_pages(), but returns physically contiguous ranges
1930  * contained in a single folio as a single bvec instead of multiple entries.
1931  *
1932  * Returns the number of bytes extracted when successful, or a negative errno.
1933  * If @nr_vecs was non-zero on entry, the number of successfully extracted bytes
1934  * can be 0.
1935  */
1936 ssize_t iov_iter_extract_bvecs(struct iov_iter *iter, struct bio_vec *bv,
1937 		size_t max_size, unsigned short *nr_vecs,
1938 		unsigned short max_vecs, unsigned mem_align_mask,
1939 		iov_iter_extraction_t extraction_flags)
1940 {
1941 	unsigned short entries_left = max_vecs - *nr_vecs;
1942 	unsigned short nr_pages, i = 0;
1943 	size_t left, offset, len;
1944 	struct page **pages;
1945 	ssize_t size;
1946 
1947 	/*
1948 	 * DMA engines typically have both memory address and length alignment
1949 	 * requirements, so check these against the alignment mask.  For UBUF,
1950 	 * IOVEC and KVEC, only the current segment will be extracted from; for
1951 	 * everything else we might extract from multiple segments, so we need
1952 	 * to check those too.
1953 	 */
1954 	if (likely(iter_is_ubuf(iter) ||
1955 		   iter_is_iovec(iter) ||
1956 		   iov_iter_is_kvec(iter))) {
1957 		unsigned long start = (unsigned long)iter_iov_addr(iter);
1958 
1959 		if ((start | iter_iov_len(iter)) & mem_align_mask)
1960 			return -EINVAL;
1961 	} else if (iov_iter_alignment(iter) & mem_align_mask) {
1962 		return -EINVAL;
1963 	}
1964 
1965 	/*
1966 	 * Move page array up in the allocated memory for the bio vecs as far as
1967 	 * possible so that we can start filling biovecs from the beginning
1968 	 * without overwriting the temporary page array.
1969 	 */
1970 	BUILD_BUG_ON(PAGE_PTRS_PER_BVEC < 2);
1971 	pages = (struct page **)(bv + *nr_vecs) +
1972 		entries_left * (PAGE_PTRS_PER_BVEC - 1);
1973 
1974 	size = iov_iter_extract_pages(iter, &pages, max_size, entries_left,
1975 			extraction_flags, &offset);
1976 	if (unlikely(size <= 0))
1977 		return size ? size : -EFAULT;
1978 
1979 	nr_pages = DIV_ROUND_UP(offset + size, PAGE_SIZE);
1980 	for (left = size; left > 0; left -= len) {
1981 		unsigned int nr_to_add;
1982 
1983 		if (*nr_vecs > 0 &&
1984 		    !zone_device_pages_have_same_pgmap(bv[*nr_vecs - 1].bv_page,
1985 				pages[i]))
1986 			break;
1987 
1988 		len = get_contig_folio_len(&pages[i], &nr_to_add, left, offset);
1989 		bvec_set_page(&bv[*nr_vecs], pages[i], len, offset);
1990 		i += nr_to_add;
1991 		(*nr_vecs)++;
1992 		offset = 0;
1993 	}
1994 
1995 	iov_iter_revert(iter, left);
1996 	if (iov_iter_extract_will_pin(iter)) {
1997 		while (i < nr_pages)
1998 			unpin_user_page(pages[i++]);
1999 	}
2000 	return size - left;
2001 }
2002 EXPORT_SYMBOL_GPL(iov_iter_extract_bvecs);
2003