diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2015-01-23 15:32:46 -0500 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2015-01-23 19:22:39 -0500 |
commit | 566fcec60b7458784d4ed9bca974c5a56dacf214 (patch) | |
tree | 380320b28a9fa7885c580976407a2bd28003cd12 /fs/nfs/nfs4xdr.c | |
parent | 2ef47eb1aee171ecf1d83311b9f7fae80f330181 (diff) |
NFSv4: Fix an atomicity problem in CLOSE
If we are to remove the serialisation of OPEN/CLOSE, then we need to
ensure that the stateid sent as part of a CLOSE operation does not
change after we test the state in nfs4_close_prepare.
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/nfs4xdr.c')
-rw-r--r-- | fs/nfs/nfs4xdr.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index cb4376b78ed9..7e7be5ab70bb 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c | |||
@@ -1125,7 +1125,7 @@ static void encode_close(struct xdr_stream *xdr, const struct nfs_closeargs *arg | |||
1125 | { | 1125 | { |
1126 | encode_op_hdr(xdr, OP_CLOSE, decode_close_maxsz, hdr); | 1126 | encode_op_hdr(xdr, OP_CLOSE, decode_close_maxsz, hdr); |
1127 | encode_nfs4_seqid(xdr, arg->seqid); | 1127 | encode_nfs4_seqid(xdr, arg->seqid); |
1128 | encode_nfs4_stateid(xdr, arg->stateid); | 1128 | encode_nfs4_stateid(xdr, &arg->stateid); |
1129 | } | 1129 | } |
1130 | 1130 | ||
1131 | static void encode_commit(struct xdr_stream *xdr, const struct nfs_commitargs *args, struct compound_hdr *hdr) | 1131 | static void encode_commit(struct xdr_stream *xdr, const struct nfs_commitargs *args, struct compound_hdr *hdr) |
@@ -1530,7 +1530,7 @@ static void encode_open_confirm(struct xdr_stream *xdr, const struct nfs_open_co | |||
1530 | static void encode_open_downgrade(struct xdr_stream *xdr, const struct nfs_closeargs *arg, struct compound_hdr *hdr) | 1530 | static void encode_open_downgrade(struct xdr_stream *xdr, const struct nfs_closeargs *arg, struct compound_hdr *hdr) |
1531 | { | 1531 | { |
1532 | encode_op_hdr(xdr, OP_OPEN_DOWNGRADE, decode_open_downgrade_maxsz, hdr); | 1532 | encode_op_hdr(xdr, OP_OPEN_DOWNGRADE, decode_open_downgrade_maxsz, hdr); |
1533 | encode_nfs4_stateid(xdr, arg->stateid); | 1533 | encode_nfs4_stateid(xdr, &arg->stateid); |
1534 | encode_nfs4_seqid(xdr, arg->seqid); | 1534 | encode_nfs4_seqid(xdr, arg->seqid); |
1535 | encode_share_access(xdr, arg->fmode); | 1535 | encode_share_access(xdr, arg->fmode); |
1536 | } | 1536 | } |