diff --git a/src/vos/vos_dtx.c b/src/vos/vos_dtx.c index d50f2b87cc8..ef5204c3503 100644 --- a/src/vos/vos_dtx.c +++ b/src/vos/vos_dtx.c @@ -2409,6 +2409,8 @@ vos_dtx_post_handle(struct vos_container *cont, } for (i = 0; i < count; i++) { + struct vos_dtx_act_ent *dae = NULL; + if (daes[i] == NULL) continue; @@ -2425,9 +2427,18 @@ vos_dtx_post_handle(struct vos_container *cont, } d_iov_set(&kiov, &DAE_XID(daes[i]), sizeof(DAE_XID(daes[i]))); - rc = dbtree_delete(cont->vc_dtx_active_hdl, BTR_PROBE_EQ, - &kiov, NULL); + /* + * For abort case, set @args as NULL, then related vos object will be evicted from + * cache via dbtree_delete(). + */ + rc = dbtree_delete(cont->vc_dtx_active_hdl, BTR_PROBE_EQ, &kiov, + abort ? NULL : &dae); if (rc == 0 || rc == -DER_NONEXIST) { + if (dae != NULL) { + D_ASSERT(dae == daes[i]); + dtx_act_ent_cleanup(cont, dae, false, false); + } + dtx_evict_lid(cont, daes[i]); } else { /* The DTX entry has been committed or aborted, but we