diff options
Diffstat (limited to 'fs/nfs/file.c')
-rw-r--r-- | fs/nfs/file.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index acd4e4cd2906..50fb83a88b1b 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c | |||
@@ -175,7 +175,7 @@ nfs_file_read(struct kiocb *iocb, const struct iovec *iov, | |||
175 | ssize_t result; | 175 | ssize_t result; |
176 | 176 | ||
177 | if (iocb->ki_filp->f_flags & O_DIRECT) | 177 | if (iocb->ki_filp->f_flags & O_DIRECT) |
178 | return nfs_file_direct_read(iocb, iov, nr_segs, pos); | 178 | return nfs_file_direct_read(iocb, iov, nr_segs, pos, true); |
179 | 179 | ||
180 | dprintk("NFS: read(%s/%s, %lu@%lu)\n", | 180 | dprintk("NFS: read(%s/%s, %lu@%lu)\n", |
181 | dentry->d_parent->d_name.name, dentry->d_name.name, | 181 | dentry->d_parent->d_name.name, dentry->d_name.name, |
@@ -482,6 +482,20 @@ static int nfs_launder_page(struct page *page) | |||
482 | return nfs_wb_page(inode, page); | 482 | return nfs_wb_page(inode, page); |
483 | } | 483 | } |
484 | 484 | ||
485 | #ifdef CONFIG_NFS_SWAP | ||
486 | static int nfs_swap_activate(struct swap_info_struct *sis, struct file *file, | ||
487 | sector_t *span) | ||
488 | { | ||
489 | *span = sis->pages; | ||
490 | return xs_swapper(NFS_CLIENT(file->f_mapping->host)->cl_xprt, 1); | ||
491 | } | ||
492 | |||
493 | static void nfs_swap_deactivate(struct file *file) | ||
494 | { | ||
495 | xs_swapper(NFS_CLIENT(file->f_mapping->host)->cl_xprt, 0); | ||
496 | } | ||
497 | #endif | ||
498 | |||
485 | const struct address_space_operations nfs_file_aops = { | 499 | const struct address_space_operations nfs_file_aops = { |
486 | .readpage = nfs_readpage, | 500 | .readpage = nfs_readpage, |
487 | .readpages = nfs_readpages, | 501 | .readpages = nfs_readpages, |
@@ -496,6 +510,10 @@ const struct address_space_operations nfs_file_aops = { | |||
496 | .migratepage = nfs_migrate_page, | 510 | .migratepage = nfs_migrate_page, |
497 | .launder_page = nfs_launder_page, | 511 | .launder_page = nfs_launder_page, |
498 | .error_remove_page = generic_error_remove_page, | 512 | .error_remove_page = generic_error_remove_page, |
513 | #ifdef CONFIG_NFS_SWAP | ||
514 | .swap_activate = nfs_swap_activate, | ||
515 | .swap_deactivate = nfs_swap_deactivate, | ||
516 | #endif | ||
499 | }; | 517 | }; |
500 | 518 | ||
501 | /* | 519 | /* |
@@ -570,7 +588,7 @@ ssize_t nfs_file_write(struct kiocb *iocb, const struct iovec *iov, | |||
570 | size_t count = iov_length(iov, nr_segs); | 588 | size_t count = iov_length(iov, nr_segs); |
571 | 589 | ||
572 | if (iocb->ki_filp->f_flags & O_DIRECT) | 590 | if (iocb->ki_filp->f_flags & O_DIRECT) |
573 | return nfs_file_direct_write(iocb, iov, nr_segs, pos); | 591 | return nfs_file_direct_write(iocb, iov, nr_segs, pos, true); |
574 | 592 | ||
575 | dprintk("NFS: write(%s/%s, %lu@%Ld)\n", | 593 | dprintk("NFS: write(%s/%s, %lu@%Ld)\n", |
576 | dentry->d_parent->d_name.name, dentry->d_name.name, | 594 | dentry->d_parent->d_name.name, dentry->d_name.name, |