diff --git a/drivers/infiniband/core/uverbs_uapi.c b/drivers/infiniband/core/uverbs_uapi.c index b67db3790f03..aa0c980ad1e8 100644 --- a/drivers/infiniband/core/uverbs_uapi.c +++ b/drivers/infiniband/core/uverbs_uapi.c @@ -17,6 +17,7 @@ static void *uapi_add_elm(struct uverbs_api *uapi, u32 key, size_t alloc_size) { void *elm; int rc; + static void *dummy; if (key == UVERBS_API_KEY_ERR) return ERR_PTR(-EOVERFLOW); @@ -27,6 +28,9 @@ static void *uapi_add_elm(struct uverbs_api *uapi, u32 key, size_t alloc_size) rc = radix_tree_insert(&uapi->radix, key, elm); if (rc) { kfree(elm); + if (rc == -ENOMEM && + !radix_tree_insert(&uapi->radix, key, &dummy)) + radix_tree_delete(&uapi->radix, key); return ERR_PTR(rc); }