Lines Matching defs:rctxt
399 * @rctxt: Ingress receive context
410 * %true: Read list is valid. @rctxt's xdr_stream is updated to point
414 * %false: Read list is corrupt. @rctxt's xdr_stream is left in an
417 static bool xdr_count_read_segments(struct svc_rdma_recv_ctxt *rctxt, __be32 *p)
419 rctxt->rc_call_pcl.cl_count = 0;
420 rctxt->rc_read_pcl.cl_count = 0;
425 p = xdr_inline_decode(&rctxt->rc_stream,
435 ++rctxt->rc_read_pcl.cl_count;
437 ++rctxt->rc_call_pcl.cl_count;
440 p = xdr_inline_decode(&rctxt->rc_stream, sizeof(*p));
454 * %true: Read list is valid. @rctxt's xdr_stream is updated
456 * %false: Read list is corrupt. @rctxt's xdr_stream is left
459 static bool xdr_check_read_list(struct svc_rdma_recv_ctxt *rctxt)
463 p = xdr_inline_decode(&rctxt->rc_stream, sizeof(*p));
466 if (!xdr_count_read_segments(rctxt, p))
468 if (!pcl_alloc_call(rctxt, p))
470 return pcl_alloc_read(rctxt, p);
473 static bool xdr_check_write_chunk(struct svc_rdma_recv_ctxt *rctxt)
478 if (xdr_stream_decode_u32(&rctxt->rc_stream, &segcount))
482 p = xdr_inline_decode(&rctxt->rc_stream,
489 * @rctxt: Received header and decoding state
496 * %true: Write list is valid. @rctxt's xdr_stream is updated
499 * %false: Write list is corrupt. @rctxt's xdr_stream is left
502 static bool xdr_count_write_chunks(struct svc_rdma_recv_ctxt *rctxt, __be32 *p)
504 rctxt->rc_write_pcl.cl_count = 0;
506 if (!xdr_check_write_chunk(rctxt))
508 ++rctxt->rc_write_pcl.cl_count;
509 p = xdr_inline_decode(&rctxt->rc_stream, sizeof(*p));
526 * %true: Write list is valid. @rctxt's xdr_stream is updated
528 * %false: Write list is corrupt. @rctxt's xdr_stream is left
531 static bool xdr_check_write_list(struct svc_rdma_recv_ctxt *rctxt)
535 p = xdr_inline_decode(&rctxt->rc_stream, sizeof(*p));
538 if (!xdr_count_write_chunks(rctxt, p))
540 if (!pcl_alloc_write(rctxt, &rctxt->rc_write_pcl, p))
543 rctxt->rc_cur_result_payload = pcl_first_chunk(&rctxt->rc_write_pcl);
554 * %true: Reply chunk is valid. @rctxt's xdr_stream is updated
556 * %false: Reply chunk is corrupt. @rctxt's xdr_stream is left
559 static bool xdr_check_reply_chunk(struct svc_rdma_recv_ctxt *rctxt)
563 p = xdr_inline_decode(&rctxt->rc_stream, sizeof(*p));
569 if (!xdr_check_write_chunk(rctxt))
572 rctxt->rc_reply_pcl.cl_count = 1;
573 return pcl_alloc_write(rctxt, &rctxt->rc_reply_pcl, p);
634 * @rctxt: state of decoding
648 struct svc_rdma_recv_ctxt *rctxt)
654 xdr_init_decode(&rctxt->rc_stream, rq_arg, rdma_argp, NULL);
656 p = xdr_inline_decode(&rctxt->rc_stream,
664 rctxt->rc_msgtype = *p;
665 switch (rctxt->rc_msgtype) {
678 if (!xdr_check_read_list(rctxt))
680 if (!xdr_check_write_list(rctxt))
682 if (!xdr_check_reply_chunk(rctxt))
685 rq_arg->head[0].iov_base = rctxt->rc_stream.p;
686 hdr_len = xdr_stream_pos(&rctxt->rc_stream);
689 trace_svcrdma_decode_rqst(rctxt, rdma_argp, hdr_len);
693 trace_svcrdma_decode_short_err(rctxt, rq_arg->len);
697 trace_svcrdma_decode_badvers_err(rctxt, rdma_argp);
701 trace_svcrdma_decode_drop_err(rctxt, rdma_argp);
705 trace_svcrdma_decode_badproc_err(rctxt, rdma_argp);
709 trace_svcrdma_decode_parse_err(rctxt, rdma_argp);
714 struct svc_rdma_recv_ctxt *rctxt,
722 svc_rdma_send_error_msg(rdma, sctxt, rctxt, status);
731 struct svc_rdma_recv_ctxt *rctxt)
733 __be32 *p = rctxt->rc_recv_buf;
738 if (rctxt->rc_msgtype != rdma_msg)
741 if (!pcl_is_empty(&rctxt->rc_call_pcl))
743 if (!pcl_is_empty(&rctxt->rc_read_pcl))
745 if (!pcl_is_empty(&rctxt->rc_write_pcl))
747 if (!pcl_is_empty(&rctxt->rc_reply_pcl))