diff options
Diffstat (limited to 'fs/nfs/file.c')
-rw-r--r-- | fs/nfs/file.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 14364dc001f7..c40e4363e746 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c | |||
@@ -674,17 +674,20 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from) | |||
674 | unsigned long written = 0; | 674 | unsigned long written = 0; |
675 | ssize_t result; | 675 | ssize_t result; |
676 | size_t count = iov_iter_count(from); | 676 | size_t count = iov_iter_count(from); |
677 | loff_t pos = iocb->ki_pos; | ||
678 | 677 | ||
679 | result = nfs_key_timeout_notify(file, inode); | 678 | result = nfs_key_timeout_notify(file, inode); |
680 | if (result) | 679 | if (result) |
681 | return result; | 680 | return result; |
682 | 681 | ||
683 | if (iocb->ki_flags & IOCB_DIRECT) | 682 | if (iocb->ki_flags & IOCB_DIRECT) { |
684 | return nfs_file_direct_write(iocb, from, pos); | 683 | result = generic_write_checks(iocb, from); |
684 | if (result <= 0) | ||
685 | return result; | ||
686 | return nfs_file_direct_write(iocb, from); | ||
687 | } | ||
685 | 688 | ||
686 | dprintk("NFS: write(%pD2, %zu@%Ld)\n", | 689 | dprintk("NFS: write(%pD2, %zu@%Ld)\n", |
687 | file, count, (long long) pos); | 690 | file, count, (long long) iocb->ki_pos); |
688 | 691 | ||
689 | result = -EBUSY; | 692 | result = -EBUSY; |
690 | if (IS_SWAPFILE(inode)) | 693 | if (IS_SWAPFILE(inode)) |