On Oct 28, 2013, at 5:08 PM, Myklebust, Trond <Trond.Myklebust@xxxxxxxxxx> wrote: > On Mon, 2013-10-21 at 13:10 -0400, Weston Andros Adamson wrote: >> 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@xxxxxxxxxx> >> --- >> fs/nfs/nfs4proc.c | 17 +++++++++++++---- >> 1 file changed, 13 insertions(+), 4 deletions(-) >> >> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c >> index 8ae1589..a3b78df 100644 >> --- a/fs/nfs/nfs4proc.c >> +++ b/fs/nfs/nfs4proc.c >> @@ -1315,12 +1315,15 @@ _nfs4_opendata_reclaim_to_nfs4_state(struct nfs4_opendata *data) >> { >> struct inode *inode = data->state->inode; >> struct nfs4_state *state = data->state; >> + bool cached_open = false; >> int ret; >> >> - /* allow cached opens (!rpc_done && !rpc_status) */ >> - if (!data->rpc_done && data->rpc_status) { >> - ret = data->rpc_status; >> - goto err; >> + if (!data->rpc_done) { >> + if (data->rpc_status) { >> + ret = data->rpc_status; >> + goto err; >> + } else >> + cached_open = true; > > This too was replaced by a simplified version. Once we get rid of the > state == NULL check, we can just replace the above with a 'goto update’ Ok - to both updates. I guess I got a little too fancy. -dros > >> } >> >> /* referenced the passed state */ >> @@ -1328,6 +1331,10 @@ _nfs4_opendata_reclaim_to_nfs4_state(struct nfs4_opendata *data) >> if (state == NULL || !atomic_inc_not_zero(&state->count)) >> goto err; >> >> + /* cached opens have already been processed */ >> + if (cached_open) >> + goto update; >> + >> ret = nfs_refresh_inode(inode, &data->f_attr); >> if (ret) >> goto err_put; >> @@ -1336,6 +1343,8 @@ _nfs4_opendata_reclaim_to_nfs4_state(struct nfs4_opendata *data) >> >> if (data->o_res.delegation_type != 0) >> nfs4_opendata_check_deleg(data, state); >> + >> +update: >> update_open_stateid(state, &data->o_res.stateid, NULL, >> data->o_arg.fmode); >> > > -- > Trond Myklebust > Linux NFS client maintainer > > NetApp > Trond.Myklebust@xxxxxxxxxx > www.netapp.com -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html