On Fri, Jul 21, 2023 at 03:50:21PM -0500, Bob Pearson wrote: > This patch gives a more detailed list of objects that are not > freed in case of error before the module exits. > > Signed-off-by: Bob Pearson <rpearsonhpe@xxxxxxxxx> > --- > drivers/infiniband/sw/rxe/rxe_pool.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/drivers/infiniband/sw/rxe/rxe_pool.c b/drivers/infiniband/sw/rxe/rxe_pool.c > index cb812bd969c6..3249c2741491 100644 > --- a/drivers/infiniband/sw/rxe/rxe_pool.c > +++ b/drivers/infiniband/sw/rxe/rxe_pool.c > @@ -113,7 +113,17 @@ void rxe_pool_init(struct rxe_dev *rxe, struct rxe_pool *pool, > > void rxe_pool_cleanup(struct rxe_pool *pool) > { > - WARN_ON(!xa_empty(&pool->xa)); > + unsigned long index; > + struct rxe_pool_elem *elem; > + > + xa_lock(&pool->xa); > + xa_for_each(&pool->xa, index, elem) { > + rxe_err_dev(pool->rxe, "%s#%d: Leaked", pool->name, > + elem->index); > + } > + xa_unlock(&pool->xa); > + > + xa_destroy(&pool->xa); > } Is this why? Just count the number of unfinalized objects and report if there is difference, don't mess up the xarray. Jason