aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/inode.c')
-rw-r--r--fs/nfs/inode.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index c1c7a9d78722..c121982659a2 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -713,16 +713,23 @@ EXPORT_SYMBOL_GPL(put_nfs_open_context);
713 * Ensure that mmap has a recent RPC credential for use when writing out 713 * Ensure that mmap has a recent RPC credential for use when writing out
714 * shared pages 714 * shared pages
715 */ 715 */
716void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx) 716void nfs_inode_attach_open_context(struct nfs_open_context *ctx)
717{ 717{
718 struct inode *inode = file_inode(filp); 718 struct inode *inode = ctx->dentry->d_inode;
719 struct nfs_inode *nfsi = NFS_I(inode); 719 struct nfs_inode *nfsi = NFS_I(inode);
720 720
721 filp->private_data = get_nfs_open_context(ctx);
722 spin_lock(&inode->i_lock); 721 spin_lock(&inode->i_lock);
723 list_add(&ctx->list, &nfsi->open_files); 722 list_add(&ctx->list, &nfsi->open_files);
724 spin_unlock(&inode->i_lock); 723 spin_unlock(&inode->i_lock);
725} 724}
725EXPORT_SYMBOL_GPL(nfs_inode_attach_open_context);
726
727void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx)
728{
729 filp->private_data = get_nfs_open_context(ctx);
730 if (list_empty(&ctx->list))
731 nfs_inode_attach_open_context(ctx);
732}
726EXPORT_SYMBOL_GPL(nfs_file_set_open_context); 733EXPORT_SYMBOL_GPL(nfs_file_set_open_context);
727 734
728/* 735/*
@@ -748,10 +755,11 @@ struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_c
748 755
749static void nfs_file_clear_open_context(struct file *filp) 756static void nfs_file_clear_open_context(struct file *filp)
750{ 757{
751 struct inode *inode = file_inode(filp);
752 struct nfs_open_context *ctx = nfs_file_open_context(filp); 758 struct nfs_open_context *ctx = nfs_file_open_context(filp);
753 759
754 if (ctx) { 760 if (ctx) {
761 struct inode *inode = ctx->dentry->d_inode;
762
755 filp->private_data = NULL; 763 filp->private_data = NULL;
756 spin_lock(&inode->i_lock); 764 spin_lock(&inode->i_lock);
757 list_move_tail(&ctx->list, &NFS_I(inode)->open_files); 765 list_move_tail(&ctx->list, &NFS_I(inode)->open_files);