Lines Matching refs:rctxt
414 * @rctxt: Ingress receive context
425 * %true: Read list is valid. @rctxt's xdr_stream is updated to point
429 * %false: Read list is corrupt. @rctxt's xdr_stream is left in an
432 static bool xdr_count_read_segments(struct svc_rdma_recv_ctxt *rctxt, __be32 *p)
434 rctxt->rc_call_pcl.cl_count = 0;
435 rctxt->rc_read_pcl.cl_count = 0;
440 p = xdr_inline_decode(&rctxt->rc_stream,
450 ++rctxt->rc_read_pcl.cl_count;
452 ++rctxt->rc_call_pcl.cl_count;
455 p = xdr_inline_decode(&rctxt->rc_stream, sizeof(*p));
469 * %true: Read list is valid. @rctxt's xdr_stream is updated
471 * %false: Read list is corrupt. @rctxt's xdr_stream is left
474 static bool xdr_check_read_list(struct svc_rdma_recv_ctxt *rctxt)
478 p = xdr_inline_decode(&rctxt->rc_stream, sizeof(*p));
481 if (!xdr_count_read_segments(rctxt, p))
483 if (!pcl_alloc_call(rctxt, p))
485 return pcl_alloc_read(rctxt, p);
488 static bool xdr_check_write_chunk(struct svc_rdma_recv_ctxt *rctxt)
493 if (xdr_stream_decode_u32(&rctxt->rc_stream, &segcount))
503 p = xdr_inline_decode(&rctxt->rc_stream,
510 * @rctxt: Received header and decoding state
517 * %true: Write list is valid. @rctxt's xdr_stream is updated
520 * %false: Write list is corrupt. @rctxt's xdr_stream is left
523 static bool xdr_count_write_chunks(struct svc_rdma_recv_ctxt *rctxt, __be32 *p)
525 rctxt->rc_write_pcl.cl_count = 0;
527 if (!xdr_check_write_chunk(rctxt))
529 ++rctxt->rc_write_pcl.cl_count;
530 p = xdr_inline_decode(&rctxt->rc_stream, sizeof(*p));
547 * %true: Write list is valid. @rctxt's xdr_stream is updated
549 * %false: Write list is corrupt. @rctxt's xdr_stream is left
552 static bool xdr_check_write_list(struct svc_rdma_recv_ctxt *rctxt)
556 p = xdr_inline_decode(&rctxt->rc_stream, sizeof(*p));
559 if (!xdr_count_write_chunks(rctxt, p))
561 if (!pcl_alloc_write(rctxt, &rctxt->rc_write_pcl, p))
564 rctxt->rc_cur_result_payload = pcl_first_chunk(&rctxt->rc_write_pcl);
575 * %true: Reply chunk is valid. @rctxt's xdr_stream is updated
577 * %false: Reply chunk is corrupt. @rctxt's xdr_stream is left
580 static bool xdr_check_reply_chunk(struct svc_rdma_recv_ctxt *rctxt)
584 p = xdr_inline_decode(&rctxt->rc_stream, sizeof(*p));
590 if (!xdr_check_write_chunk(rctxt))
593 rctxt->rc_reply_pcl.cl_count = 1;
594 return pcl_alloc_write(rctxt, &rctxt->rc_reply_pcl, p);
655 * @rctxt: state of decoding
669 struct svc_rdma_recv_ctxt *rctxt)
675 xdr_init_decode(&rctxt->rc_stream, rq_arg, rdma_argp, NULL);
677 p = xdr_inline_decode(&rctxt->rc_stream,
685 rctxt->rc_msgtype = *p;
686 switch (rctxt->rc_msgtype) {
699 if (!xdr_check_read_list(rctxt))
701 if (!xdr_check_write_list(rctxt))
703 if (!xdr_check_reply_chunk(rctxt))
706 rq_arg->head[0].iov_base = rctxt->rc_stream.p;
707 hdr_len = xdr_stream_pos(&rctxt->rc_stream);
710 trace_svcrdma_decode_rqst(rctxt, rdma_argp, hdr_len);
714 trace_svcrdma_decode_short_err(rctxt, rq_arg->len);
718 trace_svcrdma_decode_badvers_err(rctxt, rdma_argp);
722 trace_svcrdma_decode_drop_err(rctxt, rdma_argp);
726 trace_svcrdma_decode_badproc_err(rctxt, rdma_argp);
730 trace_svcrdma_decode_parse_err(rctxt, rdma_argp);
735 struct svc_rdma_recv_ctxt *rctxt,
743 svc_rdma_send_error_msg(rdma, sctxt, rctxt, status);
752 struct svc_rdma_recv_ctxt *rctxt)
754 __be32 *p = rctxt->rc_recv_buf;
759 if (rctxt->rc_msgtype != rdma_msg)
762 if (!pcl_is_empty(&rctxt->rc_call_pcl))
764 if (!pcl_is_empty(&rctxt->rc_read_pcl))
766 if (!pcl_is_empty(&rctxt->rc_write_pcl))
768 if (!pcl_is_empty(&rctxt->rc_reply_pcl))