aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r--fs/nfs/nfs4proc.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index f363fd6c7f4d..7be3d2d15d6f 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -865,6 +865,7 @@ struct nfs4_closedata {
865 struct nfs4_state *state; 865 struct nfs4_state *state;
866 struct nfs_closeargs arg; 866 struct nfs_closeargs arg;
867 struct nfs_closeres res; 867 struct nfs_closeres res;
868 struct nfs_fattr fattr;
868}; 869};
869 870
870static void nfs4_free_closedata(struct nfs4_closedata *calldata) 871static void nfs4_free_closedata(struct nfs4_closedata *calldata)
@@ -904,6 +905,7 @@ static void nfs4_close_done(struct rpc_task *task)
904 return; 905 return;
905 } 906 }
906 } 907 }
908 nfs_refresh_inode(calldata->inode, calldata->res.fattr);
907 state->state = calldata->arg.open_flags; 909 state->state = calldata->arg.open_flags;
908 nfs4_free_closedata(calldata); 910 nfs4_free_closedata(calldata);
909} 911}
@@ -941,6 +943,7 @@ static void nfs4_close_begin(struct rpc_task *task)
941 rpc_exit(task, 0); 943 rpc_exit(task, 0);
942 return; 944 return;
943 } 945 }
946 nfs_fattr_init(calldata->res.fattr);
944 if (mode != 0) 947 if (mode != 0)
945 msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_OPEN_DOWNGRADE]; 948 msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_OPEN_DOWNGRADE];
946 calldata->arg.open_flags = mode; 949 calldata->arg.open_flags = mode;
@@ -960,6 +963,7 @@ static void nfs4_close_begin(struct rpc_task *task)
960 */ 963 */
961int nfs4_do_close(struct inode *inode, struct nfs4_state *state, mode_t mode) 964int nfs4_do_close(struct inode *inode, struct nfs4_state *state, mode_t mode)
962{ 965{
966 struct nfs_server *server = NFS_SERVER(inode);
963 struct nfs4_closedata *calldata; 967 struct nfs4_closedata *calldata;
964 int status = -ENOMEM; 968 int status = -ENOMEM;
965 969
@@ -974,8 +978,11 @@ int nfs4_do_close(struct inode *inode, struct nfs4_state *state, mode_t mode)
974 calldata->arg.seqid = nfs_alloc_seqid(&state->owner->so_seqid); 978 calldata->arg.seqid = nfs_alloc_seqid(&state->owner->so_seqid);
975 if (calldata->arg.seqid == NULL) 979 if (calldata->arg.seqid == NULL)
976 goto out_free_calldata; 980 goto out_free_calldata;
981 calldata->arg.bitmask = server->attr_bitmask;
982 calldata->res.fattr = &calldata->fattr;
983 calldata->res.server = server;
977 984
978 status = nfs4_call_async(NFS_SERVER(inode)->client, nfs4_close_begin, 985 status = nfs4_call_async(server->client, nfs4_close_begin,
979 nfs4_close_done, calldata); 986 nfs4_close_done, calldata);
980 if (status == 0) 987 if (status == 0)
981 goto out; 988 goto out;