NFSv4: Ensure that we track the NFSv4 lock state in read/write requests.
[deliverable/linux.git] / fs / nfs / nfs4xdr.c
index 6bdef28efa33ff07561da0f92f492bc1b5d78046..873b62f209ea2f2c2f6a7b8537f4805b3785b2fe 100644 (file)
@@ -862,8 +862,8 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap, const
                bmval1 |= FATTR4_WORD1_TIME_ACCESS_SET;
                *p++ = cpu_to_be32(NFS4_SET_TO_CLIENT_TIME);
                *p++ = cpu_to_be32(0);
-               *p++ = cpu_to_be32(iap->ia_mtime.tv_sec);
-               *p++ = cpu_to_be32(iap->ia_mtime.tv_nsec);
+               *p++ = cpu_to_be32(iap->ia_atime.tv_sec);
+               *p++ = cpu_to_be32(iap->ia_atime.tv_nsec);
        }
        else if (iap->ia_valid & ATTR_ATIME) {
                bmval1 |= FATTR4_WORD1_TIME_ACCESS_SET;
@@ -1172,7 +1172,7 @@ static inline void encode_createmode(struct xdr_stream *xdr, const struct nfs_op
                break;
        default:
                clp = arg->server->nfs_client;
-               if (clp->cl_minorversion > 0) {
+               if (clp->cl_mvops->minor_version > 0) {
                        if (nfs4_has_persistent_session(clp)) {
                                *p = cpu_to_be32(NFS4_CREATE_GUARDED);
                                encode_attrs(xdr, arg->u.attrs, arg->server);
@@ -1324,14 +1324,14 @@ static void encode_putrootfh(struct xdr_stream *xdr, struct compound_hdr *hdr)
        hdr->replen += decode_putrootfh_maxsz;
 }
 
-static void encode_stateid(struct xdr_stream *xdr, const struct nfs_open_context *ctx)
+static void encode_stateid(struct xdr_stream *xdr, const struct nfs_open_context *ctx, const struct nfs_lock_context *l_ctx)
 {
        nfs4_stateid stateid;
        __be32 *p;
 
        p = reserve_space(xdr, NFS4_STATEID_SIZE);
        if (ctx->state != NULL) {
-               nfs4_copy_stateid(&stateid, ctx->state, ctx->lockowner);
+               nfs4_copy_stateid(&stateid, ctx->state, l_ctx->lockowner);
                xdr_encode_opaque_fixed(p, stateid.data, NFS4_STATEID_SIZE);
        } else
                xdr_encode_opaque_fixed(p, zero_stateid.data, NFS4_STATEID_SIZE);
@@ -1344,7 +1344,7 @@ static void encode_read(struct xdr_stream *xdr, const struct nfs_readargs *args,
        p = reserve_space(xdr, 4);
        *p = cpu_to_be32(OP_READ);
 
-       encode_stateid(xdr, args->context);
+       encode_stateid(xdr, args->context, args->lock_context);
 
        p = reserve_space(xdr, 12);
        p = xdr_encode_hyper(p, args->offset);
@@ -1523,7 +1523,7 @@ static void encode_write(struct xdr_stream *xdr, const struct nfs_writeargs *arg
        p = reserve_space(xdr, 4);
        *p = cpu_to_be32(OP_WRITE);
 
-       encode_stateid(xdr, args->context);
+       encode_stateid(xdr, args->context, args->lock_context);
 
        p = reserve_space(xdr, 16);
        p = xdr_encode_hyper(p, args->offset);
@@ -1704,7 +1704,7 @@ static u32 nfs4_xdr_minorversion(const struct nfs4_sequence_args *args)
 {
 #if defined(CONFIG_NFS_V4_1)
        if (args->sa_session)
-               return args->sa_session->clp->cl_minorversion;
+               return args->sa_session->clp->cl_mvops->minor_version;
 #endif /* CONFIG_NFS_V4_1 */
        return 0;
 }
@@ -2395,7 +2395,7 @@ static int nfs4_xdr_enc_exchange_id(struct rpc_rqst *req, uint32_t *p,
 {
        struct xdr_stream xdr;
        struct compound_hdr hdr = {
-               .minorversion = args->client->cl_minorversion,
+               .minorversion = args->client->cl_mvops->minor_version,
        };
 
        xdr_init_encode(&xdr, &req->rq_snd_buf, p);
@@ -2413,7 +2413,7 @@ static int nfs4_xdr_enc_create_session(struct rpc_rqst *req, uint32_t *p,
 {
        struct xdr_stream xdr;
        struct compound_hdr hdr = {
-               .minorversion = args->client->cl_minorversion,
+               .minorversion = args->client->cl_mvops->minor_version,
        };
 
        xdr_init_encode(&xdr, &req->rq_snd_buf, p);
@@ -2431,7 +2431,7 @@ static int nfs4_xdr_enc_destroy_session(struct rpc_rqst *req, uint32_t *p,
 {
        struct xdr_stream xdr;
        struct compound_hdr hdr = {
-               .minorversion = session->clp->cl_minorversion,
+               .minorversion = session->clp->cl_mvops->minor_version,
        };
 
        xdr_init_encode(&xdr, &req->rq_snd_buf, p);
This page took 0.028133 seconds and 5 git commands to generate.