diff --git a/drivers/ub/urma/ubcore/ubcm/ubmad_datapath.c b/drivers/ub/urma/ubcore/ubcm/ubmad_datapath.c index 08e8d99365643df82519b9bc27361af4baf7320c..b2329bb17dd92aac046c3cdc02f087fd250381dc 100644 --- a/drivers/ub/urma/ubcore/ubcm/ubmad_datapath.c +++ b/drivers/ub/urma/ubcore/ubcm/ubmad_datapath.c @@ -312,8 +312,10 @@ static int ubmad_try_repost_all_response( struct ubmad_tgt_hash_node *hash_node = ubmad_find_and_create_tgt_hash_node( tjetty, msn, &hash_flag); - if (IS_ERR_OR_NULL(hash_node)) - return -1; + if (IS_ERR_OR_NULL(hash_node)) { + ubmad_put_tjetty(tjetty); + return -1; + } if (hash_flag == 1) { ubmad_put_tjetty(tjetty); @@ -340,7 +342,8 @@ static int ubmad_try_repost_all_response( sge_idx = ubmad_bitmap_get_id(rsrc->send_seg_bitmap); if (sge_idx >= rsrc->send_seg_bitmap->size) { ubcore_log_err("get sge_idx failed\n"); - return -1; + ubmad_put_tjetty(tjetty); + return -1; } sge_addr = rsrc->send_seg->seg.ubva.va + UBMAD_SGE_MAX_LEN * sge_idx; @@ -376,8 +379,9 @@ static int ubmad_try_repost_all_response( return 0; repost_resp_put_id: - (void)ubmad_bitmap_put_id(rsrc->send_seg_bitmap, sge_idx); - return -1; + ubmad_put_tjetty(tjetty); + (void)ubmad_bitmap_put_id(rsrc->send_seg_bitmap, sge_idx); + return -1; } /* retransmission work */