RDMA/core: Add resource tracking for create and destroy PDs
authorLeon Romanovsky <leonro@mellanox.com>
Sun, 28 Jan 2018 09:17:23 +0000 (11:17 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Tue, 30 Jan 2018 03:21:40 +0000 (20:21 -0700)
Track create and destroy operations of PD objects.

Reviewed-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Reviewed-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/core/verbs.c

index 3e95acd..256934d 100644 (file)
@@ -340,6 +340,8 @@ ssize_t ib_uverbs_alloc_pd(struct ib_uverbs_file *file,
        uobj->object = pd;
        memset(&resp, 0, sizeof resp);
        resp.pd_handle = uobj->id;
+       pd->res.type = RDMA_RESTRACK_PD;
+       rdma_restrack_add(&pd->res);
 
        if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp)) {
                ret = -EFAULT;
index 8cb5c85..16ebc63 100644 (file)
@@ -263,6 +263,10 @@ struct ib_pd *__ib_alloc_pd(struct ib_device *device, unsigned int flags,
                mr_access_flags |= IB_ACCESS_REMOTE_READ | IB_ACCESS_REMOTE_WRITE;
        }
 
+       pd->res.type = RDMA_RESTRACK_PD;
+       pd->res.kern_name = caller;
+       rdma_restrack_add(&pd->res);
+
        if (mr_access_flags) {
                struct ib_mr *mr;
 
@@ -312,6 +316,7 @@ void ib_dealloc_pd(struct ib_pd *pd)
           requires the caller to guarantee we can't race here. */
        WARN_ON(atomic_read(&pd->usecnt));
 
+       rdma_restrack_del(&pd->res);
        /* Making delalloc_pd a void return is a WIP, no driver should return
           an error here. */
        ret = pd->device->dealloc_pd(pd);