@@ -292,6 +292,15 @@ static void smc_copy_sock_settings_to_smc(struct smc_sock *smc)
292
292
smc_copy_sock_settings (& smc -> sk , smc -> clcsock -> sk , SK_FLAGS_CLC_TO_SMC );
293
293
}
294
294
295
+ /* register a new rmb */
296
+ static int smc_reg_rmb (struct smc_link * link , struct smc_buf_desc * rmb_desc )
297
+ {
298
+ /* register memory region for new rmb */
299
+ if (smc_wr_reg_send (link , rmb_desc -> mr_rx [SMC_SINGLE_LINK ]))
300
+ return - EFAULT ;
301
+ return 0 ;
302
+ }
303
+
295
304
static int smc_clnt_conf_first_link (struct smc_sock * smc )
296
305
{
297
306
struct smc_link_group * lgr = smc -> conn .lgr ;
@@ -321,9 +330,7 @@ static int smc_clnt_conf_first_link(struct smc_sock *smc)
321
330
322
331
smc_wr_remember_qp_attr (link );
323
332
324
- rc = smc_wr_reg_send (link ,
325
- smc -> conn .rmb_desc -> mr_rx [SMC_SINGLE_LINK ]);
326
- if (rc )
333
+ if (smc_reg_rmb (link , smc -> conn .rmb_desc ))
327
334
return SMC_CLC_DECL_INTERR ;
328
335
329
336
/* send CONFIRM LINK response over RoCE fabric */
@@ -473,13 +480,8 @@ static int smc_connect_rdma(struct smc_sock *smc)
473
480
goto decline_rdma_unlock ;
474
481
}
475
482
} else {
476
- struct smc_buf_desc * buf_desc = smc -> conn .rmb_desc ;
477
-
478
- if (!buf_desc -> reused ) {
479
- /* register memory region for new rmb */
480
- rc = smc_wr_reg_send (link ,
481
- buf_desc -> mr_rx [SMC_SINGLE_LINK ]);
482
- if (rc ) {
483
+ if (!smc -> conn .rmb_desc -> reused ) {
484
+ if (smc_reg_rmb (link , smc -> conn .rmb_desc )) {
483
485
reason_code = SMC_CLC_DECL_INTERR ;
484
486
goto decline_rdma_unlock ;
485
487
}
@@ -719,9 +721,7 @@ static int smc_serv_conf_first_link(struct smc_sock *smc)
719
721
720
722
link = & lgr -> lnk [SMC_SINGLE_LINK ];
721
723
722
- rc = smc_wr_reg_send (link ,
723
- smc -> conn .rmb_desc -> mr_rx [SMC_SINGLE_LINK ]);
724
- if (rc )
724
+ if (smc_reg_rmb (link , smc -> conn .rmb_desc ))
725
725
return SMC_CLC_DECL_INTERR ;
726
726
727
727
/* send CONFIRM LINK request to client over the RoCE fabric */
@@ -854,13 +854,8 @@ static void smc_listen_work(struct work_struct *work)
854
854
smc_rx_init (new_smc );
855
855
856
856
if (local_contact != SMC_FIRST_CONTACT ) {
857
- struct smc_buf_desc * buf_desc = new_smc -> conn .rmb_desc ;
858
-
859
- if (!buf_desc -> reused ) {
860
- /* register memory region for new rmb */
861
- rc = smc_wr_reg_send (link ,
862
- buf_desc -> mr_rx [SMC_SINGLE_LINK ]);
863
- if (rc ) {
857
+ if (!new_smc -> conn .rmb_desc -> reused ) {
858
+ if (smc_reg_rmb (link , new_smc -> conn .rmb_desc )) {
864
859
reason_code = SMC_CLC_DECL_INTERR ;
865
860
goto decline_rdma_unlock ;
866
861
}
0 commit comments