Merge tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux
[linux-2.6-microblaze.git] / fs / nfs / file.c
index 2df2a53..150b7fa 100644 (file)
 
 static const struct vm_operations_struct nfs_file_vm_ops;
 
-/* Hack for future NFS swap support */
-#ifndef IS_SWAPFILE
-# define IS_SWAPFILE(inode)    (0)
-#endif
-
 int nfs_check_flags(int flags)
 {
        if ((flags & (O_APPEND | O_DIRECT)) == (O_APPEND | O_DIRECT))
@@ -162,7 +157,7 @@ nfs_file_read(struct kiocb *iocb, struct iov_iter *to)
        ssize_t result;
 
        if (iocb->ki_flags & IOCB_DIRECT)
-               return nfs_file_direct_read(iocb, to);
+               return nfs_file_direct_read(iocb, to, false);
 
        dprintk("NFS: read(%pD2, %zu@%lu)\n",
                iocb->ki_filp,
@@ -488,8 +483,9 @@ static int nfs_swap_activate(struct swap_info_struct *sis, struct file *file,
 {
        unsigned long blocks;
        long long isize;
-       struct rpc_clnt *clnt = NFS_CLIENT(file->f_mapping->host);
-       struct inode *inode = file->f_mapping->host;
+       struct inode *inode = file_inode(file);
+       struct rpc_clnt *clnt = NFS_CLIENT(inode);
+       struct nfs_client *cl = NFS_SERVER(inode)->nfs_client;
 
        spin_lock(&inode->i_lock);
        blocks = inode->i_blocks;
@@ -502,19 +498,27 @@ static int nfs_swap_activate(struct swap_info_struct *sis, struct file *file,
 
        *span = sis->pages;
 
+
+       if (cl->rpc_ops->enable_swap)
+               cl->rpc_ops->enable_swap(inode);
+
        return rpc_clnt_swap_activate(clnt);
 }
 
 static void nfs_swap_deactivate(struct file *file)
 {
-       struct rpc_clnt *clnt = NFS_CLIENT(file->f_mapping->host);
+       struct inode *inode = file_inode(file);
+       struct rpc_clnt *clnt = NFS_CLIENT(inode);
+       struct nfs_client *cl = NFS_SERVER(inode)->nfs_client;
 
        rpc_clnt_swap_deactivate(clnt);
+       if (cl->rpc_ops->disable_swap)
+               cl->rpc_ops->disable_swap(file_inode(file));
 }
 
 const struct address_space_operations nfs_file_aops = {
        .readpage = nfs_readpage,
-       .readpages = nfs_readpages,
+       .readahead = nfs_readahead,
        .dirty_folio = filemap_dirty_folio,
        .writepage = nfs_writepage,
        .writepages = nfs_writepages,
@@ -619,7 +623,7 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from)
                return result;
 
        if (iocb->ki_flags & IOCB_DIRECT)
-               return nfs_file_direct_write(iocb, from);
+               return nfs_file_direct_write(iocb, from, false);
 
        dprintk("NFS: write(%pD2, %zu@%Ld)\n",
                file, iov_iter_count(from), (long long) iocb->ki_pos);
@@ -642,7 +646,7 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from)
        result = generic_write_checks(iocb, from);
        if (result > 0) {
                current->backing_dev_info = inode_to_bdi(inode);
-               result = generic_perform_write(file, from, iocb->ki_pos);
+               result = generic_perform_write(iocb, from);
                current->backing_dev_info = NULL;
        }
        nfs_end_io_write(inode);