On Mon, Apr 29, 2019 at 11:34:42AM +0300, Leon Romanovsky wrote:

> +/**
> + * rdma_counter_unbind_qp - Unbind a qp from a counter
> + * @force:
> + *   true - Decrease the counter ref-count anyway (e.g., qp destroy)
> + */
> +int rdma_counter_unbind_qp(struct ib_qp *qp, bool force)
> +{
> +     struct rdma_counter *counter = qp->counter;
> +     int ret;
> +
> +     if (!counter)
> +             return -EINVAL;
> +
> +     ret = __rdma_counter_unbind_qp(qp, force);
> +     if (ret && !force)
> +             return ret;
> +
> +     rdma_restrack_put(&counter->res);
> +     if (atomic_dec_and_test(&counter->usecnt))
> +             rdma_counter_dealloc(counter);

An atomic that does kfree when it reaches zero should be implemented
with a kref.

Jason

Reply via email to