| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * linux/fs/9p/vfs_file.c |
|---|
| 3 | 4 | * |
|---|
| .. | .. |
|---|
| 5 | 6 | * |
|---|
| 6 | 7 | * Copyright (C) 2004 by Eric Van Hensbergen <ericvh@gmail.com> |
|---|
| 7 | 8 | * Copyright (C) 2002 by Ron Minnich <rminnich@lanl.gov> |
|---|
| 8 | | - * |
|---|
| 9 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 10 | | - * it under the terms of the GNU General Public License version 2 |
|---|
| 11 | | - * as published by the Free Software Foundation. |
|---|
| 12 | | - * |
|---|
| 13 | | - * This program is distributed in the hope that it will be useful, |
|---|
| 14 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 15 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 16 | | - * GNU General Public License for more details. |
|---|
| 17 | | - * |
|---|
| 18 | | - * You should have received a copy of the GNU General Public License |
|---|
| 19 | | - * along with this program; if not, write to: |
|---|
| 20 | | - * Free Software Foundation |
|---|
| 21 | | - * 51 Franklin Street, Fifth Floor |
|---|
| 22 | | - * Boston, MA 02111-1301 USA |
|---|
| 23 | | - * |
|---|
| 24 | 9 | */ |
|---|
| 25 | 10 | |
|---|
| 26 | 11 | #include <linux/module.h> |
|---|
| .. | .. |
|---|
| 228 | 213 | break; |
|---|
| 229 | 214 | default: |
|---|
| 230 | 215 | WARN_ONCE(1, "unknown lock status code: %d\n", status); |
|---|
| 231 | | - /* fallthough */ |
|---|
| 216 | + fallthrough; |
|---|
| 232 | 217 | case P9_LOCK_ERROR: |
|---|
| 233 | 218 | case P9_LOCK_GRACE: |
|---|
| 234 | 219 | res = -ENOLCK; |
|---|
| .. | .. |
|---|
| 403 | 388 | p9_debug(P9_DEBUG_VFS, "count %zu offset %lld\n", |
|---|
| 404 | 389 | iov_iter_count(to), iocb->ki_pos); |
|---|
| 405 | 390 | |
|---|
| 406 | | - ret = p9_client_read(fid, iocb->ki_pos, to, &err); |
|---|
| 391 | + if (iocb->ki_filp->f_flags & O_NONBLOCK) |
|---|
| 392 | + ret = p9_client_read_once(fid, iocb->ki_pos, to, &err); |
|---|
| 393 | + else |
|---|
| 394 | + ret = p9_client_read(fid, iocb->ki_pos, to, &err); |
|---|
| 407 | 395 | if (!ret) |
|---|
| 408 | 396 | return err; |
|---|
| 409 | 397 | |
|---|
| .. | .. |
|---|
| 637 | 625 | |
|---|
| 638 | 626 | inode = file_inode(vma->vm_file); |
|---|
| 639 | 627 | |
|---|
| 640 | | - if (!mapping_cap_writeback_dirty(inode->i_mapping)) |
|---|
| 628 | + if (!mapping_can_writeback(inode->i_mapping)) |
|---|
| 641 | 629 | wbc.nr_to_write = 0; |
|---|
| 642 | 630 | |
|---|
| 643 | 631 | might_sleep(); |
|---|
| .. | .. |
|---|
| 667 | 655 | .release = v9fs_dir_release, |
|---|
| 668 | 656 | .lock = v9fs_file_lock, |
|---|
| 669 | 657 | .mmap = v9fs_file_mmap, |
|---|
| 658 | + .splice_read = generic_file_splice_read, |
|---|
| 659 | + .splice_write = iter_file_splice_write, |
|---|
| 670 | 660 | .fsync = v9fs_file_fsync, |
|---|
| 671 | 661 | }; |
|---|
| 672 | 662 | |
|---|
| .. | .. |
|---|
| 679 | 669 | .lock = v9fs_file_lock_dotl, |
|---|
| 680 | 670 | .flock = v9fs_file_flock_dotl, |
|---|
| 681 | 671 | .mmap = v9fs_file_mmap, |
|---|
| 672 | + .splice_read = generic_file_splice_read, |
|---|
| 673 | + .splice_write = iter_file_splice_write, |
|---|
| 682 | 674 | .fsync = v9fs_file_fsync_dotl, |
|---|
| 683 | 675 | }; |
|---|
| 684 | 676 | |
|---|
| .. | .. |
|---|
| 690 | 682 | .release = v9fs_dir_release, |
|---|
| 691 | 683 | .lock = v9fs_file_lock, |
|---|
| 692 | 684 | .mmap = generic_file_readonly_mmap, |
|---|
| 685 | + .splice_read = generic_file_splice_read, |
|---|
| 686 | + .splice_write = iter_file_splice_write, |
|---|
| 693 | 687 | .fsync = v9fs_file_fsync, |
|---|
| 694 | 688 | }; |
|---|
| 695 | 689 | |
|---|
| .. | .. |
|---|
| 702 | 696 | .lock = v9fs_file_lock_dotl, |
|---|
| 703 | 697 | .flock = v9fs_file_flock_dotl, |
|---|
| 704 | 698 | .mmap = generic_file_readonly_mmap, |
|---|
| 699 | + .splice_read = generic_file_splice_read, |
|---|
| 700 | + .splice_write = iter_file_splice_write, |
|---|
| 705 | 701 | .fsync = v9fs_file_fsync_dotl, |
|---|
| 706 | 702 | }; |
|---|
| 707 | 703 | |
|---|
| .. | .. |
|---|
| 713 | 709 | .release = v9fs_dir_release, |
|---|
| 714 | 710 | .lock = v9fs_file_lock, |
|---|
| 715 | 711 | .mmap = v9fs_mmap_file_mmap, |
|---|
| 712 | + .splice_read = generic_file_splice_read, |
|---|
| 713 | + .splice_write = iter_file_splice_write, |
|---|
| 716 | 714 | .fsync = v9fs_file_fsync, |
|---|
| 717 | 715 | }; |
|---|
| 718 | 716 | |
|---|
| .. | .. |
|---|
| 725 | 723 | .lock = v9fs_file_lock_dotl, |
|---|
| 726 | 724 | .flock = v9fs_file_flock_dotl, |
|---|
| 727 | 725 | .mmap = v9fs_mmap_file_mmap, |
|---|
| 726 | + .splice_read = generic_file_splice_read, |
|---|
| 727 | + .splice_write = iter_file_splice_write, |
|---|
| 728 | 728 | .fsync = v9fs_file_fsync_dotl, |
|---|
| 729 | 729 | }; |
|---|