From: Leon Romanovsky <leonro@xxxxxxxxxxxx> XArray uses internal lock for updates to XArray. This means that our external RW lock is needed to ensure that entry is not deleted while we are performing iteration over list. Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> --- drivers/infiniband/core/restrack.c | 2 -- include/rdma/restrack.h | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/infiniband/core/restrack.c b/drivers/infiniband/core/restrack.c index b10b9c3cbb06..c877ca31cd23 100644 --- a/drivers/infiniband/core/restrack.c +++ b/drivers/infiniband/core/restrack.c @@ -210,13 +210,11 @@ static void rdma_restrack_add(struct rdma_restrack_entry *res) kref_init(&res->kref); init_completion(&res->comp); - down_write(&dev->res.rwsem); ret = rt_xa_alloc_cyclic(&dev->res.xa[res->type], &res->id, res, &dev->res.next_id[res->type]); if (!ret) res->valid = true; - up_write(&dev->res.rwsem); } /** diff --git a/include/rdma/restrack.h b/include/rdma/restrack.h index b8fa99392837..01a3442e5a03 100644 --- a/include/rdma/restrack.h +++ b/include/rdma/restrack.h @@ -58,7 +58,8 @@ struct rdma_restrack_entry; */ struct rdma_restrack_root { /* - * @rwsem: Read/write lock to protect lists and IDR + * @rwsem: Read/write lock to protect erase of entry. + * Lists and insertions are protected by XArray internal lock. */ struct rw_semaphore rwsem; /** -- 2.19.1