[PATCH] staging: lustre: ko2iblbd: handle ib_dereg_mr removal

From: James Simmons
Date: Sun Oct 02 2016 - 22:23:35 EST


In the rdma-next tree to be merged for 4.9-rc1 removes
the IB core function ib_get_dma_mr. This patch migrates
us way from this former function.

Signed-off-by: James Simmons <jsimmons@xxxxxxxxxxxxx>
---
.../staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c | 19 ++++++++++++-------
.../staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h | 5 +++++
2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c
index c7a5d49..4010591 100644
--- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c
+++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c
@@ -1316,7 +1316,7 @@ static void kiblnd_destroy_fmr_pool(struct kib_fmr_pool *fpo)
list_for_each_entry_safe(frd, tmp, &fpo->fast_reg.fpo_pool_list,
frd_list) {
list_del(&frd->frd_list);
- ib_dereg_mr(frd->frd_mr);
+ kib_dereg_mr(fpo->fpo_hdev, frd->frd_mr);
LIBCFS_FREE(frd, sizeof(*frd));
i++;
}
@@ -1422,14 +1422,14 @@ static int kiblnd_alloc_freg_pool(struct kib_fmr_poolset *fps, struct kib_fmr_po

out_middle:
if (frd->frd_mr)
- ib_dereg_mr(frd->frd_mr);
+ kib_dereg_mr(fpo->fpo_hdev, frd->frd_mr);
LIBCFS_FREE(frd, sizeof(*frd));

out:
list_for_each_entry_safe(frd, tmp, &fpo->fast_reg.fpo_pool_list,
frd_list) {
list_del(&frd->frd_list);
- ib_dereg_mr(frd->frd_mr);
+ kib_dereg_mr(fpo->fpo_hdev, frd->frd_mr);
LIBCFS_FREE(frd, sizeof(*frd));
}

@@ -2288,8 +2288,8 @@ static void kiblnd_hdev_cleanup_mrs(struct kib_hca_dev *hdev)
if (!hdev->ibh_mrs)
return;

- ib_dereg_mr(hdev->ibh_mrs);
-
+ kib_dereg_mr(hdev, hdev->ibh_mrs);
+ hdev->ibh_pd->device->dereg_mr(hdev->ibh_mrs);
hdev->ibh_mrs = NULL;
}

@@ -2316,13 +2316,18 @@ static int kiblnd_hdev_setup_mrs(struct kib_hca_dev *hdev)
if (rc)
return rc;

- mr = ib_get_dma_mr(hdev->ibh_pd, acflags);
+ mr = hdev->ibh_pd->device->get_dma_mr(hdev->ibh_pd, acflags);
if (IS_ERR(mr)) {
- CERROR("Failed ib_get_dma_mr : %ld\n", PTR_ERR(mr));
+ CERROR("Failed device get_dma_mr : %ld\n", PTR_ERR(mr));
kiblnd_hdev_cleanup_mrs(hdev);
return PTR_ERR(mr);
}

+ mr->device = hdev->ibh_pd->device;
+ mr->pd = hdev->ibh_pd;
+ mr->uobject = NULL;
+ mr->need_inval = false;
+
hdev->ibh_mrs = mr;

return 0;
diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h
index 1457697..f8b49c5 100644
--- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h
+++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h
@@ -178,6 +178,11 @@ struct kib_hca_dev {
atomic_t ibh_ref; /* refcount */
};

+static inline void kib_dereg_mr(struct kib_hca_dev *hdev, struct ib_mr *mr)
+{
+ hdev->ibh_pd->device->dereg_mr(mr);
+}
+
/** # of seconds to keep pool alive */
#define IBLND_POOL_DEADLINE 300
/** # of seconds to retry if allocation failed */
--
1.7.1