Loading fs/nfsd/nfs4xdr.c +29 −12 Original line number Diff line number Diff line Loading @@ -664,6 +664,19 @@ nfsd4_decode_state_owner4(struct nfsd4_compoundargs *argp, return nfsd4_decode_opaque(argp, owner); } static __be32 nfsd4_decode_sessionid4(struct nfsd4_compoundargs *argp, struct nfs4_sessionid *sessionid) { __be32 *p; p = xdr_inline_decode(argp->xdr, NFS4_MAX_SESSIONID_LEN); if (!p) return nfserr_bad_xdr; memcpy(sessionid->data, p, sizeof(sessionid->data)); return nfs_ok; } /* Defined in Appendix A of RFC 5531 */ static __be32 nfsd4_decode_authsys_parms(struct nfsd4_compoundargs *argp, Loading Loading @@ -788,18 +801,6 @@ nfsd4_decode_access(struct nfsd4_compoundargs *argp, return nfs_ok; } static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, struct nfsd4_bind_conn_to_session *bcts) { DECODE_HEAD; READ_BUF(NFS4_MAX_SESSIONID_LEN + 8); COPYMEM(bcts->sessionid.data, NFS4_MAX_SESSIONID_LEN); bcts->dir = be32_to_cpup(p++); /* XXX: skipping ctsa_use_conn_in_rdma_mode. Perhaps Tom Tucker * could help us figure out we should be using it. */ DECODE_TAIL; } static __be32 nfsd4_decode_close(struct nfsd4_compoundargs *argp, struct nfsd4_close *close) { Loading Loading @@ -1479,6 +1480,22 @@ static __be32 nfsd4_decode_backchannel_ctl(struct nfsd4_compoundargs *argp, stru return nfsd4_decode_cb_sec(argp, &bc->bc_cb_sec); } static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, struct nfsd4_bind_conn_to_session *bcts) { u32 use_conn_in_rdma_mode; __be32 status; status = nfsd4_decode_sessionid4(argp, &bcts->sessionid); if (status) return status; if (xdr_stream_decode_u32(argp->xdr, &bcts->dir) < 0) return nfserr_bad_xdr; if (xdr_stream_decode_u32(argp->xdr, &use_conn_in_rdma_mode) < 0) return nfserr_bad_xdr; return nfs_ok; } static __be32 nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, struct nfsd4_exchange_id *exid) Loading Loading
fs/nfsd/nfs4xdr.c +29 −12 Original line number Diff line number Diff line Loading @@ -664,6 +664,19 @@ nfsd4_decode_state_owner4(struct nfsd4_compoundargs *argp, return nfsd4_decode_opaque(argp, owner); } static __be32 nfsd4_decode_sessionid4(struct nfsd4_compoundargs *argp, struct nfs4_sessionid *sessionid) { __be32 *p; p = xdr_inline_decode(argp->xdr, NFS4_MAX_SESSIONID_LEN); if (!p) return nfserr_bad_xdr; memcpy(sessionid->data, p, sizeof(sessionid->data)); return nfs_ok; } /* Defined in Appendix A of RFC 5531 */ static __be32 nfsd4_decode_authsys_parms(struct nfsd4_compoundargs *argp, Loading Loading @@ -788,18 +801,6 @@ nfsd4_decode_access(struct nfsd4_compoundargs *argp, return nfs_ok; } static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, struct nfsd4_bind_conn_to_session *bcts) { DECODE_HEAD; READ_BUF(NFS4_MAX_SESSIONID_LEN + 8); COPYMEM(bcts->sessionid.data, NFS4_MAX_SESSIONID_LEN); bcts->dir = be32_to_cpup(p++); /* XXX: skipping ctsa_use_conn_in_rdma_mode. Perhaps Tom Tucker * could help us figure out we should be using it. */ DECODE_TAIL; } static __be32 nfsd4_decode_close(struct nfsd4_compoundargs *argp, struct nfsd4_close *close) { Loading Loading @@ -1479,6 +1480,22 @@ static __be32 nfsd4_decode_backchannel_ctl(struct nfsd4_compoundargs *argp, stru return nfsd4_decode_cb_sec(argp, &bc->bc_cb_sec); } static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, struct nfsd4_bind_conn_to_session *bcts) { u32 use_conn_in_rdma_mode; __be32 status; status = nfsd4_decode_sessionid4(argp, &bcts->sessionid); if (status) return status; if (xdr_stream_decode_u32(argp->xdr, &bcts->dir) < 0) return nfserr_bad_xdr; if (xdr_stream_decode_u32(argp->xdr, &use_conn_in_rdma_mode) < 0) return nfserr_bad_xdr; return nfs_ok; } static __be32 nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, struct nfsd4_exchange_id *exid) Loading