diff options
author | Shehjar Tikoo <shehjart@gluster.com> | 2010-04-12 21:57:35 +0000 |
---|---|---|
committer | Anand V. Avati <avati@dev.gluster.com> | 2010-04-13 10:01:49 -0700 |
commit | 4b754a77545fb7db030471fd4d84b8eee6008d7c (patch) | |
tree | 1e59d8e3ecda694f5947fa6049be43fb9364c9bf /xlators/nfs/server/src/nfs3.c | |
parent | 3d125eaed2fbf71c8c6dcddd45a9fa61ef4a4448 (diff) |
nfs3: Use nfs3state in call_state to avoid getting from rpc request
This change avoids having the nfs translator depend on the sanity
of the rpcsvc_request_t type after NFS reply has been sent. This
was a problem because the request structure is guaranteed to be
invalid after the reply for the request has been submitted by the
RPC program. NFS3 handler was ignoring this behaviour and accessing
the private in request after reply submission resulting in access to
corrupted data.
Signed-off-by: Shehjar Tikoo <shehjart@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 757 ([NFS-Alpha] Crash in nfs3_call_state_wipe)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=757
Diffstat (limited to 'xlators/nfs/server/src/nfs3.c')
-rw-r--r-- | xlators/nfs/server/src/nfs3.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/xlators/nfs/server/src/nfs3.c b/xlators/nfs/server/src/nfs3.c index 712bbcaf382..57d9f576eb1 100644 --- a/xlators/nfs/server/src/nfs3.c +++ b/xlators/nfs/server/src/nfs3.c @@ -181,6 +181,7 @@ nfs3_call_state_init (struct nfs3_state *s, rpcsvc_request_t *req, xlator_t *v) cs->req = req; cs->vol = v; cs->nfsx = s->nfsx; + cs->nfs3state = s; return cs; } @@ -192,7 +193,7 @@ nfs3_call_state_wipe (nfs3_call_state_t *cs) if (!cs) return; - nfs3 = rpcsvc_request_program_private (cs->req); + nfs3 = cs->nfs3state; if (cs->fd) { gf_log (GF_NFS3, GF_LOG_TRACE, "fd ref: %d", cs->fd->refcount); fd_unref (cs->fd); |