Or, put into really half-baked (I've only spent an evening looking at nfs client code) terms, isn't something like this required? diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 11fe5d7..15b8150 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -1923,8 +1923,16 @@ static void nfs4_open_done(struct rpc_task *task, void *calldata) renew_lease(data->o_res.server, data->timestamp); if (!(data->o_res.rflags & NFS4_OPEN_RESULT_CONFIRM)) nfs_confirm_seqid(&data->owner->so_seqid, 0); + + if (nfs4_stateid_is_newer(&data->state->open_stateid, &data->o_res.stateid) && + !can_open_cached(data->state, data->o_arg.fmode, data->o_arg.open_flags)) { + rpc_restart_call_prepare(task); + goto out; + } } data->rpc_done = 1; +out: + return; } static void nfs4_open_release(void *calldata) -- Andrew W. Elble aweits@xxxxxxxxxxxxxxxxxx Infrastructure Engineer, Communications Technical Lead Rochester Institute of Technology PGP: BFAD 8461 4CCF DC95 DA2C B0EB 965B 082E 863E C912 -- 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