Lines Matching refs:info
210 struct svc_rdma_write_info *info;
212 info = kmalloc(sizeof(*info), GFP_KERNEL);
213 if (!info)
214 return info;
216 info->wi_seg_off = 0;
217 info->wi_seg_no = 0;
218 info->wi_nsegs = be32_to_cpup(++chunk);
219 info->wi_segs = ++chunk;
220 svc_rdma_cc_init(rdma, &info->wi_cc);
221 info->wi_cc.cc_cqe.done = svc_rdma_write_done;
222 return info;
225 static void svc_rdma_write_info_free(struct svc_rdma_write_info *info)
227 svc_rdma_cc_release(&info->wi_cc, DMA_TO_DEVICE);
228 kfree(info);
244 struct svc_rdma_write_info *info =
255 svc_rdma_write_info_free(info);
273 struct svc_rdma_read_info *info;
275 info = kmalloc(sizeof(*info), GFP_KERNEL);
276 if (!info)
277 return info;
279 svc_rdma_cc_init(rdma, &info->ri_cc);
280 info->ri_cc.cc_cqe.done = svc_rdma_wc_read_done;
281 return info;
284 static void svc_rdma_read_info_free(struct svc_rdma_read_info *info)
286 svc_rdma_cc_release(&info->ri_cc, DMA_FROM_DEVICE);
287 kfree(info);
302 struct svc_rdma_read_info *info =
312 svc_rdma_recv_ctxt_put(rdma, info->ri_readctxt);
315 list_add_tail(&info->ri_readctxt->rc_list,
324 svc_rdma_read_info_free(info);
389 static void svc_rdma_vec_to_sg(struct svc_rdma_write_info *info,
395 sg_set_buf(&sg[0], info->wi_base, len);
396 info->wi_base += len;
403 static void svc_rdma_pagelist_to_sg(struct svc_rdma_write_info *info,
408 struct xdr_buf *xdr = info->wi_xdr;
412 page_off = info->wi_next_off + xdr->page_base;
416 info->wi_next_off += remaining;
438 svc_rdma_build_writes(struct svc_rdma_write_info *info,
439 void (*constructor)(struct svc_rdma_write_info *info,
444 struct svc_rdma_chunk_ctxt *cc = &info->wi_cc;
450 seg = info->wi_segs + info->wi_seg_no * rpcrdma_segment_maxsz;
456 if (info->wi_seg_no >= info->wi_nsegs)
460 offset += info->wi_seg_off;
462 write_len = min(remaining, length - info->wi_seg_off);
468 constructor(info, write_len, ctxt);
478 if (write_len == length - info->wi_seg_off) {
480 info->wi_seg_no++;
481 info->wi_seg_off = 0;
483 info->wi_seg_off += write_len;
491 trace_svcrdma_small_wrch_err(rdma, remaining, info->wi_seg_no,
492 info->wi_nsegs);
501 static int svc_rdma_send_xdr_kvec(struct svc_rdma_write_info *info,
504 info->wi_base = vec->iov_base;
505 return svc_rdma_build_writes(info, svc_rdma_vec_to_sg,
513 static int svc_rdma_send_xdr_pagelist(struct svc_rdma_write_info *info,
518 info->wi_xdr = xdr;
519 info->wi_next_off = offset - xdr->head[0].iov_len;
520 return svc_rdma_build_writes(info, svc_rdma_pagelist_to_sg,
543 struct svc_rdma_write_info *info;
549 info = svc_rdma_write_info_alloc(rdma, wr_ch);
550 if (!info)
553 ret = svc_rdma_send_xdr_pagelist(info, xdr, offset, length);
557 ret = svc_rdma_post_chunk_ctxt(&info->wi_cc);
565 svc_rdma_write_info_free(info);
586 struct svc_rdma_write_info *info;
589 info = svc_rdma_write_info_alloc(rdma, rctxt->rc_reply_chunk);
590 if (!info)
593 ret = svc_rdma_send_xdr_kvec(info, &xdr->head[0]);
602 ret = svc_rdma_send_xdr_pagelist(info, xdr,
611 ret = svc_rdma_send_xdr_kvec(info, &xdr->tail[0]);
617 ret = svc_rdma_post_chunk_ctxt(&info->wi_cc);
625 svc_rdma_write_info_free(info);
629 static int svc_rdma_build_read_segment(struct svc_rdma_read_info *info,
633 struct svc_rdma_recv_ctxt *head = info->ri_readctxt;
634 struct svc_rdma_chunk_ctxt *cc = &info->ri_cc;
640 sge_no = PAGE_ALIGN(info->ri_pageoff + len) >> PAGE_SHIFT;
649 PAGE_SIZE - info->ri_pageoff);
651 head->rc_arg.pages[info->ri_pageno] =
652 rqstp->rq_pages[info->ri_pageno];
653 if (!info->ri_pageoff)
656 sg_set_page(sg, rqstp->rq_pages[info->ri_pageno],
657 seg_len, info->ri_pageoff);
660 info->ri_pageoff += seg_len;
661 if (info->ri_pageoff == PAGE_SIZE) {
662 info->ri_pageno++;
663 info->ri_pageoff = 0;
669 &rqstp->rq_pages[info->ri_pageno + 1] > rqstp->rq_page_end)
683 trace_svcrdma_page_overrun_err(cc->cc_rdma, rqstp, info->ri_pageno);
691 struct svc_rdma_read_info *info,
697 info->ri_chunklen = 0;
698 while (*p++ != xdr_zero && be32_to_cpup(p++) == info->ri_position) {
703 ret = svc_rdma_build_read_segment(info, rqstp, handle, length,
709 info->ri_chunklen += length;
723 struct svc_rdma_read_info *info,
726 struct svc_rdma_recv_ctxt *head = info->ri_readctxt;
729 ret = svc_rdma_build_read_chunk(rqstp, info, p);
733 trace_svcrdma_send_read_chunk(info->ri_chunklen, info->ri_position);
743 head->rc_arg.head[0].iov_base + info->ri_position;
745 head->rc_arg.head[0].iov_len - info->ri_position;
746 head->rc_arg.head[0].iov_len = info->ri_position;
757 info->ri_chunklen = XDR_QUADLEN(info->ri_chunklen) << 2;
759 head->rc_arg.page_len = info->ri_chunklen;
760 head->rc_arg.len += info->ri_chunklen;
761 head->rc_arg.buflen += info->ri_chunklen;
779 struct svc_rdma_read_info *info,
782 struct svc_rdma_recv_ctxt *head = info->ri_readctxt;
785 ret = svc_rdma_build_read_chunk(rqstp, info, p);
789 trace_svcrdma_send_pzr(info->ri_chunklen);
791 head->rc_arg.len += info->ri_chunklen;
792 head->rc_arg.buflen += info->ri_chunklen;
797 info->ri_chunklen);
799 head->rc_arg.page_len = info->ri_chunklen -
846 struct svc_rdma_read_info *info;
861 info = svc_rdma_read_info_alloc(rdma);
862 if (!info)
864 info->ri_readctxt = head;
865 info->ri_pageno = 0;
866 info->ri_pageoff = 0;
868 info->ri_position = be32_to_cpup(p + 1);
869 if (info->ri_position)
870 ret = svc_rdma_build_normal_read_chunk(rqstp, info, p);
872 ret = svc_rdma_build_pz_read_chunk(rqstp, info, p);
876 ret = svc_rdma_post_chunk_ctxt(&info->ri_cc);
883 svc_rdma_read_info_free(info);