diff options
author | Weston Andros Adamson <dros@netapp.com> | 2013-10-21 13:10:13 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-11-29 14:11:48 -0500 |
commit | 231817ee68a9640d91ef34ce12c4d67b38f17ed8 (patch) | |
tree | 6180da7c71bae68f1c88f3f71022a74856dee0a1 /fs/nfs | |
parent | a5178adbeda8c532361fd22a6dff3bf699ab8b13 (diff) |
NFSv4: don't reprocess cached open CLAIM_PREVIOUS
commit d2bfda2e7aa036f90ccea610a657064b1e267913 upstream.
Cached opens have already been handled by _nfs4_opendata_reclaim_to_nfs4_state
and can safely skip being reprocessed, but must still call update_open_stateid
to make sure that all active fmodes are recovered.
Signed-off-by: Weston Andros Adamson <dros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/nfs')
-rw-r--r-- | fs/nfs/nfs4proc.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 2e230830ff2b..d097233cd33b 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -1159,10 +1159,13 @@ _nfs4_opendata_reclaim_to_nfs4_state(struct nfs4_opendata *data) | |||
1159 | struct nfs4_state *state = data->state; | 1159 | struct nfs4_state *state = data->state; |
1160 | int ret; | 1160 | int ret; |
1161 | 1161 | ||
1162 | /* allow cached opens (!rpc_done && !rpc_status) */ | 1162 | if (!data->rpc_done) { |
1163 | if (!data->rpc_done && data->rpc_status) { | 1163 | if (data->rpc_status) { |
1164 | ret = data->rpc_status; | 1164 | ret = data->rpc_status; |
1165 | goto err; | 1165 | goto err; |
1166 | } | ||
1167 | /* cached opens have already been processed */ | ||
1168 | goto update; | ||
1166 | } | 1169 | } |
1167 | 1170 | ||
1168 | ret = -ENOMEM; | 1171 | ret = -ENOMEM; |
@@ -1176,6 +1179,7 @@ _nfs4_opendata_reclaim_to_nfs4_state(struct nfs4_opendata *data) | |||
1176 | 1179 | ||
1177 | if (data->o_res.delegation_type != 0) | 1180 | if (data->o_res.delegation_type != 0) |
1178 | nfs4_opendata_check_deleg(data, state); | 1181 | nfs4_opendata_check_deleg(data, state); |
1182 | update: | ||
1179 | update_open_stateid(state, &data->o_res.stateid, NULL, | 1183 | update_open_stateid(state, &data->o_res.stateid, NULL, |
1180 | data->o_arg.fmode); | 1184 | data->o_arg.fmode); |
1181 | 1185 | ||