@@ -544,7 +544,7 @@ rpcrdma_prepare_hdr_sge(struct rpcrdma_ia *ia, struct rpcrdma_req *req,
544
544
545
545
if (unlikely (!rpcrdma_regbuf_is_mapped (rb ))) {
546
546
if (!__rpcrdma_dma_map_regbuf (ia , rb ))
547
- return false ;
547
+ goto out_regbuf ;
548
548
sge -> addr = rdmab_addr (rb );
549
549
sge -> lkey = rdmab_lkey (rb );
550
550
}
@@ -554,6 +554,10 @@ rpcrdma_prepare_hdr_sge(struct rpcrdma_ia *ia, struct rpcrdma_req *req,
554
554
sge -> length , DMA_TO_DEVICE );
555
555
req -> rl_send_wr .num_sge ++ ;
556
556
return true;
557
+
558
+ out_regbuf :
559
+ pr_err ("rpcrdma: failed to DMA map a Send buffer\n" );
560
+ return false;
557
561
}
558
562
559
563
/* Prepare the Send SGEs. The head and tail iovec, and each entry
@@ -574,7 +578,7 @@ rpcrdma_prepare_msg_sges(struct rpcrdma_ia *ia, struct rpcrdma_req *req,
574
578
* DMA-mapped. Sync the content that has changed.
575
579
*/
576
580
if (!rpcrdma_dma_map_regbuf (ia , rb ))
577
- return false ;
581
+ goto out_regbuf ;
578
582
sge_no = 1 ;
579
583
sge [sge_no ].addr = rdmab_addr (rb );
580
584
sge [sge_no ].length = xdr -> head [0 ].iov_len ;
@@ -662,6 +666,10 @@ rpcrdma_prepare_msg_sges(struct rpcrdma_ia *ia, struct rpcrdma_req *req,
662
666
req -> rl_send_wr .num_sge += sge_no ;
663
667
return true;
664
668
669
+ out_regbuf :
670
+ pr_err ("rpcrdma: failed to DMA map a Send buffer\n" );
671
+ return false;
672
+
665
673
out_mapping_overflow :
666
674
rpcrdma_unmap_sges (ia , req );
667
675
pr_err ("rpcrdma: too many Send SGEs (%u)\n" , sge_no );
@@ -673,26 +681,32 @@ rpcrdma_prepare_msg_sges(struct rpcrdma_ia *ia, struct rpcrdma_req *req,
673
681
return false;
674
682
}
675
683
676
- bool
677
- rpcrdma_prepare_send_sges (struct rpcrdma_ia * ia , struct rpcrdma_req * req ,
678
- u32 hdrlen , struct xdr_buf * xdr ,
679
- enum rpcrdma_chunktype rtype )
684
+ /**
685
+ * rpcrdma_prepare_send_sges - Construct SGEs for a Send WR
686
+ * @r_xprt: controlling transport
687
+ * @req: context of RPC Call being marshalled
688
+ * @hdrlen: size of transport header, in bytes
689
+ * @xdr: xdr_buf containing RPC Call
690
+ * @rtype: chunk type being encoded
691
+ *
692
+ * Returns 0 on success; otherwise a negative errno is returned.
693
+ */
694
+ int
695
+ rpcrdma_prepare_send_sges (struct rpcrdma_xprt * r_xprt ,
696
+ struct rpcrdma_req * req , u32 hdrlen ,
697
+ struct xdr_buf * xdr , enum rpcrdma_chunktype rtype )
680
698
{
681
699
req -> rl_send_wr .num_sge = 0 ;
682
700
req -> rl_mapped_sges = 0 ;
683
701
684
- if (!rpcrdma_prepare_hdr_sge (ia , req , hdrlen ))
685
- goto out_map ;
702
+ if (!rpcrdma_prepare_hdr_sge (& r_xprt -> rx_ia , req , hdrlen ))
703
+ return - EIO ;
686
704
687
705
if (rtype != rpcrdma_areadch )
688
- if (!rpcrdma_prepare_msg_sges (ia , req , xdr , rtype ))
689
- goto out_map ;
690
-
691
- return true;
706
+ if (!rpcrdma_prepare_msg_sges (& r_xprt -> rx_ia , req , xdr , rtype ))
707
+ return - EIO ;
692
708
693
- out_map :
694
- pr_err ("rpcrdma: failed to DMA map a Send buffer\n" );
695
- return false;
709
+ return 0 ;
696
710
}
697
711
698
712
/**
@@ -843,12 +857,10 @@ rpcrdma_marshal_req(struct rpcrdma_xprt *r_xprt, struct rpc_rqst *rqst)
843
857
transfertypes [rtype ], transfertypes [wtype ],
844
858
xdr_stream_pos (xdr ));
845
859
846
- if (!rpcrdma_prepare_send_sges (& r_xprt -> rx_ia , req ,
847
- xdr_stream_pos (xdr ),
848
- & rqst -> rq_snd_buf , rtype )) {
849
- ret = - EIO ;
860
+ ret = rpcrdma_prepare_send_sges (r_xprt , req , xdr_stream_pos (xdr ),
861
+ & rqst -> rq_snd_buf , rtype );
862
+ if (ret )
850
863
goto out_err ;
851
- }
852
864
return 0 ;
853
865
854
866
out_err :
0 commit comments