Lines Matching refs:spd

183 		       struct splice_pipe_desc *spd)  in splice_to_pipe()  argument
185 unsigned int spd_pages = spd->nr_pages; in splice_to_pipe()
209 buf->page = spd->pages[page_nr]; in splice_to_pipe()
210 buf->offset = spd->partial[page_nr].offset; in splice_to_pipe()
211 buf->len = spd->partial[page_nr].len; in splice_to_pipe()
212 buf->private = spd->partial[page_nr].private; in splice_to_pipe()
213 buf->ops = spd->ops; in splice_to_pipe()
214 if (spd->flags & SPLICE_F_GIFT) in splice_to_pipe()
224 if (!--spd->nr_pages) in splice_to_pipe()
232 if (spd->flags & SPLICE_F_NONBLOCK) { in splice_to_pipe()
263 spd->spd_release(spd, page_nr++); in splice_to_pipe()
268 void spd_release_page(struct splice_pipe_desc *spd, unsigned int i) in spd_release_page() argument
270 page_cache_release(spd->pages[i]); in spd_release_page()
277 int splice_grow_spd(const struct pipe_inode_info *pipe, struct splice_pipe_desc *spd) in splice_grow_spd() argument
281 spd->nr_pages_max = buffers; in splice_grow_spd()
285 spd->pages = kmalloc(buffers * sizeof(struct page *), GFP_KERNEL); in splice_grow_spd()
286 spd->partial = kmalloc(buffers * sizeof(struct partial_page), GFP_KERNEL); in splice_grow_spd()
288 if (spd->pages && spd->partial) in splice_grow_spd()
291 kfree(spd->pages); in splice_grow_spd()
292 kfree(spd->partial); in splice_grow_spd()
296 void splice_shrink_spd(struct splice_pipe_desc *spd) in splice_shrink_spd() argument
298 if (spd->nr_pages_max <= PIPE_DEF_BUFFERS) in splice_shrink_spd()
301 kfree(spd->pages); in splice_shrink_spd()
302 kfree(spd->partial); in splice_shrink_spd()
318 struct splice_pipe_desc spd = { in __generic_file_splice_read() local
327 if (splice_grow_spd(pipe, &spd)) in __generic_file_splice_read()
333 nr_pages = min(req_pages, spd.nr_pages_max); in __generic_file_splice_read()
338 spd.nr_pages = find_get_pages_contig(mapping, index, nr_pages, spd.pages); in __generic_file_splice_read()
339 index += spd.nr_pages; in __generic_file_splice_read()
345 if (spd.nr_pages < nr_pages) in __generic_file_splice_read()
347 index, req_pages - spd.nr_pages); in __generic_file_splice_read()
350 while (spd.nr_pages < nr_pages) { in __generic_file_splice_read()
379 spd.pages[spd.nr_pages++] = page; in __generic_file_splice_read()
388 nr_pages = spd.nr_pages; in __generic_file_splice_read()
389 spd.nr_pages = 0; in __generic_file_splice_read()
400 page = spd.pages[page_nr]; in __generic_file_splice_read()
427 page_cache_release(spd.pages[page_nr]); in __generic_file_splice_read()
428 spd.pages[page_nr] = page; in __generic_file_splice_read()
485 spd.partial[page_nr].offset = loff; in __generic_file_splice_read()
486 spd.partial[page_nr].len = this_len; in __generic_file_splice_read()
489 spd.nr_pages++; in __generic_file_splice_read()
498 page_cache_release(spd.pages[page_nr++]); in __generic_file_splice_read()
501 if (spd.nr_pages) in __generic_file_splice_read()
502 error = splice_to_pipe(pipe, &spd); in __generic_file_splice_read()
504 splice_shrink_spd(&spd); in __generic_file_splice_read()
620 struct splice_pipe_desc spd = { in default_file_splice_read() local
629 if (splice_grow_spd(pipe, &spd)) in default_file_splice_read()
634 if (spd.nr_pages_max > PIPE_DEF_BUFFERS) { in default_file_splice_read()
635 vec = kmalloc(spd.nr_pages_max * sizeof(struct iovec), GFP_KERNEL); in default_file_splice_read()
643 for (i = 0; i < nr_pages && i < spd.nr_pages_max && len; i++) { in default_file_splice_read()
654 spd.pages[i] = page; in default_file_splice_read()
655 spd.nr_pages++; in default_file_splice_read()
660 res = kernel_readv(in, vec, spd.nr_pages, *ppos); in default_file_splice_read()
671 for (i = 0; i < spd.nr_pages; i++) { in default_file_splice_read()
673 spd.partial[i].offset = 0; in default_file_splice_read()
674 spd.partial[i].len = this_len; in default_file_splice_read()
676 __free_page(spd.pages[i]); in default_file_splice_read()
677 spd.pages[i] = NULL; in default_file_splice_read()
682 spd.nr_pages -= nr_freed; in default_file_splice_read()
684 res = splice_to_pipe(pipe, &spd); in default_file_splice_read()
691 splice_shrink_spd(&spd); in default_file_splice_read()
695 for (i = 0; i < spd.nr_pages; i++) in default_file_splice_read()
696 __free_page(spd.pages[i]); in default_file_splice_read()
1589 struct splice_pipe_desc spd = { in vmsplice_to_pipe() local
1603 if (splice_grow_spd(pipe, &spd)) in vmsplice_to_pipe()
1606 spd.nr_pages = get_iovec_page_array(iov, nr_segs, spd.pages, in vmsplice_to_pipe()
1607 spd.partial, false, in vmsplice_to_pipe()
1608 spd.nr_pages_max); in vmsplice_to_pipe()
1609 if (spd.nr_pages <= 0) in vmsplice_to_pipe()
1610 ret = spd.nr_pages; in vmsplice_to_pipe()
1612 ret = splice_to_pipe(pipe, &spd); in vmsplice_to_pipe()
1614 splice_shrink_spd(&spd); in vmsplice_to_pipe()