NFSv4: Clean up nfs4_select_rw_stateid()
Ensure that we select delegation stateids first, then lock stateids and then open stateids. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
@@ -1491,12 +1491,17 @@ static void encode_putrootfh(struct xdr_stream *xdr, struct compound_hdr *hdr)
|
||||
encode_op_hdr(xdr, OP_PUTROOTFH, decode_putrootfh_maxsz, hdr);
|
||||
}
|
||||
|
||||
static void encode_open_stateid(struct xdr_stream *xdr, const struct nfs_open_context *ctx, const struct nfs_lock_context *l_ctx, int zero_seqid)
|
||||
static void encode_open_stateid(struct xdr_stream *xdr,
|
||||
const struct nfs_open_context *ctx,
|
||||
const struct nfs_lock_context *l_ctx,
|
||||
fmode_t fmode,
|
||||
int zero_seqid)
|
||||
{
|
||||
nfs4_stateid stateid;
|
||||
|
||||
if (ctx->state != NULL) {
|
||||
nfs4_select_rw_stateid(&stateid, ctx->state, l_ctx->lockowner, l_ctx->pid);
|
||||
nfs4_select_rw_stateid(&stateid, ctx->state,
|
||||
fmode, l_ctx->lockowner, l_ctx->pid);
|
||||
if (zero_seqid)
|
||||
stateid.seqid = 0;
|
||||
encode_nfs4_stateid(xdr, &stateid);
|
||||
@@ -1510,7 +1515,7 @@ static void encode_read(struct xdr_stream *xdr, const struct nfs_readargs *args,
|
||||
|
||||
encode_op_hdr(xdr, OP_READ, decode_read_maxsz, hdr);
|
||||
encode_open_stateid(xdr, args->context, args->lock_context,
|
||||
hdr->minorversion);
|
||||
FMODE_READ, hdr->minorversion);
|
||||
|
||||
p = reserve_space(xdr, 12);
|
||||
p = xdr_encode_hyper(p, args->offset);
|
||||
@@ -1648,7 +1653,7 @@ static void encode_write(struct xdr_stream *xdr, const struct nfs_writeargs *arg
|
||||
|
||||
encode_op_hdr(xdr, OP_WRITE, decode_write_maxsz, hdr);
|
||||
encode_open_stateid(xdr, args->context, args->lock_context,
|
||||
hdr->minorversion);
|
||||
FMODE_WRITE, hdr->minorversion);
|
||||
|
||||
p = reserve_space(xdr, 16);
|
||||
p = xdr_encode_hyper(p, args->offset);
|
||||
|
Reference in New Issue
Block a user