@@ -2619,44 +2619,41 @@ static void local_inv_done(struct ib_cq *cq, struct ib_wc *wc)
26192619 * and we have to locally invalidate the buffer to prevent data is being
26202620 * modified by remote peer after upper layer consumes it
26212621 */
2622- void smbd_deregister_mr (struct smbdirect_mr_io * smbdirect_mr )
2622+ void smbd_deregister_mr (struct smbdirect_mr_io * mr )
26232623{
2624- struct ib_send_wr * wr ;
2625- struct smbdirect_socket * sc = smbdirect_mr -> socket ;
2626- int rc = 0 ;
2624+ struct smbdirect_socket * sc = mr -> socket ;
2625+
2626+ if (mr -> need_invalidate ) {
2627+ struct ib_send_wr * wr = & mr -> inv_wr ;
2628+ int rc ;
26272629
2628- if (smbdirect_mr -> need_invalidate ) {
26292630 /* Need to finish local invalidation before returning */
2630- wr = & smbdirect_mr -> inv_wr ;
26312631 wr -> opcode = IB_WR_LOCAL_INV ;
2632- smbdirect_mr -> cqe .done = local_inv_done ;
2633- wr -> wr_cqe = & smbdirect_mr -> cqe ;
2632+ mr -> cqe .done = local_inv_done ;
2633+ wr -> wr_cqe = & mr -> cqe ;
26342634 wr -> num_sge = 0 ;
2635- wr -> ex .invalidate_rkey = smbdirect_mr -> mr -> rkey ;
2635+ wr -> ex .invalidate_rkey = mr -> mr -> rkey ;
26362636 wr -> send_flags = IB_SEND_SIGNALED ;
26372637
2638- init_completion (& smbdirect_mr -> invalidate_done );
2638+ init_completion (& mr -> invalidate_done );
26392639 rc = ib_post_send (sc -> ib .qp , wr , NULL );
26402640 if (rc ) {
26412641 log_rdma_mr (ERR , "ib_post_send failed rc=%x\n" , rc );
26422642 smbd_disconnect_rdma_connection (sc );
26432643 goto done ;
26442644 }
2645- wait_for_completion (& smbdirect_mr -> invalidate_done );
2646- smbdirect_mr -> need_invalidate = false;
2645+ wait_for_completion (& mr -> invalidate_done );
2646+ mr -> need_invalidate = false;
26472647 } else
26482648 /*
26492649 * For remote invalidation, just set it to SMBDIRECT_MR_INVALIDATED
26502650 * and defer to mr_recovery_work to recover the MR for next use
26512651 */
2652- smbdirect_mr -> state = SMBDIRECT_MR_INVALIDATED ;
2652+ mr -> state = SMBDIRECT_MR_INVALIDATED ;
26532653
2654- if (smbdirect_mr -> state == SMBDIRECT_MR_INVALIDATED ) {
2655- ib_dma_unmap_sg (
2656- sc -> ib .dev , smbdirect_mr -> sgt .sgl ,
2657- smbdirect_mr -> sgt .nents ,
2658- smbdirect_mr -> dir );
2659- smbdirect_mr -> state = SMBDIRECT_MR_READY ;
2654+ if (mr -> state == SMBDIRECT_MR_INVALIDATED ) {
2655+ ib_dma_unmap_sg (sc -> ib .dev , mr -> sgt .sgl , mr -> sgt .nents , mr -> dir );
2656+ mr -> state = SMBDIRECT_MR_READY ;
26602657 if (atomic_inc_return (& sc -> mr_io .ready .count ) == 1 )
26612658 wake_up (& sc -> mr_io .ready .wait_queue );
26622659 } else
0 commit comments