Re: Bad behavior by rdma-core ?

Jason Gunthorpe
2021-10-14T18:32:39Z

On Thu, Oct 14, 2021 at 11:14:57AM -0500, Bob Pearson wrote:

> But ib_uverbs_destroy_ah does *not* call rdma_uverbs_destroy_ah() it just
> deletes the object.

ib_uverbs_destroy_ah
uobj_perform_destroy
__uobj_perform_destroy
__uobj_get_destroy
uobj_destroy
uverbs_destroy_uobject:

} else if (uobj->object) {
ret = uobj->uapi_object->type_class->destroy_hw(uobj, reason,
attrs);

Which calls

destroy_hw_idr_uobject
int ret = idr_type->destroy_object(uobj, why, attrs);

Which links to this:

DECLARE_UVERBS_NAMED_OBJECT(UVERBS_OBJECT_AH,
UVERBS_TYPE_ALLOC_IDR(uverbs_free_ah),
&UVERBS_METHOD(UVERBS_METHOD_AH_DESTROY));

And thus calls

static int uverbs_free_ah(struct ib_uobject *uobject,
enum rdma_remove_reason why,
struct uverbs_attr_bundle *attrs)
{
return rdma_destroy_ah_user((struct ib_ah *)uobject->object,
RDMA_DESTROY_AH_SLEEPABLE,
&attrs->driver_udata);
}

So, look along that path and find out where it goes wrong?

Jason