struct ib_ucontext *context)
{
struct ib_uobject *uobj, *tmp;
+ int err;
if (!context)
return 0;
struct ib_mr *mr = uobj->object;
idr_remove_uobj(&ib_uverbs_mr_idr, uobj);
- ib_dereg_mr(mr);
+ err = ib_dereg_mr(mr);
+ if (err) {
+ pr_info("user_verbs: couldn't deregister an MR during cleanup.\n");
+ pr_info("user_verbs: the system may have become unstable.\n");
+ }
kfree(uobj);
}
static void mlx4_en_remove(struct mlx4_dev *dev, void *endev_ptr)
{
struct mlx4_en_dev *mdev = endev_ptr;
- int i;
+ int i, ret;
mutex_lock(&mdev->state_lock);
mdev->device_up = false;
flush_workqueue(mdev->workqueue);
destroy_workqueue(mdev->workqueue);
- (void) mlx4_mr_free(dev, &mdev->mr);
+ ret = mlx4_mr_free(dev, &mdev->mr);
+ if (ret)
+ mlx4_err(mdev, "Error deregistering MR. The system may have become unstable.");
iounmap(mdev->uar_map);
mlx4_uar_free(dev, &mdev->priv_uar);
mlx4_pd_free(dev, mdev->priv_pdn);
return mdev;
err_mr:
- (void) mlx4_mr_free(dev, &mdev->mr);
+ if (mlx4_mr_free(dev, &mdev->mr))
+ mlx4_err(mdev, "Error deregistering MR. The system may have become unstable.");
err_map:
if (mdev->uar_map)
iounmap(mdev->uar_map);
int max_maps, u8 page_shift, struct mlx4_fmr *fmr)
{
struct mlx4_priv *priv = mlx4_priv(dev);
- int err = -ENOMEM;
+ int err = -ENOMEM, ret;
if (max_maps > dev->caps.max_fmr_maps)
return -EINVAL;
return 0;
err_free:
- (void) mlx4_mr_free(dev, &fmr->mr);
+ ret = mlx4_mr_free(dev, &fmr->mr);
+ if (ret)
+ mlx4_err(dev, "Error deregistering MR. The system may have become unstable.");
return err;
}
EXPORT_SYMBOL_GPL(mlx4_fmr_alloc);