RT-AC66 3.0.0.4.374.130 core
[tomato.git] / release / src-rt-6.x / linux / linux-2.6 / fs / splice.c
blobeee1f4d405369ef66cf7fcd0787c1dfc1448b2cc
1 /*
2 * "splice": joining two ropes together by interweaving their strands.
4 * This is the "extended pipe" functionality, where a pipe is used as
5 * an arbitrary in-memory buffer. Think of a pipe as a small kernel
6 * buffer that you can use to transfer data from one end to the other.
8 * The traditional unix read/write is extended with a "splice()" operation
9 * that transfers data buffers to or from a pipe buffer.
11 * Named by Larry McVoy, original implementation from Linus, extended by
12 * Jens to support splicing to files, network, direct splicing, etc and
13 * fixing lots of bugs.
15 * Copyright (C) 2005-2006 Jens Axboe <axboe@kernel.dk>
16 * Copyright (C) 2005-2006 Linus Torvalds <torvalds@osdl.org>
17 * Copyright (C) 2006 Ingo Molnar <mingo@elte.hu>
20 #include <linux/fs.h>
21 #include <linux/file.h>
22 #include <linux/pagemap.h>
23 #include <linux/splice.h>
24 #include <linux/mm_inline.h>
25 #include <linux/swap.h>
26 #include <linux/writeback.h>
27 #include <linux/buffer_head.h>
28 #include <linux/module.h>
29 #include <linux/syscalls.h>
30 #include <linux/uio.h>
31 #include <linux/security.h>
34 * Attempt to steal a page from a pipe buffer. This should perhaps go into
35 * a vm helper function, it's already simplified quite a bit by the
36 * addition of remove_mapping(). If success is returned, the caller may
37 * attempt to reuse this page for another destination.
39 static int page_cache_pipe_buf_steal(struct pipe_inode_info *pipe,
40 struct pipe_buffer *buf)
42 struct page *page = buf->page;
43 struct address_space *mapping;
45 lock_page(page);
47 mapping = page_mapping(page);
48 if (mapping) {
49 WARN_ON(!PageUptodate(page));
52 * At least for ext2 with nobh option, we need to wait on
53 * writeback completing on this page, since we'll remove it
54 * from the pagecache. Otherwise truncate wont wait on the
55 * page, allowing the disk blocks to be reused by someone else
56 * before we actually wrote our data to them. fs corruption
57 * ensues.
59 wait_on_page_writeback(page);
61 if (PagePrivate(page))
62 try_to_release_page(page, GFP_KERNEL);
65 * If we succeeded in removing the mapping, set LRU flag
66 * and return good.
68 if (remove_mapping(mapping, page)) {
69 buf->flags |= PIPE_BUF_FLAG_LRU;
70 return 0;
75 * Raced with truncate or failed to remove page from current
76 * address space, unlock and return failure.
78 unlock_page(page);
79 return 1;
82 static void page_cache_pipe_buf_release(struct pipe_inode_info *pipe,
83 struct pipe_buffer *buf)
85 page_cache_release(buf->page);
86 buf->flags &= ~PIPE_BUF_FLAG_LRU;
90 * Check whether the contents of buf is OK to access. Since the content
91 * is a page cache page, IO may be in flight.
93 static int page_cache_pipe_buf_confirm(struct pipe_inode_info *pipe,
94 struct pipe_buffer *buf)
96 struct page *page = buf->page;
97 int err;
99 if (!PageUptodate(page)) {
100 lock_page(page);
103 * Page got truncated/unhashed. This will cause a 0-byte
104 * splice, if this is the first page.
106 if (!page->mapping) {
107 err = -ENODATA;
108 goto error;
112 * Uh oh, read-error from disk.
114 if (!PageUptodate(page)) {
115 err = -EIO;
116 goto error;
120 * Page is ok afterall, we are done.
122 unlock_page(page);
125 return 0;
126 error:
127 unlock_page(page);
128 return err;
131 static const struct pipe_buf_operations page_cache_pipe_buf_ops = {
132 .can_merge = 0,
133 .map = generic_pipe_buf_map,
134 .unmap = generic_pipe_buf_unmap,
135 .confirm = page_cache_pipe_buf_confirm,
136 .release = page_cache_pipe_buf_release,
137 .steal = page_cache_pipe_buf_steal,
138 .get = generic_pipe_buf_get,
141 static int user_page_pipe_buf_steal(struct pipe_inode_info *pipe,
142 struct pipe_buffer *buf)
144 if (!(buf->flags & PIPE_BUF_FLAG_GIFT))
145 return 1;
147 buf->flags |= PIPE_BUF_FLAG_LRU;
148 return generic_pipe_buf_steal(pipe, buf);
151 static const struct pipe_buf_operations user_page_pipe_buf_ops = {
152 .can_merge = 0,
153 .map = generic_pipe_buf_map,
154 .unmap = generic_pipe_buf_unmap,
155 .confirm = generic_pipe_buf_confirm,
156 .release = page_cache_pipe_buf_release,
157 .steal = user_page_pipe_buf_steal,
158 .get = generic_pipe_buf_get,
162 * splice_to_pipe - fill passed data into a pipe
163 * @pipe: pipe to fill
164 * @spd: data to fill
166 * Description:
167 * @spd contains a map of pages and len/offset tupples, a long with
168 * the struct pipe_buf_operations associated with these pages. This
169 * function will link that data to the pipe.
172 ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
173 struct splice_pipe_desc *spd)
175 unsigned int spd_pages = spd->nr_pages;
176 int ret, do_wakeup, page_nr;
178 ret = 0;
179 do_wakeup = 0;
180 page_nr = 0;
182 if (pipe->inode)
183 mutex_lock(&pipe->inode->i_mutex);
185 for (;;) {
186 if (!pipe->readers) {
187 send_sig(SIGPIPE, current, 0);
188 if (!ret)
189 ret = -EPIPE;
190 break;
193 if (pipe->nrbufs < PIPE_BUFFERS) {
194 int newbuf = (pipe->curbuf + pipe->nrbufs) & (PIPE_BUFFERS - 1);
195 struct pipe_buffer *buf = pipe->bufs + newbuf;
197 buf->page = spd->pages[page_nr];
198 buf->offset = spd->partial[page_nr].offset;
199 buf->len = spd->partial[page_nr].len;
200 buf->private = spd->partial[page_nr].private;
201 buf->ops = spd->ops;
202 if (spd->flags & SPLICE_F_GIFT)
203 buf->flags |= PIPE_BUF_FLAG_GIFT;
205 pipe->nrbufs++;
206 page_nr++;
207 ret += buf->len;
209 if (pipe->inode)
210 do_wakeup = 1;
212 if (!--spd->nr_pages)
213 break;
214 if (pipe->nrbufs < PIPE_BUFFERS)
215 continue;
217 break;
220 if (spd->flags & SPLICE_F_NONBLOCK) {
221 if (!ret)
222 ret = -EAGAIN;
223 break;
226 if (signal_pending(current)) {
227 if (!ret)
228 ret = -ERESTARTSYS;
229 break;
232 if (do_wakeup) {
233 smp_mb();
234 if (waitqueue_active(&pipe->wait))
235 wake_up_interruptible_sync(&pipe->wait);
236 kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
237 do_wakeup = 0;
240 pipe->waiting_writers++;
241 pipe_wait(pipe);
242 pipe->waiting_writers--;
245 if (pipe->inode) {
246 mutex_unlock(&pipe->inode->i_mutex);
248 if (do_wakeup) {
249 smp_mb();
250 if (waitqueue_active(&pipe->wait))
251 wake_up_interruptible(&pipe->wait);
252 kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
256 while (page_nr < spd_pages)
257 spd->spd_release(spd, page_nr++);
259 return ret;
262 static void spd_release_page(struct splice_pipe_desc *spd, unsigned int i)
264 page_cache_release(spd->pages[i]);
267 static int
268 __generic_file_splice_read(struct file *in, loff_t *ppos,
269 struct pipe_inode_info *pipe, size_t len,
270 unsigned int flags)
272 struct address_space *mapping = in->f_mapping;
273 unsigned int loff, nr_pages;
274 struct page *pages[PIPE_BUFFERS];
275 struct partial_page partial[PIPE_BUFFERS];
276 struct page *page;
277 pgoff_t index, end_index;
278 loff_t isize;
279 int error, page_nr;
280 struct splice_pipe_desc spd = {
281 .pages = pages,
282 .partial = partial,
283 .flags = flags,
284 .ops = &page_cache_pipe_buf_ops,
285 .spd_release = spd_release_page,
288 index = *ppos >> PAGE_CACHE_SHIFT;
289 loff = *ppos & ~PAGE_CACHE_MASK;
290 nr_pages = (len + loff + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
292 if (nr_pages > PIPE_BUFFERS)
293 nr_pages = PIPE_BUFFERS;
296 * Don't try to 2nd guess the read-ahead logic, call into
297 * page_cache_readahead() like the page cache reads would do.
299 page_cache_readahead(mapping, &in->f_ra, in, index, nr_pages);
302 * Lookup the (hopefully) full range of pages we need.
304 spd.nr_pages = find_get_pages_contig(mapping, index, nr_pages, pages);
307 * If find_get_pages_contig() returned fewer pages than we needed,
308 * allocate the rest and fill in the holes.
310 error = 0;
311 index += spd.nr_pages;
312 while (spd.nr_pages < nr_pages) {
314 * Page could be there, find_get_pages_contig() breaks on
315 * the first hole.
317 page = find_get_page(mapping, index);
318 if (!page) {
320 * Make sure the read-ahead engine is notified
321 * about this failure.
323 handle_ra_miss(mapping, &in->f_ra, index);
326 * page didn't exist, allocate one.
328 page = page_cache_alloc_cold(mapping);
329 if (!page)
330 break;
332 error = add_to_page_cache_lru(page, mapping, index,
333 GFP_KERNEL);
334 if (unlikely(error)) {
335 page_cache_release(page);
336 if (error == -EEXIST)
337 continue;
338 break;
341 * add_to_page_cache() locks the page, unlock it
342 * to avoid convoluting the logic below even more.
344 unlock_page(page);
347 pages[spd.nr_pages++] = page;
348 index++;
352 * Now loop over the map and see if we need to start IO on any
353 * pages, fill in the partial map, etc.
355 index = *ppos >> PAGE_CACHE_SHIFT;
356 nr_pages = spd.nr_pages;
357 spd.nr_pages = 0;
358 for (page_nr = 0; page_nr < nr_pages; page_nr++) {
359 unsigned int this_len;
361 if (!len)
362 break;
365 * this_len is the max we'll use from this page
367 this_len = min_t(unsigned long, len, PAGE_CACHE_SIZE - loff);
368 page = pages[page_nr];
371 * If the page isn't uptodate, we may need to start io on it
373 if (!PageUptodate(page)) {
375 * If in nonblock mode then dont block on waiting
376 * for an in-flight io page
378 if (flags & SPLICE_F_NONBLOCK) {
379 if (TestSetPageLocked(page)) {
380 error = -EAGAIN;
381 break;
383 } else
384 lock_page(page);
387 * page was truncated, stop here. if this isn't the
388 * first page, we'll just complete what we already
389 * added
391 if (!page->mapping) {
392 unlock_page(page);
393 break;
396 * page was already under io and is now done, great
398 if (PageUptodate(page)) {
399 unlock_page(page);
400 goto fill_it;
404 * need to read in the page
406 error = mapping->a_ops->readpage(in, page);
407 if (unlikely(error)) {
409 * We really should re-lookup the page here,
410 * but it complicates things a lot. Instead
411 * lets just do what we already stored, and
412 * we'll get it the next time we are called.
414 if (error == AOP_TRUNCATED_PAGE)
415 error = 0;
417 break;
420 fill_it:
422 * i_size must be checked after PageUptodate.
424 isize = i_size_read(mapping->host);
425 end_index = (isize - 1) >> PAGE_CACHE_SHIFT;
426 if (unlikely(!isize || index > end_index))
427 break;
430 * if this is the last page, see if we need to shrink
431 * the length and stop
433 if (end_index == index) {
434 unsigned int plen;
437 * max good bytes in this page
439 plen = ((isize - 1) & ~PAGE_CACHE_MASK) + 1;
440 if (plen <= loff)
441 break;
444 * force quit after adding this page
446 this_len = min(this_len, plen - loff);
447 len = this_len;
450 partial[page_nr].offset = loff;
451 partial[page_nr].len = this_len;
452 len -= this_len;
453 loff = 0;
454 spd.nr_pages++;
455 index++;
459 * Release any pages at the end, if we quit early. 'page_nr' is how far
460 * we got, 'nr_pages' is how many pages are in the map.
462 while (page_nr < nr_pages)
463 page_cache_release(pages[page_nr++]);
465 if (spd.nr_pages)
466 return splice_to_pipe(pipe, &spd);
468 return error;
472 * generic_file_splice_read - splice data from file to a pipe
473 * @in: file to splice from
474 * @ppos: position in @in
475 * @pipe: pipe to splice to
476 * @len: number of bytes to splice
477 * @flags: splice modifier flags
479 * Description:
480 * Will read pages from given file and fill them into a pipe. Can be
481 * used as long as the address_space operations for the source implements
482 * a readpage() hook.
485 ssize_t generic_file_splice_read(struct file *in, loff_t *ppos,
486 struct pipe_inode_info *pipe, size_t len,
487 unsigned int flags)
489 loff_t isize, left;
490 int ret;
492 isize = i_size_read(in->f_mapping->host);
493 if (unlikely(*ppos >= isize))
494 return 0;
496 left = isize - *ppos;
497 if (unlikely(left < len))
498 len = left;
500 ret = __generic_file_splice_read(in, ppos, pipe, len, flags);
501 if (ret > 0)
502 *ppos += ret;
504 return ret;
507 EXPORT_SYMBOL(generic_file_splice_read);
510 * Send 'sd->len' bytes to socket from 'sd->file' at position 'sd->pos'
511 * using sendpage(). Return the number of bytes sent.
513 static int pipe_to_sendpage(struct pipe_inode_info *pipe,
514 struct pipe_buffer *buf, struct splice_desc *sd)
516 struct file *file = sd->u.file;
517 loff_t pos = sd->pos;
518 int ret, more;
520 ret = buf->ops->confirm(pipe, buf);
521 if (!ret) {
522 more = (sd->flags & SPLICE_F_MORE) || sd->len < sd->total_len;
524 ret = file->f_op->sendpage(file, buf->page, buf->offset,
525 sd->len, &pos, more);
528 return ret;
532 * This is a little more tricky than the file -> pipe splicing. There are
533 * basically three cases:
535 * - Destination page already exists in the address space and there
536 * are users of it. For that case we have no other option that
537 * copying the data. Tough luck.
538 * - Destination page already exists in the address space, but there
539 * are no users of it. Make sure it's uptodate, then drop it. Fall
540 * through to last case.
541 * - Destination page does not exist, we can add the pipe page to
542 * the page cache and avoid the copy.
544 * If asked to move pages to the output file (SPLICE_F_MOVE is set in
545 * sd->flags), we attempt to migrate pages from the pipe to the output
546 * file address space page cache. This is possible if no one else has
547 * the pipe page referenced outside of the pipe and page cache. If
548 * SPLICE_F_MOVE isn't set, or we cannot move the page, we simply create
549 * a new page in the output file page cache and fill/dirty that.
551 static int pipe_to_file(struct pipe_inode_info *pipe, struct pipe_buffer *buf,
552 struct splice_desc *sd)
554 struct file *file = sd->u.file;
555 struct address_space *mapping = file->f_mapping;
556 unsigned int offset, this_len;
557 struct page *page;
558 pgoff_t index;
559 int ret;
562 * make sure the data in this buffer is uptodate
564 ret = buf->ops->confirm(pipe, buf);
565 if (unlikely(ret))
566 return ret;
568 index = sd->pos >> PAGE_CACHE_SHIFT;
569 offset = sd->pos & ~PAGE_CACHE_MASK;
571 this_len = sd->len;
572 if (this_len + offset > PAGE_CACHE_SIZE)
573 this_len = PAGE_CACHE_SIZE - offset;
575 find_page:
576 page = find_lock_page(mapping, index);
577 if (!page) {
578 ret = -ENOMEM;
579 page = page_cache_alloc_cold(mapping);
580 if (unlikely(!page))
581 goto out_ret;
584 * This will also lock the page
586 ret = add_to_page_cache_lru(page, mapping, index,
587 GFP_KERNEL);
588 if (unlikely(ret))
589 goto out_release;
592 ret = mapping->a_ops->prepare_write(file, page, offset, offset+this_len);
593 if (unlikely(ret)) {
594 loff_t isize = i_size_read(mapping->host);
596 if (ret != AOP_TRUNCATED_PAGE)
597 unlock_page(page);
598 page_cache_release(page);
599 if (ret == AOP_TRUNCATED_PAGE)
600 goto find_page;
603 * prepare_write() may have instantiated a few blocks
604 * outside i_size. Trim these off again.
606 if (sd->pos + this_len > isize)
607 vmtruncate(mapping->host, isize);
609 goto out_ret;
612 if (buf->page != page) {
614 * Careful, ->map() uses KM_USER0!
616 char *src = buf->ops->map(pipe, buf, 1);
617 char *dst = kmap_atomic(page, KM_USER1);
619 memcpy(dst + offset, src + buf->offset, this_len);
620 flush_dcache_page(page);
621 kunmap_atomic(dst, KM_USER1);
622 buf->ops->unmap(pipe, buf, src);
625 ret = mapping->a_ops->commit_write(file, page, offset, offset+this_len);
626 if (ret) {
627 if (ret == AOP_TRUNCATED_PAGE) {
628 page_cache_release(page);
629 goto find_page;
631 if (ret < 0)
632 goto out;
634 * Partial write has happened, so 'ret' already initialized by
635 * number of bytes written, Where is nothing we have to do here.
637 } else
638 ret = this_len;
640 * Return the number of bytes written and mark page as
641 * accessed, we are now done!
643 mark_page_accessed(page);
644 out:
645 unlock_page(page);
646 out_release:
647 page_cache_release(page);
648 out_ret:
649 return ret;
653 * __splice_from_pipe - splice data from a pipe to given actor
654 * @pipe: pipe to splice from
655 * @sd: information to @actor
656 * @actor: handler that splices the data
658 * Description:
659 * This function does little more than loop over the pipe and call
660 * @actor to do the actual moving of a single struct pipe_buffer to
661 * the desired destination. See pipe_to_file, pipe_to_sendpage, or
662 * pipe_to_user.
665 ssize_t __splice_from_pipe(struct pipe_inode_info *pipe, struct splice_desc *sd,
666 splice_actor *actor)
668 int ret, do_wakeup, err;
670 ret = 0;
671 do_wakeup = 0;
673 for (;;) {
674 if (pipe->nrbufs) {
675 struct pipe_buffer *buf = pipe->bufs + pipe->curbuf;
676 const struct pipe_buf_operations *ops = buf->ops;
678 sd->len = buf->len;
679 if (sd->len > sd->total_len)
680 sd->len = sd->total_len;
682 err = actor(pipe, buf, sd);
683 if (err <= 0) {
684 if (!ret && err != -ENODATA)
685 ret = err;
687 break;
690 ret += err;
691 buf->offset += err;
692 buf->len -= err;
694 sd->len -= err;
695 sd->pos += err;
696 sd->total_len -= err;
697 if (sd->len)
698 continue;
700 if (!buf->len) {
701 buf->ops = NULL;
702 ops->release(pipe, buf);
703 pipe->curbuf = (pipe->curbuf + 1) & (PIPE_BUFFERS - 1);
704 pipe->nrbufs--;
705 if (pipe->inode)
706 do_wakeup = 1;
709 if (!sd->total_len)
710 break;
713 if (pipe->nrbufs)
714 continue;
715 if (!pipe->writers)
716 break;
717 if (!pipe->waiting_writers) {
718 if (ret)
719 break;
722 if (sd->flags & SPLICE_F_NONBLOCK) {
723 if (!ret)
724 ret = -EAGAIN;
725 break;
728 if (signal_pending(current)) {
729 if (!ret)
730 ret = -ERESTARTSYS;
731 break;
734 if (do_wakeup) {
735 smp_mb();
736 if (waitqueue_active(&pipe->wait))
737 wake_up_interruptible_sync(&pipe->wait);
738 kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT);
739 do_wakeup = 0;
742 pipe_wait(pipe);
745 if (do_wakeup) {
746 smp_mb();
747 if (waitqueue_active(&pipe->wait))
748 wake_up_interruptible(&pipe->wait);
749 kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT);
752 return ret;
754 EXPORT_SYMBOL(__splice_from_pipe);
757 * splice_from_pipe - splice data from a pipe to a file
758 * @pipe: pipe to splice from
759 * @out: file to splice to
760 * @ppos: position in @out
761 * @len: how many bytes to splice
762 * @flags: splice modifier flags
763 * @actor: handler that splices the data
765 * Description:
766 * See __splice_from_pipe. This function locks the input and output inodes,
767 * otherwise it's identical to __splice_from_pipe().
770 ssize_t splice_from_pipe(struct pipe_inode_info *pipe, struct file *out,
771 loff_t *ppos, size_t len, unsigned int flags,
772 splice_actor *actor)
774 ssize_t ret;
775 struct inode *inode = out->f_mapping->host;
776 struct splice_desc sd = {
777 .total_len = len,
778 .flags = flags,
779 .pos = *ppos,
780 .u.file = out,
784 * The actor worker might be calling ->prepare_write and
785 * ->commit_write. Most of the time, these expect i_mutex to
786 * be held. Since this may result in an ABBA deadlock with
787 * pipe->inode, we have to order lock acquiry here.
789 inode_double_lock(inode, pipe->inode);
790 ret = __splice_from_pipe(pipe, &sd, actor);
791 inode_double_unlock(inode, pipe->inode);
793 return ret;
797 * generic_file_splice_write_nolock - generic_file_splice_write without mutexes
798 * @pipe: pipe info
799 * @out: file to write to
800 * @ppos: position in @out
801 * @len: number of bytes to splice
802 * @flags: splice modifier flags
804 * Description:
805 * Will either move or copy pages (determined by @flags options) from
806 * the given pipe inode to the given file. The caller is responsible
807 * for acquiring i_mutex on both inodes.
810 ssize_t
811 generic_file_splice_write_nolock(struct pipe_inode_info *pipe, struct file *out,
812 loff_t *ppos, size_t len, unsigned int flags)
814 struct address_space *mapping = out->f_mapping;
815 struct inode *inode = mapping->host;
816 struct splice_desc sd = {
817 .total_len = len,
818 .flags = flags,
819 .pos = *ppos,
820 .u.file = out,
822 ssize_t ret;
823 int err;
825 err = remove_suid(out->f_path.dentry);
826 if (unlikely(err))
827 return err;
829 ret = __splice_from_pipe(pipe, &sd, pipe_to_file);
830 if (ret > 0) {
831 unsigned long nr_pages;
833 *ppos += ret;
834 nr_pages = (ret + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
837 * If file or inode is SYNC and we actually wrote some data,
838 * sync it.
840 if (unlikely((out->f_flags & O_SYNC) || IS_SYNC(inode))) {
841 err = generic_osync_inode(inode, mapping,
842 OSYNC_METADATA|OSYNC_DATA);
844 if (err)
845 ret = err;
847 balance_dirty_pages_ratelimited_nr(mapping, nr_pages);
850 return ret;
853 EXPORT_SYMBOL(generic_file_splice_write_nolock);
856 * generic_file_splice_write - splice data from a pipe to a file
857 * @pipe: pipe info
858 * @out: file to write to
859 * @ppos: position in @out
860 * @len: number of bytes to splice
861 * @flags: splice modifier flags
863 * Description:
864 * Will either move or copy pages (determined by @flags options) from
865 * the given pipe inode to the given file.
868 ssize_t
869 generic_file_splice_write(struct pipe_inode_info *pipe, struct file *out,
870 loff_t *ppos, size_t len, unsigned int flags)
872 struct address_space *mapping = out->f_mapping;
873 struct inode *inode = mapping->host;
874 ssize_t ret;
875 int err;
877 err = should_remove_suid(out->f_path.dentry);
878 if (unlikely(err)) {
879 mutex_lock(&inode->i_mutex);
880 err = __remove_suid(out->f_path.dentry, err);
881 mutex_unlock(&inode->i_mutex);
882 if (err)
883 return err;
886 ret = splice_from_pipe(pipe, out, ppos, len, flags, pipe_to_file);
887 if (ret > 0) {
888 unsigned long nr_pages;
890 *ppos += ret;
891 nr_pages = (ret + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
894 * If file or inode is SYNC and we actually wrote some data,
895 * sync it.
897 if (unlikely((out->f_flags & O_SYNC) || IS_SYNC(inode))) {
898 mutex_lock(&inode->i_mutex);
899 err = generic_osync_inode(inode, mapping,
900 OSYNC_METADATA|OSYNC_DATA);
901 mutex_unlock(&inode->i_mutex);
903 if (err)
904 ret = err;
906 balance_dirty_pages_ratelimited_nr(mapping, nr_pages);
909 return ret;
912 EXPORT_SYMBOL(generic_file_splice_write);
915 * generic_splice_sendpage - splice data from a pipe to a socket
916 * @pipe: pipe to splice from
917 * @out: socket to write to
918 * @ppos: position in @out
919 * @len: number of bytes to splice
920 * @flags: splice modifier flags
922 * Description:
923 * Will send @len bytes from the pipe to a network socket. No data copying
924 * is involved.
927 ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe, struct file *out,
928 loff_t *ppos, size_t len, unsigned int flags)
930 return splice_from_pipe(pipe, out, ppos, len, flags, pipe_to_sendpage);
933 EXPORT_SYMBOL(generic_splice_sendpage);
936 * Attempt to initiate a splice from pipe to file.
938 static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
939 loff_t *ppos, size_t len, unsigned int flags)
941 int ret;
943 if (unlikely(!out->f_op || !out->f_op->splice_write))
944 return -EINVAL;
946 if (unlikely(!(out->f_mode & FMODE_WRITE)))
947 return -EBADF;
949 ret = rw_verify_area(WRITE, out, ppos, len);
950 if (unlikely(ret < 0))
951 return ret;
953 ret = security_file_permission(out, MAY_WRITE);
954 if (unlikely(ret < 0))
955 return ret;
957 return out->f_op->splice_write(pipe, out, ppos, len, flags);
961 * Attempt to initiate a splice from a file to a pipe.
963 static long do_splice_to(struct file *in, loff_t *ppos,
964 struct pipe_inode_info *pipe, size_t len,
965 unsigned int flags)
967 int ret;
969 if (unlikely(!in->f_op || !in->f_op->splice_read))
970 return -EINVAL;
972 if (unlikely(!(in->f_mode & FMODE_READ)))
973 return -EBADF;
975 ret = rw_verify_area(READ, in, ppos, len);
976 if (unlikely(ret < 0))
977 return ret;
979 ret = security_file_permission(in, MAY_READ);
980 if (unlikely(ret < 0))
981 return ret;
983 return in->f_op->splice_read(in, ppos, pipe, len, flags);
987 * splice_direct_to_actor - splices data directly between two non-pipes
988 * @in: file to splice from
989 * @sd: actor information on where to splice to
990 * @actor: handles the data splicing
992 * Description:
993 * This is a special case helper to splice directly between two
994 * points, without requiring an explicit pipe. Internally an allocated
995 * pipe is cached in the process, and reused during the life time of
996 * that process.
999 ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
1000 splice_direct_actor *actor)
1002 struct pipe_inode_info *pipe;
1003 long ret, bytes;
1004 umode_t i_mode;
1005 size_t len;
1006 int i, flags;
1009 * We require the input being a regular file, as we don't want to
1010 * randomly drop data for eg socket -> socket splicing. Use the
1011 * piped splicing for that!
1013 i_mode = in->f_path.dentry->d_inode->i_mode;
1014 if (unlikely(!S_ISREG(i_mode) && !S_ISBLK(i_mode)))
1015 return -EINVAL;
1018 * neither in nor out is a pipe, setup an internal pipe attached to
1019 * 'out' and transfer the wanted data from 'in' to 'out' through that
1021 pipe = current->splice_pipe;
1022 if (unlikely(!pipe)) {
1023 pipe = alloc_pipe_info(NULL);
1024 if (!pipe)
1025 return -ENOMEM;
1028 * We don't have an immediate reader, but we'll read the stuff
1029 * out of the pipe right after the splice_to_pipe(). So set
1030 * PIPE_READERS appropriately.
1032 pipe->readers = 1;
1034 current->splice_pipe = pipe;
1038 * Do the splice.
1040 ret = 0;
1041 bytes = 0;
1042 len = sd->total_len;
1043 flags = sd->flags;
1046 * Don't block on output, we have to drain the direct pipe.
1048 sd->flags &= ~SPLICE_F_NONBLOCK;
1050 while (len) {
1051 size_t read_len;
1052 loff_t pos = sd->pos, prev_pos = pos;
1054 ret = do_splice_to(in, &pos, pipe, len, flags);
1055 if (unlikely(ret <= 0))
1056 goto out_release;
1058 read_len = ret;
1059 sd->total_len = read_len;
1062 * NOTE: nonblocking mode only applies to the input. We
1063 * must not do the output in nonblocking mode as then we
1064 * could get stuck data in the internal pipe:
1066 ret = actor(pipe, sd);
1067 if (unlikely(ret <= 0)) {
1068 sd->pos = prev_pos;
1069 goto out_release;
1072 bytes += ret;
1073 len -= ret;
1074 sd->pos = pos;
1076 if (ret < read_len) {
1077 sd->pos = prev_pos + ret;
1078 goto out_release;
1082 done:
1083 pipe->nrbufs = pipe->curbuf = 0;
1084 file_accessed(in);
1085 return bytes;
1087 out_release:
1089 * If we did an incomplete transfer we must release
1090 * the pipe buffers in question:
1092 for (i = 0; i < PIPE_BUFFERS; i++) {
1093 struct pipe_buffer *buf = pipe->bufs + i;
1095 if (buf->ops) {
1096 buf->ops->release(pipe, buf);
1097 buf->ops = NULL;
1101 if (!bytes)
1102 bytes = ret;
1104 goto done;
1106 EXPORT_SYMBOL(splice_direct_to_actor);
1108 static int direct_splice_actor(struct pipe_inode_info *pipe,
1109 struct splice_desc *sd)
1111 struct file *file = sd->u.file;
1113 return do_splice_from(pipe, file, &sd->pos, sd->total_len, sd->flags);
1117 * do_splice_direct - splices data directly between two files
1118 * @in: file to splice from
1119 * @ppos: input file offset
1120 * @out: file to splice to
1121 * @len: number of bytes to splice
1122 * @flags: splice modifier flags
1124 * Description:
1125 * For use by do_sendfile(). splice can easily emulate sendfile, but
1126 * doing it in the application would incur an extra system call
1127 * (splice in + splice out, as compared to just sendfile()). So this helper
1128 * can splice directly through a process-private pipe.
1131 long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
1132 size_t len, unsigned int flags)
1134 struct splice_desc sd = {
1135 .len = len,
1136 .total_len = len,
1137 .flags = flags,
1138 .pos = *ppos,
1139 .u.file = out,
1141 long ret;
1143 ret = splice_direct_to_actor(in, &sd, direct_splice_actor);
1144 if (ret > 0)
1145 *ppos = sd.pos;
1147 return ret;
1151 * After the inode slimming patch, i_pipe/i_bdev/i_cdev share the same
1152 * location, so checking ->i_pipe is not enough to verify that this is a
1153 * pipe.
1155 static inline struct pipe_inode_info *pipe_info(struct inode *inode)
1157 if (S_ISFIFO(inode->i_mode))
1158 return inode->i_pipe;
1160 return NULL;
1164 * Determine where to splice to/from.
1166 static long do_splice(struct file *in, loff_t __user *off_in,
1167 struct file *out, loff_t __user *off_out,
1168 size_t len, unsigned int flags)
1170 struct pipe_inode_info *pipe;
1171 loff_t offset, *off;
1172 long ret;
1174 pipe = pipe_info(in->f_path.dentry->d_inode);
1175 if (pipe) {
1176 if (off_in)
1177 return -ESPIPE;
1178 if (off_out) {
1179 if (out->f_op->llseek == no_llseek)
1180 return -EINVAL;
1181 if (copy_from_user(&offset, off_out, sizeof(loff_t)))
1182 return -EFAULT;
1183 off = &offset;
1184 } else
1185 off = &out->f_pos;
1187 ret = do_splice_from(pipe, out, off, len, flags);
1189 if (off_out && copy_to_user(off_out, off, sizeof(loff_t)))
1190 ret = -EFAULT;
1192 return ret;
1195 pipe = pipe_info(out->f_path.dentry->d_inode);
1196 if (pipe) {
1197 if (off_out)
1198 return -ESPIPE;
1199 if (off_in) {
1200 if (in->f_op->llseek == no_llseek)
1201 return -EINVAL;
1202 if (copy_from_user(&offset, off_in, sizeof(loff_t)))
1203 return -EFAULT;
1204 off = &offset;
1205 } else
1206 off = &in->f_pos;
1208 ret = do_splice_to(in, off, pipe, len, flags);
1210 if (off_in && copy_to_user(off_in, off, sizeof(loff_t)))
1211 ret = -EFAULT;
1213 return ret;
1216 return -EINVAL;
1220 * Do a copy-from-user while holding the mmap_semaphore for reading, in a
1221 * manner safe from deadlocking with simultaneous mmap() (grabbing mmap_sem
1222 * for writing) and page faulting on the user memory pointed to by src.
1223 * This assumes that we will very rarely hit the partial != 0 path, or this
1224 * will not be a win.
1226 static int copy_from_user_mmap_sem(void *dst, const void __user *src, size_t n)
1228 int partial;
1230 if (!access_ok(VERIFY_READ, src, n))
1231 return -EFAULT;
1233 pagefault_disable();
1234 partial = __copy_from_user_inatomic(dst, src, n);
1235 pagefault_enable();
1238 * Didn't copy everything, drop the mmap_sem and do a faulting copy
1240 if (unlikely(partial)) {
1241 up_read(&current->mm->mmap_sem);
1242 partial = copy_from_user(dst, src, n);
1243 down_read(&current->mm->mmap_sem);
1246 return partial;
1250 * Map an iov into an array of pages and offset/length tupples. With the
1251 * partial_page structure, we can map several non-contiguous ranges into
1252 * our ones pages[] map instead of splitting that operation into pieces.
1253 * Could easily be exported as a generic helper for other users, in which
1254 * case one would probably want to add a 'max_nr_pages' parameter as well.
1256 static int get_iovec_page_array(const struct iovec __user *iov,
1257 unsigned int nr_vecs, struct page **pages,
1258 struct partial_page *partial, int aligned)
1260 int buffers = 0, error = 0;
1262 down_read(&current->mm->mmap_sem);
1264 while (nr_vecs) {
1265 unsigned long off, npages;
1266 struct iovec entry;
1267 void __user *base;
1268 size_t len;
1269 int i;
1271 error = -EFAULT;
1272 if (copy_from_user_mmap_sem(&entry, iov, sizeof(entry)))
1273 break;
1275 base = entry.iov_base;
1276 len = entry.iov_len;
1279 * Sanity check this iovec. 0 read succeeds.
1281 error = 0;
1282 if (unlikely(!len))
1283 break;
1284 error = -EFAULT;
1285 if (!access_ok(VERIFY_READ, base, len))
1286 break;
1289 * Get this base offset and number of pages, then map
1290 * in the user pages.
1292 off = (unsigned long) base & ~PAGE_MASK;
1295 * If asked for alignment, the offset must be zero and the
1296 * length a multiple of the PAGE_SIZE.
1298 error = -EINVAL;
1299 if (aligned && (off || len & ~PAGE_MASK))
1300 break;
1302 npages = (off + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
1303 if (npages > PIPE_BUFFERS - buffers)
1304 npages = PIPE_BUFFERS - buffers;
1306 error = get_user_pages(current, current->mm,
1307 (unsigned long) base, npages, 0, 0,
1308 &pages[buffers], NULL);
1310 if (unlikely(error <= 0))
1311 break;
1314 * Fill this contiguous range into the partial page map.
1316 for (i = 0; i < error; i++) {
1317 const int plen = min_t(size_t, len, PAGE_SIZE - off);
1319 partial[buffers].offset = off;
1320 partial[buffers].len = plen;
1322 off = 0;
1323 len -= plen;
1324 buffers++;
1328 * We didn't complete this iov, stop here since it probably
1329 * means we have to move some of this into a pipe to
1330 * be able to continue.
1332 if (len)
1333 break;
1336 * Don't continue if we mapped fewer pages than we asked for,
1337 * or if we mapped the max number of pages that we have
1338 * room for.
1340 if (error < npages || buffers == PIPE_BUFFERS)
1341 break;
1343 nr_vecs--;
1344 iov++;
1347 up_read(&current->mm->mmap_sem);
1349 if (buffers)
1350 return buffers;
1352 return error;
1355 static int pipe_to_user(struct pipe_inode_info *pipe, struct pipe_buffer *buf,
1356 struct splice_desc *sd)
1358 char *src;
1359 int ret;
1361 ret = buf->ops->confirm(pipe, buf);
1362 if (unlikely(ret))
1363 return ret;
1366 * See if we can use the atomic maps, by prefaulting in the
1367 * pages and doing an atomic copy
1369 if (!fault_in_pages_writeable(sd->u.userptr, sd->len)) {
1370 src = buf->ops->map(pipe, buf, 1);
1371 ret = __copy_to_user_inatomic(sd->u.userptr, src + buf->offset,
1372 sd->len);
1373 buf->ops->unmap(pipe, buf, src);
1374 if (!ret) {
1375 ret = sd->len;
1376 goto out;
1381 * No dice, use slow non-atomic map and copy
1383 src = buf->ops->map(pipe, buf, 0);
1385 ret = sd->len;
1386 if (copy_to_user(sd->u.userptr, src + buf->offset, sd->len))
1387 ret = -EFAULT;
1389 buf->ops->unmap(pipe, buf, src);
1390 out:
1391 if (ret > 0)
1392 sd->u.userptr += ret;
1393 return ret;
1397 * For lack of a better implementation, implement vmsplice() to userspace
1398 * as a simple copy of the pipes pages to the user iov.
1400 static long vmsplice_to_user(struct file *file, const struct iovec __user *iov,
1401 unsigned long nr_segs, unsigned int flags)
1403 struct pipe_inode_info *pipe;
1404 struct splice_desc sd;
1405 ssize_t size;
1406 int error;
1407 long ret;
1409 pipe = pipe_info(file->f_path.dentry->d_inode);
1410 if (!pipe)
1411 return -EBADF;
1413 if (pipe->inode)
1414 mutex_lock(&pipe->inode->i_mutex);
1416 error = ret = 0;
1417 while (nr_segs) {
1418 void __user *base;
1419 size_t len;
1422 * Get user address base and length for this iovec.
1424 error = get_user(base, &iov->iov_base);
1425 if (unlikely(error))
1426 break;
1427 error = get_user(len, &iov->iov_len);
1428 if (unlikely(error))
1429 break;
1432 * Sanity check this iovec. 0 read succeeds.
1434 if (unlikely(!len))
1435 break;
1436 if (unlikely(!base)) {
1437 error = -EFAULT;
1438 break;
1441 if (unlikely(!access_ok(VERIFY_WRITE, base, len))) {
1442 error = -EFAULT;
1443 break;
1446 sd.len = 0;
1447 sd.total_len = len;
1448 sd.flags = flags;
1449 sd.u.userptr = base;
1450 sd.pos = 0;
1452 size = __splice_from_pipe(pipe, &sd, pipe_to_user);
1453 if (size < 0) {
1454 if (!ret)
1455 ret = size;
1457 break;
1460 ret += size;
1462 if (size < len)
1463 break;
1465 nr_segs--;
1466 iov++;
1469 if (pipe->inode)
1470 mutex_unlock(&pipe->inode->i_mutex);
1472 if (!ret)
1473 ret = error;
1475 return ret;
1479 * vmsplice splices a user address range into a pipe. It can be thought of
1480 * as splice-from-memory, where the regular splice is splice-from-file (or
1481 * to file). In both cases the output is a pipe, naturally.
1483 static long vmsplice_to_pipe(struct file *file, const struct iovec __user *iov,
1484 unsigned long nr_segs, unsigned int flags)
1486 struct pipe_inode_info *pipe;
1487 struct page *pages[PIPE_BUFFERS];
1488 struct partial_page partial[PIPE_BUFFERS];
1489 struct splice_pipe_desc spd = {
1490 .pages = pages,
1491 .partial = partial,
1492 .flags = flags,
1493 .ops = &user_page_pipe_buf_ops,
1494 .spd_release = spd_release_page,
1497 pipe = pipe_info(file->f_path.dentry->d_inode);
1498 if (!pipe)
1499 return -EBADF;
1501 spd.nr_pages = get_iovec_page_array(iov, nr_segs, pages, partial,
1502 flags & SPLICE_F_GIFT);
1503 if (spd.nr_pages <= 0)
1504 return spd.nr_pages;
1506 return splice_to_pipe(pipe, &spd);
1510 * Note that vmsplice only really supports true splicing _from_ user memory
1511 * to a pipe, not the other way around. Splicing from user memory is a simple
1512 * operation that can be supported without any funky alignment restrictions
1513 * or nasty vm tricks. We simply map in the user memory and fill them into
1514 * a pipe. The reverse isn't quite as easy, though. There are two possible
1515 * solutions for that:
1517 * - memcpy() the data internally, at which point we might as well just
1518 * do a regular read() on the buffer anyway.
1519 * - Lots of nasty vm tricks, that are neither fast nor flexible (it
1520 * has restriction limitations on both ends of the pipe).
1522 * Currently we punt and implement it as a normal copy, see pipe_to_user().
1525 asmlinkage long sys_vmsplice(int fd, const struct iovec __user *iov,
1526 unsigned long nr_segs, unsigned int flags)
1528 struct file *file;
1529 long error;
1530 int fput;
1532 if (unlikely(nr_segs > UIO_MAXIOV))
1533 return -EINVAL;
1534 else if (unlikely(!nr_segs))
1535 return 0;
1537 error = -EBADF;
1538 file = fget_light(fd, &fput);
1539 if (file) {
1540 if (file->f_mode & FMODE_WRITE)
1541 error = vmsplice_to_pipe(file, iov, nr_segs, flags);
1542 else if (file->f_mode & FMODE_READ)
1543 error = vmsplice_to_user(file, iov, nr_segs, flags);
1545 fput_light(file, fput);
1548 return error;
1551 asmlinkage long sys_splice(int fd_in, loff_t __user *off_in,
1552 int fd_out, loff_t __user *off_out,
1553 size_t len, unsigned int flags)
1555 long error;
1556 struct file *in, *out;
1557 int fput_in, fput_out;
1559 if (unlikely(!len))
1560 return 0;
1562 error = -EBADF;
1563 in = fget_light(fd_in, &fput_in);
1564 if (in) {
1565 if (in->f_mode & FMODE_READ) {
1566 out = fget_light(fd_out, &fput_out);
1567 if (out) {
1568 if (out->f_mode & FMODE_WRITE)
1569 error = do_splice(in, off_in,
1570 out, off_out,
1571 len, flags);
1572 fput_light(out, fput_out);
1576 fput_light(in, fput_in);
1579 return error;
1583 * Make sure there's data to read. Wait for input if we can, otherwise
1584 * return an appropriate error.
1586 static int link_ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
1588 int ret;
1591 * Check ->nrbufs without the inode lock first. This function
1592 * is speculative anyways, so missing one is ok.
1594 if (pipe->nrbufs)
1595 return 0;
1597 ret = 0;
1598 mutex_lock(&pipe->inode->i_mutex);
1600 while (!pipe->nrbufs) {
1601 if (signal_pending(current)) {
1602 ret = -ERESTARTSYS;
1603 break;
1605 if (!pipe->writers)
1606 break;
1607 if (!pipe->waiting_writers) {
1608 if (flags & SPLICE_F_NONBLOCK) {
1609 ret = -EAGAIN;
1610 break;
1613 pipe_wait(pipe);
1616 mutex_unlock(&pipe->inode->i_mutex);
1617 return ret;
1621 * Make sure there's writeable room. Wait for room if we can, otherwise
1622 * return an appropriate error.
1624 static int link_opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
1626 int ret;
1629 * Check ->nrbufs without the inode lock first. This function
1630 * is speculative anyways, so missing one is ok.
1632 if (pipe->nrbufs < PIPE_BUFFERS)
1633 return 0;
1635 ret = 0;
1636 mutex_lock(&pipe->inode->i_mutex);
1638 while (pipe->nrbufs >= PIPE_BUFFERS) {
1639 if (!pipe->readers) {
1640 send_sig(SIGPIPE, current, 0);
1641 ret = -EPIPE;
1642 break;
1644 if (flags & SPLICE_F_NONBLOCK) {
1645 ret = -EAGAIN;
1646 break;
1648 if (signal_pending(current)) {
1649 ret = -ERESTARTSYS;
1650 break;
1652 pipe->waiting_writers++;
1653 pipe_wait(pipe);
1654 pipe->waiting_writers--;
1657 mutex_unlock(&pipe->inode->i_mutex);
1658 return ret;
1662 * Link contents of ipipe to opipe.
1664 static int link_pipe(struct pipe_inode_info *ipipe,
1665 struct pipe_inode_info *opipe,
1666 size_t len, unsigned int flags)
1668 struct pipe_buffer *ibuf, *obuf;
1669 int ret = 0, i = 0, nbuf;
1672 * Potential ABBA deadlock, work around it by ordering lock
1673 * grabbing by inode address. Otherwise two different processes
1674 * could deadlock (one doing tee from A -> B, the other from B -> A).
1676 inode_double_lock(ipipe->inode, opipe->inode);
1678 do {
1679 if (!opipe->readers) {
1680 send_sig(SIGPIPE, current, 0);
1681 if (!ret)
1682 ret = -EPIPE;
1683 break;
1687 * If we have iterated all input buffers or ran out of
1688 * output room, break.
1690 if (i >= ipipe->nrbufs || opipe->nrbufs >= PIPE_BUFFERS)
1691 break;
1693 ibuf = ipipe->bufs + ((ipipe->curbuf + i) & (PIPE_BUFFERS - 1));
1694 nbuf = (opipe->curbuf + opipe->nrbufs) & (PIPE_BUFFERS - 1);
1697 * Get a reference to this pipe buffer,
1698 * so we can copy the contents over.
1700 ibuf->ops->get(ipipe, ibuf);
1702 obuf = opipe->bufs + nbuf;
1703 *obuf = *ibuf;
1706 * Don't inherit the gift flag, we need to
1707 * prevent multiple steals of this page.
1709 obuf->flags &= ~PIPE_BUF_FLAG_GIFT;
1711 if (obuf->len > len)
1712 obuf->len = len;
1714 opipe->nrbufs++;
1715 ret += obuf->len;
1716 len -= obuf->len;
1717 i++;
1718 } while (len);
1721 * return EAGAIN if we have the potential of some data in the
1722 * future, otherwise just return 0
1724 if (!ret && ipipe->waiting_writers && (flags & SPLICE_F_NONBLOCK))
1725 ret = -EAGAIN;
1727 inode_double_unlock(ipipe->inode, opipe->inode);
1730 * If we put data in the output pipe, wakeup any potential readers.
1732 if (ret > 0) {
1733 smp_mb();
1734 if (waitqueue_active(&opipe->wait))
1735 wake_up_interruptible(&opipe->wait);
1736 kill_fasync(&opipe->fasync_readers, SIGIO, POLL_IN);
1739 return ret;
1743 * This is a tee(1) implementation that works on pipes. It doesn't copy
1744 * any data, it simply references the 'in' pages on the 'out' pipe.
1745 * The 'flags' used are the SPLICE_F_* variants, currently the only
1746 * applicable one is SPLICE_F_NONBLOCK.
1748 static long do_tee(struct file *in, struct file *out, size_t len,
1749 unsigned int flags)
1751 struct pipe_inode_info *ipipe = pipe_info(in->f_path.dentry->d_inode);
1752 struct pipe_inode_info *opipe = pipe_info(out->f_path.dentry->d_inode);
1753 int ret = -EINVAL;
1756 * Duplicate the contents of ipipe to opipe without actually
1757 * copying the data.
1759 if (ipipe && opipe && ipipe != opipe) {
1761 * Keep going, unless we encounter an error. The ipipe/opipe
1762 * ordering doesn't really matter.
1764 ret = link_ipipe_prep(ipipe, flags);
1765 if (!ret) {
1766 ret = link_opipe_prep(opipe, flags);
1767 if (!ret)
1768 ret = link_pipe(ipipe, opipe, len, flags);
1772 return ret;
1775 asmlinkage long sys_tee(int fdin, int fdout, size_t len, unsigned int flags)
1777 struct file *in;
1778 int error, fput_in;
1780 if (unlikely(!len))
1781 return 0;
1783 error = -EBADF;
1784 in = fget_light(fdin, &fput_in);
1785 if (in) {
1786 if (in->f_mode & FMODE_READ) {
1787 int fput_out;
1788 struct file *out = fget_light(fdout, &fput_out);
1790 if (out) {
1791 if (out->f_mode & FMODE_WRITE)
1792 error = do_tee(in, out, len, flags);
1793 fput_light(out, fput_out);
1796 fput_light(in, fput_in);
1799 return error;