summaryrefslogtreecommitdiff
path: root/fs/nfs
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2018-05-22 18:17:16 +0300
committerTrond Myklebust <trond.myklebust@hammerspace.com>2018-05-31 22:03:12 +0300
commitae55e59da0e401893b3c52b575fc18a00623d0a1 (patch)
tree44467021cc3ac279cb70b829625eb031c7a3d9d5 /fs/nfs
parent32f1c28f3d453f4652948ab9298078874d1a56b6 (diff)
downloadlinux-ae55e59da0e401893b3c52b575fc18a00623d0a1.tar.xz
pnfs: Don't release the sequence slot until we've processed layoutget on open
If the server recalls the layout that was just handed out, we risk hitting a race as described in RFC5661 Section 2.10.6.3 unless we ensure that we release the sequence slot after processing the LAYOUTGET operation that was sent as part of the OPEN compound. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'fs/nfs')
-rw-r--r--fs/nfs/nfs4proc.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index d18447d11b06..bb1141c48281 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -2789,7 +2789,7 @@ static int _nfs4_open_and_get_state(struct nfs4_opendata *opendata,
if (ret != 0)
goto out;
- state = nfs4_opendata_to_nfs4_state(opendata);
+ state = _nfs4_opendata_to_nfs4_state(opendata);
ret = PTR_ERR(state);
if (IS_ERR(state))
goto out;
@@ -2828,6 +2828,7 @@ static int _nfs4_open_and_get_state(struct nfs4_opendata *opendata,
}
out:
+ nfs4_sequence_free_slot(&opendata->o_res.seq_res);
return ret;
}