1 /* 2 * "splice": joining two ropes together by interweaving their strands. 3 * 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. 7 * 8 * The traditional unix read/write is extended with a "splice()" operation 9 * that transfers data buffers to or from a pipe buffer. 10 * 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. 14 * 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> 18 * 19 */ 20 #include <linux/fs.h> 21 #include <linux/file.h> 22 #include <linux/pagemap.h> 23 #include <linux/pipe_fs_i.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 32 struct partial_page { 33 unsigned int offset; 34 unsigned int len; 35 }; 36 37 /* 38 * Passed to splice_to_pipe 39 */ 40 struct splice_pipe_desc { 41 struct page **pages; /* page map */ 42 struct partial_page *partial; /* pages[] may not be contig */ 43 int nr_pages; /* number of pages in map */ 44 unsigned int flags; /* splice flags */ 45 const struct pipe_buf_operations *ops;/* ops associated with output pipe */ 46 }; 47 48 /* 49 * Attempt to steal a page from a pipe buffer. This should perhaps go into 50 * a vm helper function, it's already simplified quite a bit by the 51 * addition of remove_mapping(). If success is returned, the caller may 52 * attempt to reuse this page for another destination. 53 */ 54 static int page_cache_pipe_buf_steal(struct pipe_inode_info *pipe, 55 struct pipe_buffer *buf) 56 { 57 struct page *page = buf->page; 58 struct address_space *mapping; 59 60 lock_page(page); 61 62 mapping = page_mapping(page); 63 if (mapping) { 64 WARN_ON(!PageUptodate(page)); 65 66 /* 67 * At least for ext2 with nobh option, we need to wait on 68 * writeback completing on this page, since we'll remove it 69 * from the pagecache. Otherwise truncate wont wait on the 70 * page, allowing the disk blocks to be reused by someone else 71 * before we actually wrote our data to them. fs corruption 72 * ensues. 73 */ 74 wait_on_page_writeback(page); 75 76 if (PagePrivate(page)) 77 try_to_release_page(page, GFP_KERNEL); 78 79 /* 80 * If we succeeded in removing the mapping, set LRU flag 81 * and return good. 82 */ 83 if (remove_mapping(mapping, page)) { 84 buf->flags |= PIPE_BUF_FLAG_LRU; 85 return 0; 86 } 87 } 88 89 /* 90 * Raced with truncate or failed to remove page from current 91 * address space, unlock and return failure. 92 */ 93 unlock_page(page); 94 return 1; 95 } 96 97 static void page_cache_pipe_buf_release(struct pipe_inode_info *pipe, 98 struct pipe_buffer *buf) 99 { 100 page_cache_release(buf->page); 101 buf->flags &= ~PIPE_BUF_FLAG_LRU; 102 } 103 104 static int page_cache_pipe_buf_pin(struct pipe_inode_info *pipe, 105 struct pipe_buffer *buf) 106 { 107 struct page *page = buf->page; 108 int err; 109 110 if (!PageUptodate(page)) { 111 lock_page(page); 112 113 /* 114 * Page got truncated/unhashed. This will cause a 0-byte 115 * splice, if this is the first page. 116 */ 117 if (!page->mapping) { 118 err = -ENODATA; 119 goto error; 120 } 121 122 /* 123 * Uh oh, read-error from disk. 124 */ 125 if (!PageUptodate(page)) { 126 err = -EIO; 127 goto error; 128 } 129 130 /* 131 * Page is ok afterall, we are done. 132 */ 133 unlock_page(page); 134 } 135 136 return 0; 137 error: 138 unlock_page(page); 139 return err; 140 } 141 142 static const struct pipe_buf_operations page_cache_pipe_buf_ops = { 143 .can_merge = 0, 144 .map = generic_pipe_buf_map, 145 .unmap = generic_pipe_buf_unmap, 146 .pin = page_cache_pipe_buf_pin, 147 .release = page_cache_pipe_buf_release, 148 .steal = page_cache_pipe_buf_steal, 149 .get = generic_pipe_buf_get, 150 }; 151 152 static int user_page_pipe_buf_steal(struct pipe_inode_info *pipe, 153 struct pipe_buffer *buf) 154 { 155 if (!(buf->flags & PIPE_BUF_FLAG_GIFT)) 156 return 1; 157 158 buf->flags |= PIPE_BUF_FLAG_LRU; 159 return generic_pipe_buf_steal(pipe, buf); 160 } 161 162 static const struct pipe_buf_operations user_page_pipe_buf_ops = { 163 .can_merge = 0, 164 .map = generic_pipe_buf_map, 165 .unmap = generic_pipe_buf_unmap, 166 .pin = generic_pipe_buf_pin, 167 .release = page_cache_pipe_buf_release, 168 .steal = user_page_pipe_buf_steal, 169 .get = generic_pipe_buf_get, 170 }; 171 172 /* 173 * Pipe output worker. This sets up our pipe format with the page cache 174 * pipe buffer operations. Otherwise very similar to the regular pipe_writev(). 175 */ 176 static ssize_t splice_to_pipe(struct pipe_inode_info *pipe, 177 struct splice_pipe_desc *spd) 178 { 179 int ret, do_wakeup, page_nr; 180 181 ret = 0; 182 do_wakeup = 0; 183 page_nr = 0; 184 185 if (pipe->inode) 186 mutex_lock(&pipe->inode->i_mutex); 187 188 for (;;) { 189 if (!pipe->readers) { 190 send_sig(SIGPIPE, current, 0); 191 if (!ret) 192 ret = -EPIPE; 193 break; 194 } 195 196 if (pipe->nrbufs < PIPE_BUFFERS) { 197 int newbuf = (pipe->curbuf + pipe->nrbufs) & (PIPE_BUFFERS - 1); 198 struct pipe_buffer *buf = pipe->bufs + newbuf; 199 200 buf->page = spd->pages[page_nr]; 201 buf->offset = spd->partial[page_nr].offset; 202 buf->len = spd->partial[page_nr].len; 203 buf->ops = spd->ops; 204 if (spd->flags & SPLICE_F_GIFT) 205 buf->flags |= PIPE_BUF_FLAG_GIFT; 206 207 pipe->nrbufs++; 208 page_nr++; 209 ret += buf->len; 210 211 if (pipe->inode) 212 do_wakeup = 1; 213 214 if (!--spd->nr_pages) 215 break; 216 if (pipe->nrbufs < PIPE_BUFFERS) 217 continue; 218 219 break; 220 } 221 222 if (spd->flags & SPLICE_F_NONBLOCK) { 223 if (!ret) 224 ret = -EAGAIN; 225 break; 226 } 227 228 if (signal_pending(current)) { 229 if (!ret) 230 ret = -ERESTARTSYS; 231 break; 232 } 233 234 if (do_wakeup) { 235 smp_mb(); 236 if (waitqueue_active(&pipe->wait)) 237 wake_up_interruptible_sync(&pipe->wait); 238 kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); 239 do_wakeup = 0; 240 } 241 242 pipe->waiting_writers++; 243 pipe_wait(pipe); 244 pipe->waiting_writers--; 245 } 246 247 if (pipe->inode) 248 mutex_unlock(&pipe->inode->i_mutex); 249 250 if (do_wakeup) { 251 smp_mb(); 252 if (waitqueue_active(&pipe->wait)) 253 wake_up_interruptible(&pipe->wait); 254 kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); 255 } 256 257 while (page_nr < spd->nr_pages) 258 page_cache_release(spd->pages[page_nr++]); 259 260 return ret; 261 } 262 263 static int 264 __generic_file_splice_read(struct file *in, loff_t *ppos, 265 struct pipe_inode_info *pipe, size_t len, 266 unsigned int flags) 267 { 268 struct address_space *mapping = in->f_mapping; 269 unsigned int loff, nr_pages; 270 struct page *pages[PIPE_BUFFERS]; 271 struct partial_page partial[PIPE_BUFFERS]; 272 struct page *page; 273 pgoff_t index, end_index; 274 loff_t isize; 275 size_t total_len; 276 int error, page_nr; 277 struct splice_pipe_desc spd = { 278 .pages = pages, 279 .partial = partial, 280 .flags = flags, 281 .ops = &page_cache_pipe_buf_ops, 282 }; 283 284 index = *ppos >> PAGE_CACHE_SHIFT; 285 loff = *ppos & ~PAGE_CACHE_MASK; 286 nr_pages = (len + loff + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; 287 288 if (nr_pages > PIPE_BUFFERS) 289 nr_pages = PIPE_BUFFERS; 290 291 /* 292 * Initiate read-ahead on this page range. however, don't call into 293 * read-ahead if this is a non-zero offset (we are likely doing small 294 * chunk splice and the page is already there) for a single page. 295 */ 296 if (!loff || nr_pages > 1) 297 page_cache_readahead(mapping, &in->f_ra, in, index, nr_pages); 298 299 /* 300 * Now fill in the holes: 301 */ 302 error = 0; 303 total_len = 0; 304 305 /* 306 * Lookup the (hopefully) full range of pages we need. 307 */ 308 spd.nr_pages = find_get_pages_contig(mapping, index, nr_pages, pages); 309 310 /* 311 * If find_get_pages_contig() returned fewer pages than we needed, 312 * allocate the rest. 313 */ 314 index += spd.nr_pages; 315 while (spd.nr_pages < nr_pages) { 316 /* 317 * Page could be there, find_get_pages_contig() breaks on 318 * the first hole. 319 */ 320 page = find_get_page(mapping, index); 321 if (!page) { 322 /* 323 * Make sure the read-ahead engine is notified 324 * about this failure. 325 */ 326 handle_ra_miss(mapping, &in->f_ra, index); 327 328 /* 329 * page didn't exist, allocate one. 330 */ 331 page = page_cache_alloc_cold(mapping); 332 if (!page) 333 break; 334 335 error = add_to_page_cache_lru(page, mapping, index, 336 GFP_KERNEL); 337 if (unlikely(error)) { 338 page_cache_release(page); 339 if (error == -EEXIST) 340 continue; 341 break; 342 } 343 /* 344 * add_to_page_cache() locks the page, unlock it 345 * to avoid convoluting the logic below even more. 346 */ 347 unlock_page(page); 348 } 349 350 pages[spd.nr_pages++] = page; 351 index++; 352 } 353 354 /* 355 * Now loop over the map and see if we need to start IO on any 356 * pages, fill in the partial map, etc. 357 */ 358 index = *ppos >> PAGE_CACHE_SHIFT; 359 nr_pages = spd.nr_pages; 360 spd.nr_pages = 0; 361 for (page_nr = 0; page_nr < nr_pages; page_nr++) { 362 unsigned int this_len; 363 364 if (!len) 365 break; 366 367 /* 368 * this_len is the max we'll use from this page 369 */ 370 this_len = min_t(unsigned long, len, PAGE_CACHE_SIZE - loff); 371 page = pages[page_nr]; 372 373 /* 374 * If the page isn't uptodate, we may need to start io on it 375 */ 376 if (!PageUptodate(page)) { 377 /* 378 * If in nonblock mode then dont block on waiting 379 * for an in-flight io page 380 */ 381 if (flags & SPLICE_F_NONBLOCK) 382 break; 383 384 lock_page(page); 385 386 /* 387 * page was truncated, stop here. if this isn't the 388 * first page, we'll just complete what we already 389 * added 390 */ 391 if (!page->mapping) { 392 unlock_page(page); 393 break; 394 } 395 /* 396 * page was already under io and is now done, great 397 */ 398 if (PageUptodate(page)) { 399 unlock_page(page); 400 goto fill_it; 401 } 402 403 /* 404 * need to read in the page 405 */ 406 error = mapping->a_ops->readpage(in, page); 407 if (unlikely(error)) { 408 /* 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. 413 */ 414 if (error == AOP_TRUNCATED_PAGE) 415 error = 0; 416 417 break; 418 } 419 420 /* 421 * i_size must be checked after ->readpage(). 422 */ 423 isize = i_size_read(mapping->host); 424 end_index = (isize - 1) >> PAGE_CACHE_SHIFT; 425 if (unlikely(!isize || index > end_index)) 426 break; 427 428 /* 429 * if this is the last page, see if we need to shrink 430 * the length and stop 431 */ 432 if (end_index == index) { 433 loff = PAGE_CACHE_SIZE - (isize & ~PAGE_CACHE_MASK); 434 if (total_len + loff > isize) 435 break; 436 /* 437 * force quit after adding this page 438 */ 439 len = this_len; 440 this_len = min(this_len, loff); 441 loff = 0; 442 } 443 } 444 fill_it: 445 partial[page_nr].offset = loff; 446 partial[page_nr].len = this_len; 447 len -= this_len; 448 total_len += this_len; 449 loff = 0; 450 spd.nr_pages++; 451 index++; 452 } 453 454 /* 455 * Release any pages at the end, if we quit early. 'i' is how far 456 * we got, 'nr_pages' is how many pages are in the map. 457 */ 458 while (page_nr < nr_pages) 459 page_cache_release(pages[page_nr++]); 460 461 if (spd.nr_pages) 462 return splice_to_pipe(pipe, &spd); 463 464 return error; 465 } 466 467 /** 468 * generic_file_splice_read - splice data from file to a pipe 469 * @in: file to splice from 470 * @pipe: pipe to splice to 471 * @len: number of bytes to splice 472 * @flags: splice modifier flags 473 * 474 * Will read pages from given file and fill them into a pipe. 475 */ 476 ssize_t generic_file_splice_read(struct file *in, loff_t *ppos, 477 struct pipe_inode_info *pipe, size_t len, 478 unsigned int flags) 479 { 480 ssize_t spliced; 481 int ret; 482 483 ret = 0; 484 spliced = 0; 485 486 while (len) { 487 ret = __generic_file_splice_read(in, ppos, pipe, len, flags); 488 489 if (ret < 0) 490 break; 491 else if (!ret) { 492 if (spliced) 493 break; 494 if (flags & SPLICE_F_NONBLOCK) { 495 ret = -EAGAIN; 496 break; 497 } 498 } 499 500 *ppos += ret; 501 len -= ret; 502 spliced += ret; 503 } 504 505 if (spliced) 506 return spliced; 507 508 return ret; 509 } 510 511 EXPORT_SYMBOL(generic_file_splice_read); 512 513 /* 514 * Send 'sd->len' bytes to socket from 'sd->file' at position 'sd->pos' 515 * using sendpage(). Return the number of bytes sent. 516 */ 517 static int pipe_to_sendpage(struct pipe_inode_info *pipe, 518 struct pipe_buffer *buf, struct splice_desc *sd) 519 { 520 struct file *file = sd->file; 521 loff_t pos = sd->pos; 522 int ret, more; 523 524 ret = buf->ops->pin(pipe, buf); 525 if (!ret) { 526 more = (sd->flags & SPLICE_F_MORE) || sd->len < sd->total_len; 527 528 ret = file->f_op->sendpage(file, buf->page, buf->offset, 529 sd->len, &pos, more); 530 } 531 532 return ret; 533 } 534 535 /* 536 * This is a little more tricky than the file -> pipe splicing. There are 537 * basically three cases: 538 * 539 * - Destination page already exists in the address space and there 540 * are users of it. For that case we have no other option that 541 * copying the data. Tough luck. 542 * - Destination page already exists in the address space, but there 543 * are no users of it. Make sure it's uptodate, then drop it. Fall 544 * through to last case. 545 * - Destination page does not exist, we can add the pipe page to 546 * the page cache and avoid the copy. 547 * 548 * If asked to move pages to the output file (SPLICE_F_MOVE is set in 549 * sd->flags), we attempt to migrate pages from the pipe to the output 550 * file address space page cache. This is possible if no one else has 551 * the pipe page referenced outside of the pipe and page cache. If 552 * SPLICE_F_MOVE isn't set, or we cannot move the page, we simply create 553 * a new page in the output file page cache and fill/dirty that. 554 */ 555 static int pipe_to_file(struct pipe_inode_info *pipe, struct pipe_buffer *buf, 556 struct splice_desc *sd) 557 { 558 struct file *file = sd->file; 559 struct address_space *mapping = file->f_mapping; 560 unsigned int offset, this_len; 561 struct page *page; 562 pgoff_t index; 563 int ret; 564 565 /* 566 * make sure the data in this buffer is uptodate 567 */ 568 ret = buf->ops->pin(pipe, buf); 569 if (unlikely(ret)) 570 return ret; 571 572 index = sd->pos >> PAGE_CACHE_SHIFT; 573 offset = sd->pos & ~PAGE_CACHE_MASK; 574 575 this_len = sd->len; 576 if (this_len + offset > PAGE_CACHE_SIZE) 577 this_len = PAGE_CACHE_SIZE - offset; 578 579 /* 580 * Reuse buf page, if SPLICE_F_MOVE is set and we are doing a full 581 * page. 582 */ 583 if ((sd->flags & SPLICE_F_MOVE) && this_len == PAGE_CACHE_SIZE) { 584 /* 585 * If steal succeeds, buf->page is now pruned from the 586 * pagecache and we can reuse it. The page will also be 587 * locked on successful return. 588 */ 589 if (buf->ops->steal(pipe, buf)) 590 goto find_page; 591 592 page = buf->page; 593 if (add_to_page_cache(page, mapping, index, GFP_KERNEL)) { 594 unlock_page(page); 595 goto find_page; 596 } 597 598 page_cache_get(page); 599 600 if (!(buf->flags & PIPE_BUF_FLAG_LRU)) 601 lru_cache_add(page); 602 } else { 603 find_page: 604 page = find_lock_page(mapping, index); 605 if (!page) { 606 ret = -ENOMEM; 607 page = page_cache_alloc_cold(mapping); 608 if (unlikely(!page)) 609 goto out_ret; 610 611 /* 612 * This will also lock the page 613 */ 614 ret = add_to_page_cache_lru(page, mapping, index, 615 GFP_KERNEL); 616 if (unlikely(ret)) 617 goto out; 618 } 619 620 /* 621 * We get here with the page locked. If the page is also 622 * uptodate, we don't need to do more. If it isn't, we 623 * may need to bring it in if we are not going to overwrite 624 * the full page. 625 */ 626 if (!PageUptodate(page)) { 627 if (this_len < PAGE_CACHE_SIZE) { 628 ret = mapping->a_ops->readpage(file, page); 629 if (unlikely(ret)) 630 goto out; 631 632 lock_page(page); 633 634 if (!PageUptodate(page)) { 635 /* 636 * Page got invalidated, repeat. 637 */ 638 if (!page->mapping) { 639 unlock_page(page); 640 page_cache_release(page); 641 goto find_page; 642 } 643 ret = -EIO; 644 goto out; 645 } 646 } else 647 SetPageUptodate(page); 648 } 649 } 650 651 ret = mapping->a_ops->prepare_write(file, page, offset, offset+this_len); 652 if (unlikely(ret)) { 653 loff_t isize = i_size_read(mapping->host); 654 655 if (ret != AOP_TRUNCATED_PAGE) 656 unlock_page(page); 657 page_cache_release(page); 658 if (ret == AOP_TRUNCATED_PAGE) 659 goto find_page; 660 661 /* 662 * prepare_write() may have instantiated a few blocks 663 * outside i_size. Trim these off again. 664 */ 665 if (sd->pos + this_len > isize) 666 vmtruncate(mapping->host, isize); 667 668 goto out_ret; 669 } 670 671 if (buf->page != page) { 672 /* 673 * Careful, ->map() uses KM_USER0! 674 */ 675 char *src = buf->ops->map(pipe, buf, 1); 676 char *dst = kmap_atomic(page, KM_USER1); 677 678 memcpy(dst + offset, src + buf->offset, this_len); 679 flush_dcache_page(page); 680 kunmap_atomic(dst, KM_USER1); 681 buf->ops->unmap(pipe, buf, src); 682 } 683 684 ret = mapping->a_ops->commit_write(file, page, offset, offset+this_len); 685 if (!ret) { 686 /* 687 * Return the number of bytes written and mark page as 688 * accessed, we are now done! 689 */ 690 ret = this_len; 691 mark_page_accessed(page); 692 balance_dirty_pages_ratelimited(mapping); 693 } else if (ret == AOP_TRUNCATED_PAGE) { 694 page_cache_release(page); 695 goto find_page; 696 } 697 out: 698 page_cache_release(page); 699 unlock_page(page); 700 out_ret: 701 return ret; 702 } 703 704 /* 705 * Pipe input worker. Most of this logic works like a regular pipe, the 706 * key here is the 'actor' worker passed in that actually moves the data 707 * to the wanted destination. See pipe_to_file/pipe_to_sendpage above. 708 */ 709 static ssize_t __splice_from_pipe(struct pipe_inode_info *pipe, 710 struct file *out, loff_t *ppos, size_t len, 711 unsigned int flags, splice_actor *actor) 712 { 713 int ret, do_wakeup, err; 714 struct splice_desc sd; 715 716 ret = 0; 717 do_wakeup = 0; 718 719 sd.total_len = len; 720 sd.flags = flags; 721 sd.file = out; 722 sd.pos = *ppos; 723 724 for (;;) { 725 if (pipe->nrbufs) { 726 struct pipe_buffer *buf = pipe->bufs + pipe->curbuf; 727 const struct pipe_buf_operations *ops = buf->ops; 728 729 sd.len = buf->len; 730 if (sd.len > sd.total_len) 731 sd.len = sd.total_len; 732 733 err = actor(pipe, buf, &sd); 734 if (err <= 0) { 735 if (!ret && err != -ENODATA) 736 ret = err; 737 738 break; 739 } 740 741 ret += err; 742 buf->offset += err; 743 buf->len -= err; 744 745 sd.len -= err; 746 sd.pos += err; 747 sd.total_len -= err; 748 if (sd.len) 749 continue; 750 751 if (!buf->len) { 752 buf->ops = NULL; 753 ops->release(pipe, buf); 754 pipe->curbuf = (pipe->curbuf + 1) & (PIPE_BUFFERS - 1); 755 pipe->nrbufs--; 756 if (pipe->inode) 757 do_wakeup = 1; 758 } 759 760 if (!sd.total_len) 761 break; 762 } 763 764 if (pipe->nrbufs) 765 continue; 766 if (!pipe->writers) 767 break; 768 if (!pipe->waiting_writers) { 769 if (ret) 770 break; 771 } 772 773 if (flags & SPLICE_F_NONBLOCK) { 774 if (!ret) 775 ret = -EAGAIN; 776 break; 777 } 778 779 if (signal_pending(current)) { 780 if (!ret) 781 ret = -ERESTARTSYS; 782 break; 783 } 784 785 if (do_wakeup) { 786 smp_mb(); 787 if (waitqueue_active(&pipe->wait)) 788 wake_up_interruptible_sync(&pipe->wait); 789 kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT); 790 do_wakeup = 0; 791 } 792 793 pipe_wait(pipe); 794 } 795 796 if (do_wakeup) { 797 smp_mb(); 798 if (waitqueue_active(&pipe->wait)) 799 wake_up_interruptible(&pipe->wait); 800 kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT); 801 } 802 803 return ret; 804 } 805 806 ssize_t splice_from_pipe(struct pipe_inode_info *pipe, struct file *out, 807 loff_t *ppos, size_t len, unsigned int flags, 808 splice_actor *actor) 809 { 810 ssize_t ret; 811 struct inode *inode = out->f_mapping->host; 812 813 /* 814 * The actor worker might be calling ->prepare_write and 815 * ->commit_write. Most of the time, these expect i_mutex to 816 * be held. Since this may result in an ABBA deadlock with 817 * pipe->inode, we have to order lock acquiry here. 818 */ 819 inode_double_lock(inode, pipe->inode); 820 ret = __splice_from_pipe(pipe, out, ppos, len, flags, actor); 821 inode_double_unlock(inode, pipe->inode); 822 823 return ret; 824 } 825 826 /** 827 * generic_file_splice_write_nolock - generic_file_splice_write without mutexes 828 * @pipe: pipe info 829 * @out: file to write to 830 * @len: number of bytes to splice 831 * @flags: splice modifier flags 832 * 833 * Will either move or copy pages (determined by @flags options) from 834 * the given pipe inode to the given file. The caller is responsible 835 * for acquiring i_mutex on both inodes. 836 * 837 */ 838 ssize_t 839 generic_file_splice_write_nolock(struct pipe_inode_info *pipe, struct file *out, 840 loff_t *ppos, size_t len, unsigned int flags) 841 { 842 struct address_space *mapping = out->f_mapping; 843 struct inode *inode = mapping->host; 844 ssize_t ret; 845 int err; 846 847 err = remove_suid(out->f_path.dentry); 848 if (unlikely(err)) 849 return err; 850 851 ret = __splice_from_pipe(pipe, out, ppos, len, flags, pipe_to_file); 852 if (ret > 0) { 853 *ppos += ret; 854 855 /* 856 * If file or inode is SYNC and we actually wrote some data, 857 * sync it. 858 */ 859 if (unlikely((out->f_flags & O_SYNC) || IS_SYNC(inode))) { 860 err = generic_osync_inode(inode, mapping, 861 OSYNC_METADATA|OSYNC_DATA); 862 863 if (err) 864 ret = err; 865 } 866 } 867 868 return ret; 869 } 870 871 EXPORT_SYMBOL(generic_file_splice_write_nolock); 872 873 /** 874 * generic_file_splice_write - splice data from a pipe to a file 875 * @pipe: pipe info 876 * @out: file to write to 877 * @len: number of bytes to splice 878 * @flags: splice modifier flags 879 * 880 * Will either move or copy pages (determined by @flags options) from 881 * the given pipe inode to the given file. 882 * 883 */ 884 ssize_t 885 generic_file_splice_write(struct pipe_inode_info *pipe, struct file *out, 886 loff_t *ppos, size_t len, unsigned int flags) 887 { 888 struct address_space *mapping = out->f_mapping; 889 struct inode *inode = mapping->host; 890 ssize_t ret; 891 int err; 892 893 err = should_remove_suid(out->f_path.dentry); 894 if (unlikely(err)) { 895 mutex_lock(&inode->i_mutex); 896 err = __remove_suid(out->f_path.dentry, err); 897 mutex_unlock(&inode->i_mutex); 898 if (err) 899 return err; 900 } 901 902 ret = splice_from_pipe(pipe, out, ppos, len, flags, pipe_to_file); 903 if (ret > 0) { 904 *ppos += ret; 905 906 /* 907 * If file or inode is SYNC and we actually wrote some data, 908 * sync it. 909 */ 910 if (unlikely((out->f_flags & O_SYNC) || IS_SYNC(inode))) { 911 mutex_lock(&inode->i_mutex); 912 err = generic_osync_inode(inode, mapping, 913 OSYNC_METADATA|OSYNC_DATA); 914 mutex_unlock(&inode->i_mutex); 915 916 if (err) 917 ret = err; 918 } 919 } 920 921 return ret; 922 } 923 924 EXPORT_SYMBOL(generic_file_splice_write); 925 926 /** 927 * generic_splice_sendpage - splice data from a pipe to a socket 928 * @inode: pipe inode 929 * @out: socket to write to 930 * @len: number of bytes to splice 931 * @flags: splice modifier flags 932 * 933 * Will send @len bytes from the pipe to a network socket. No data copying 934 * is involved. 935 * 936 */ 937 ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe, struct file *out, 938 loff_t *ppos, size_t len, unsigned int flags) 939 { 940 return splice_from_pipe(pipe, out, ppos, len, flags, pipe_to_sendpage); 941 } 942 943 EXPORT_SYMBOL(generic_splice_sendpage); 944 945 /* 946 * Attempt to initiate a splice from pipe to file. 947 */ 948 static long do_splice_from(struct pipe_inode_info *pipe, struct file *out, 949 loff_t *ppos, size_t len, unsigned int flags) 950 { 951 int ret; 952 953 if (unlikely(!out->f_op || !out->f_op->splice_write)) 954 return -EINVAL; 955 956 if (unlikely(!(out->f_mode & FMODE_WRITE))) 957 return -EBADF; 958 959 ret = rw_verify_area(WRITE, out, ppos, len); 960 if (unlikely(ret < 0)) 961 return ret; 962 963 return out->f_op->splice_write(pipe, out, ppos, len, flags); 964 } 965 966 /* 967 * Attempt to initiate a splice from a file to a pipe. 968 */ 969 static long do_splice_to(struct file *in, loff_t *ppos, 970 struct pipe_inode_info *pipe, size_t len, 971 unsigned int flags) 972 { 973 loff_t isize, left; 974 int ret; 975 976 if (unlikely(!in->f_op || !in->f_op->splice_read)) 977 return -EINVAL; 978 979 if (unlikely(!(in->f_mode & FMODE_READ))) 980 return -EBADF; 981 982 ret = rw_verify_area(READ, in, ppos, len); 983 if (unlikely(ret < 0)) 984 return ret; 985 986 isize = i_size_read(in->f_mapping->host); 987 if (unlikely(*ppos >= isize)) 988 return 0; 989 990 left = isize - *ppos; 991 if (unlikely(left < len)) 992 len = left; 993 994 return in->f_op->splice_read(in, ppos, pipe, len, flags); 995 } 996 997 long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, 998 size_t len, unsigned int flags) 999 { 1000 struct pipe_inode_info *pipe; 1001 long ret, bytes; 1002 loff_t out_off; 1003 umode_t i_mode; 1004 int i; 1005 1006 /* 1007 * We require the input being a regular file, as we don't want to 1008 * randomly drop data for eg socket -> socket splicing. Use the 1009 * piped splicing for that! 1010 */ 1011 i_mode = in->f_path.dentry->d_inode->i_mode; 1012 if (unlikely(!S_ISREG(i_mode) && !S_ISBLK(i_mode))) 1013 return -EINVAL; 1014 1015 /* 1016 * neither in nor out is a pipe, setup an internal pipe attached to 1017 * 'out' and transfer the wanted data from 'in' to 'out' through that 1018 */ 1019 pipe = current->splice_pipe; 1020 if (unlikely(!pipe)) { 1021 pipe = alloc_pipe_info(NULL); 1022 if (!pipe) 1023 return -ENOMEM; 1024 1025 /* 1026 * We don't have an immediate reader, but we'll read the stuff 1027 * out of the pipe right after the splice_to_pipe(). So set 1028 * PIPE_READERS appropriately. 1029 */ 1030 pipe->readers = 1; 1031 1032 current->splice_pipe = pipe; 1033 } 1034 1035 /* 1036 * Do the splice. 1037 */ 1038 ret = 0; 1039 bytes = 0; 1040 out_off = 0; 1041 1042 while (len) { 1043 size_t read_len, max_read_len; 1044 1045 /* 1046 * Do at most PIPE_BUFFERS pages worth of transfer: 1047 */ 1048 max_read_len = min(len, (size_t)(PIPE_BUFFERS*PAGE_SIZE)); 1049 1050 ret = do_splice_to(in, ppos, pipe, max_read_len, flags); 1051 if (unlikely(ret < 0)) 1052 goto out_release; 1053 1054 read_len = ret; 1055 1056 /* 1057 * NOTE: nonblocking mode only applies to the input. We 1058 * must not do the output in nonblocking mode as then we 1059 * could get stuck data in the internal pipe: 1060 */ 1061 ret = do_splice_from(pipe, out, &out_off, read_len, 1062 flags & ~SPLICE_F_NONBLOCK); 1063 if (unlikely(ret < 0)) 1064 goto out_release; 1065 1066 bytes += ret; 1067 len -= ret; 1068 1069 /* 1070 * In nonblocking mode, if we got back a short read then 1071 * that was due to either an IO error or due to the 1072 * pagecache entry not being there. In the IO error case 1073 * the _next_ splice attempt will produce a clean IO error 1074 * return value (not a short read), so in both cases it's 1075 * correct to break out of the loop here: 1076 */ 1077 if ((flags & SPLICE_F_NONBLOCK) && (read_len < max_read_len)) 1078 break; 1079 } 1080 1081 pipe->nrbufs = pipe->curbuf = 0; 1082 1083 return bytes; 1084 1085 out_release: 1086 /* 1087 * If we did an incomplete transfer we must release 1088 * the pipe buffers in question: 1089 */ 1090 for (i = 0; i < PIPE_BUFFERS; i++) { 1091 struct pipe_buffer *buf = pipe->bufs + i; 1092 1093 if (buf->ops) { 1094 buf->ops->release(pipe, buf); 1095 buf->ops = NULL; 1096 } 1097 } 1098 pipe->nrbufs = pipe->curbuf = 0; 1099 1100 /* 1101 * If we transferred some data, return the number of bytes: 1102 */ 1103 if (bytes > 0) 1104 return bytes; 1105 1106 return ret; 1107 } 1108 1109 EXPORT_SYMBOL(do_splice_direct); 1110 1111 /* 1112 * After the inode slimming patch, i_pipe/i_bdev/i_cdev share the same 1113 * location, so checking ->i_pipe is not enough to verify that this is a 1114 * pipe. 1115 */ 1116 static inline struct pipe_inode_info *pipe_info(struct inode *inode) 1117 { 1118 if (S_ISFIFO(inode->i_mode)) 1119 return inode->i_pipe; 1120 1121 return NULL; 1122 } 1123 1124 /* 1125 * Determine where to splice to/from. 1126 */ 1127 static long do_splice(struct file *in, loff_t __user *off_in, 1128 struct file *out, loff_t __user *off_out, 1129 size_t len, unsigned int flags) 1130 { 1131 struct pipe_inode_info *pipe; 1132 loff_t offset, *off; 1133 long ret; 1134 1135 pipe = pipe_info(in->f_path.dentry->d_inode); 1136 if (pipe) { 1137 if (off_in) 1138 return -ESPIPE; 1139 if (off_out) { 1140 if (out->f_op->llseek == no_llseek) 1141 return -EINVAL; 1142 if (copy_from_user(&offset, off_out, sizeof(loff_t))) 1143 return -EFAULT; 1144 off = &offset; 1145 } else 1146 off = &out->f_pos; 1147 1148 ret = do_splice_from(pipe, out, off, len, flags); 1149 1150 if (off_out && copy_to_user(off_out, off, sizeof(loff_t))) 1151 ret = -EFAULT; 1152 1153 return ret; 1154 } 1155 1156 pipe = pipe_info(out->f_path.dentry->d_inode); 1157 if (pipe) { 1158 if (off_out) 1159 return -ESPIPE; 1160 if (off_in) { 1161 if (in->f_op->llseek == no_llseek) 1162 return -EINVAL; 1163 if (copy_from_user(&offset, off_in, sizeof(loff_t))) 1164 return -EFAULT; 1165 off = &offset; 1166 } else 1167 off = &in->f_pos; 1168 1169 ret = do_splice_to(in, off, pipe, len, flags); 1170 1171 if (off_in && copy_to_user(off_in, off, sizeof(loff_t))) 1172 ret = -EFAULT; 1173 1174 return ret; 1175 } 1176 1177 return -EINVAL; 1178 } 1179 1180 /* 1181 * Map an iov into an array of pages and offset/length tupples. With the 1182 * partial_page structure, we can map several non-contiguous ranges into 1183 * our ones pages[] map instead of splitting that operation into pieces. 1184 * Could easily be exported as a generic helper for other users, in which 1185 * case one would probably want to add a 'max_nr_pages' parameter as well. 1186 */ 1187 static int get_iovec_page_array(const struct iovec __user *iov, 1188 unsigned int nr_vecs, struct page **pages, 1189 struct partial_page *partial, int aligned) 1190 { 1191 int buffers = 0, error = 0; 1192 1193 /* 1194 * It's ok to take the mmap_sem for reading, even 1195 * across a "get_user()". 1196 */ 1197 down_read(¤t->mm->mmap_sem); 1198 1199 while (nr_vecs) { 1200 unsigned long off, npages; 1201 void __user *base; 1202 size_t len; 1203 int i; 1204 1205 /* 1206 * Get user address base and length for this iovec. 1207 */ 1208 error = get_user(base, &iov->iov_base); 1209 if (unlikely(error)) 1210 break; 1211 error = get_user(len, &iov->iov_len); 1212 if (unlikely(error)) 1213 break; 1214 1215 /* 1216 * Sanity check this iovec. 0 read succeeds. 1217 */ 1218 if (unlikely(!len)) 1219 break; 1220 error = -EFAULT; 1221 if (unlikely(!base)) 1222 break; 1223 1224 /* 1225 * Get this base offset and number of pages, then map 1226 * in the user pages. 1227 */ 1228 off = (unsigned long) base & ~PAGE_MASK; 1229 1230 /* 1231 * If asked for alignment, the offset must be zero and the 1232 * length a multiple of the PAGE_SIZE. 1233 */ 1234 error = -EINVAL; 1235 if (aligned && (off || len & ~PAGE_MASK)) 1236 break; 1237 1238 npages = (off + len + PAGE_SIZE - 1) >> PAGE_SHIFT; 1239 if (npages > PIPE_BUFFERS - buffers) 1240 npages = PIPE_BUFFERS - buffers; 1241 1242 error = get_user_pages(current, current->mm, 1243 (unsigned long) base, npages, 0, 0, 1244 &pages[buffers], NULL); 1245 1246 if (unlikely(error <= 0)) 1247 break; 1248 1249 /* 1250 * Fill this contiguous range into the partial page map. 1251 */ 1252 for (i = 0; i < error; i++) { 1253 const int plen = min_t(size_t, len, PAGE_SIZE - off); 1254 1255 partial[buffers].offset = off; 1256 partial[buffers].len = plen; 1257 1258 off = 0; 1259 len -= plen; 1260 buffers++; 1261 } 1262 1263 /* 1264 * We didn't complete this iov, stop here since it probably 1265 * means we have to move some of this into a pipe to 1266 * be able to continue. 1267 */ 1268 if (len) 1269 break; 1270 1271 /* 1272 * Don't continue if we mapped fewer pages than we asked for, 1273 * or if we mapped the max number of pages that we have 1274 * room for. 1275 */ 1276 if (error < npages || buffers == PIPE_BUFFERS) 1277 break; 1278 1279 nr_vecs--; 1280 iov++; 1281 } 1282 1283 up_read(¤t->mm->mmap_sem); 1284 1285 if (buffers) 1286 return buffers; 1287 1288 return error; 1289 } 1290 1291 /* 1292 * vmsplice splices a user address range into a pipe. It can be thought of 1293 * as splice-from-memory, where the regular splice is splice-from-file (or 1294 * to file). In both cases the output is a pipe, naturally. 1295 * 1296 * Note that vmsplice only supports splicing _from_ user memory to a pipe, 1297 * not the other way around. Splicing from user memory is a simple operation 1298 * that can be supported without any funky alignment restrictions or nasty 1299 * vm tricks. We simply map in the user memory and fill them into a pipe. 1300 * The reverse isn't quite as easy, though. There are two possible solutions 1301 * for that: 1302 * 1303 * - memcpy() the data internally, at which point we might as well just 1304 * do a regular read() on the buffer anyway. 1305 * - Lots of nasty vm tricks, that are neither fast nor flexible (it 1306 * has restriction limitations on both ends of the pipe). 1307 * 1308 * Alas, it isn't here. 1309 * 1310 */ 1311 static long do_vmsplice(struct file *file, const struct iovec __user *iov, 1312 unsigned long nr_segs, unsigned int flags) 1313 { 1314 struct pipe_inode_info *pipe; 1315 struct page *pages[PIPE_BUFFERS]; 1316 struct partial_page partial[PIPE_BUFFERS]; 1317 struct splice_pipe_desc spd = { 1318 .pages = pages, 1319 .partial = partial, 1320 .flags = flags, 1321 .ops = &user_page_pipe_buf_ops, 1322 }; 1323 1324 pipe = pipe_info(file->f_path.dentry->d_inode); 1325 if (!pipe) 1326 return -EBADF; 1327 if (unlikely(nr_segs > UIO_MAXIOV)) 1328 return -EINVAL; 1329 else if (unlikely(!nr_segs)) 1330 return 0; 1331 1332 spd.nr_pages = get_iovec_page_array(iov, nr_segs, pages, partial, 1333 flags & SPLICE_F_GIFT); 1334 if (spd.nr_pages <= 0) 1335 return spd.nr_pages; 1336 1337 return splice_to_pipe(pipe, &spd); 1338 } 1339 1340 asmlinkage long sys_vmsplice(int fd, const struct iovec __user *iov, 1341 unsigned long nr_segs, unsigned int flags) 1342 { 1343 struct file *file; 1344 long error; 1345 int fput; 1346 1347 error = -EBADF; 1348 file = fget_light(fd, &fput); 1349 if (file) { 1350 if (file->f_mode & FMODE_WRITE) 1351 error = do_vmsplice(file, iov, nr_segs, flags); 1352 1353 fput_light(file, fput); 1354 } 1355 1356 return error; 1357 } 1358 1359 asmlinkage long sys_splice(int fd_in, loff_t __user *off_in, 1360 int fd_out, loff_t __user *off_out, 1361 size_t len, unsigned int flags) 1362 { 1363 long error; 1364 struct file *in, *out; 1365 int fput_in, fput_out; 1366 1367 if (unlikely(!len)) 1368 return 0; 1369 1370 error = -EBADF; 1371 in = fget_light(fd_in, &fput_in); 1372 if (in) { 1373 if (in->f_mode & FMODE_READ) { 1374 out = fget_light(fd_out, &fput_out); 1375 if (out) { 1376 if (out->f_mode & FMODE_WRITE) 1377 error = do_splice(in, off_in, 1378 out, off_out, 1379 len, flags); 1380 fput_light(out, fput_out); 1381 } 1382 } 1383 1384 fput_light(in, fput_in); 1385 } 1386 1387 return error; 1388 } 1389 1390 /* 1391 * Make sure there's data to read. Wait for input if we can, otherwise 1392 * return an appropriate error. 1393 */ 1394 static int link_ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags) 1395 { 1396 int ret; 1397 1398 /* 1399 * Check ->nrbufs without the inode lock first. This function 1400 * is speculative anyways, so missing one is ok. 1401 */ 1402 if (pipe->nrbufs) 1403 return 0; 1404 1405 ret = 0; 1406 mutex_lock(&pipe->inode->i_mutex); 1407 1408 while (!pipe->nrbufs) { 1409 if (signal_pending(current)) { 1410 ret = -ERESTARTSYS; 1411 break; 1412 } 1413 if (!pipe->writers) 1414 break; 1415 if (!pipe->waiting_writers) { 1416 if (flags & SPLICE_F_NONBLOCK) { 1417 ret = -EAGAIN; 1418 break; 1419 } 1420 } 1421 pipe_wait(pipe); 1422 } 1423 1424 mutex_unlock(&pipe->inode->i_mutex); 1425 return ret; 1426 } 1427 1428 /* 1429 * Make sure there's writeable room. Wait for room if we can, otherwise 1430 * return an appropriate error. 1431 */ 1432 static int link_opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) 1433 { 1434 int ret; 1435 1436 /* 1437 * Check ->nrbufs without the inode lock first. This function 1438 * is speculative anyways, so missing one is ok. 1439 */ 1440 if (pipe->nrbufs < PIPE_BUFFERS) 1441 return 0; 1442 1443 ret = 0; 1444 mutex_lock(&pipe->inode->i_mutex); 1445 1446 while (pipe->nrbufs >= PIPE_BUFFERS) { 1447 if (!pipe->readers) { 1448 send_sig(SIGPIPE, current, 0); 1449 ret = -EPIPE; 1450 break; 1451 } 1452 if (flags & SPLICE_F_NONBLOCK) { 1453 ret = -EAGAIN; 1454 break; 1455 } 1456 if (signal_pending(current)) { 1457 ret = -ERESTARTSYS; 1458 break; 1459 } 1460 pipe->waiting_writers++; 1461 pipe_wait(pipe); 1462 pipe->waiting_writers--; 1463 } 1464 1465 mutex_unlock(&pipe->inode->i_mutex); 1466 return ret; 1467 } 1468 1469 /* 1470 * Link contents of ipipe to opipe. 1471 */ 1472 static int link_pipe(struct pipe_inode_info *ipipe, 1473 struct pipe_inode_info *opipe, 1474 size_t len, unsigned int flags) 1475 { 1476 struct pipe_buffer *ibuf, *obuf; 1477 int ret = 0, i = 0, nbuf; 1478 1479 /* 1480 * Potential ABBA deadlock, work around it by ordering lock 1481 * grabbing by inode address. Otherwise two different processes 1482 * could deadlock (one doing tee from A -> B, the other from B -> A). 1483 */ 1484 inode_double_lock(ipipe->inode, opipe->inode); 1485 1486 do { 1487 if (!opipe->readers) { 1488 send_sig(SIGPIPE, current, 0); 1489 if (!ret) 1490 ret = -EPIPE; 1491 break; 1492 } 1493 1494 /* 1495 * If we have iterated all input buffers or ran out of 1496 * output room, break. 1497 */ 1498 if (i >= ipipe->nrbufs || opipe->nrbufs >= PIPE_BUFFERS) 1499 break; 1500 1501 ibuf = ipipe->bufs + ((ipipe->curbuf + i) & (PIPE_BUFFERS - 1)); 1502 nbuf = (opipe->curbuf + opipe->nrbufs) & (PIPE_BUFFERS - 1); 1503 1504 /* 1505 * Get a reference to this pipe buffer, 1506 * so we can copy the contents over. 1507 */ 1508 ibuf->ops->get(ipipe, ibuf); 1509 1510 obuf = opipe->bufs + nbuf; 1511 *obuf = *ibuf; 1512 1513 /* 1514 * Don't inherit the gift flag, we need to 1515 * prevent multiple steals of this page. 1516 */ 1517 obuf->flags &= ~PIPE_BUF_FLAG_GIFT; 1518 1519 if (obuf->len > len) 1520 obuf->len = len; 1521 1522 opipe->nrbufs++; 1523 ret += obuf->len; 1524 len -= obuf->len; 1525 i++; 1526 } while (len); 1527 1528 inode_double_unlock(ipipe->inode, opipe->inode); 1529 1530 /* 1531 * If we put data in the output pipe, wakeup any potential readers. 1532 */ 1533 if (ret > 0) { 1534 smp_mb(); 1535 if (waitqueue_active(&opipe->wait)) 1536 wake_up_interruptible(&opipe->wait); 1537 kill_fasync(&opipe->fasync_readers, SIGIO, POLL_IN); 1538 } 1539 1540 return ret; 1541 } 1542 1543 /* 1544 * This is a tee(1) implementation that works on pipes. It doesn't copy 1545 * any data, it simply references the 'in' pages on the 'out' pipe. 1546 * The 'flags' used are the SPLICE_F_* variants, currently the only 1547 * applicable one is SPLICE_F_NONBLOCK. 1548 */ 1549 static long do_tee(struct file *in, struct file *out, size_t len, 1550 unsigned int flags) 1551 { 1552 struct pipe_inode_info *ipipe = pipe_info(in->f_path.dentry->d_inode); 1553 struct pipe_inode_info *opipe = pipe_info(out->f_path.dentry->d_inode); 1554 int ret = -EINVAL; 1555 1556 /* 1557 * Duplicate the contents of ipipe to opipe without actually 1558 * copying the data. 1559 */ 1560 if (ipipe && opipe && ipipe != opipe) { 1561 /* 1562 * Keep going, unless we encounter an error. The ipipe/opipe 1563 * ordering doesn't really matter. 1564 */ 1565 ret = link_ipipe_prep(ipipe, flags); 1566 if (!ret) { 1567 ret = link_opipe_prep(opipe, flags); 1568 if (!ret) { 1569 ret = link_pipe(ipipe, opipe, len, flags); 1570 if (!ret && (flags & SPLICE_F_NONBLOCK)) 1571 ret = -EAGAIN; 1572 } 1573 } 1574 } 1575 1576 return ret; 1577 } 1578 1579 asmlinkage long sys_tee(int fdin, int fdout, size_t len, unsigned int flags) 1580 { 1581 struct file *in; 1582 int error, fput_in; 1583 1584 if (unlikely(!len)) 1585 return 0; 1586 1587 error = -EBADF; 1588 in = fget_light(fdin, &fput_in); 1589 if (in) { 1590 if (in->f_mode & FMODE_READ) { 1591 int fput_out; 1592 struct file *out = fget_light(fdout, &fput_out); 1593 1594 if (out) { 1595 if (out->f_mode & FMODE_WRITE) 1596 error = do_tee(in, out, len, flags); 1597 fput_light(out, fput_out); 1598 } 1599 } 1600 fput_light(in, fput_in); 1601 } 1602 1603 return error; 1604 } 1605