From ddb457c6993babbcdd41fca638b870d2a2fc3941 Mon Sep 17 00:00:00 2001 From: Parav Pandit Date: Tue, 5 Jun 2018 08:40:19 +0300 Subject: [PATCH] net/smc: Replace ib_query_gid with rdma_get_gid_attr Push the copy of the gid_attr into the SMC code. This probably doesn't push it far enough, as it looks like the conn->lgr should potentially hold the reference for its lifetime. Signed-off-by: Parav Pandit Signed-off-by: Leon Romanovsky Signed-off-by: Jason Gunthorpe --- net/smc/smc_core.c | 20 ++++++++++---------- net/smc/smc_ib.c | 25 +++++++++++++++---------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/net/smc/smc_core.c b/net/smc/smc_core.c index add82b0266f3..d99a75f75e42 100644 --- a/net/smc/smc_core.c +++ b/net/smc/smc_core.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "smc.h" #include "smc_clc.h" @@ -450,8 +451,7 @@ out: static int smc_link_determine_gid(struct smc_link_group *lgr) { struct smc_link *lnk = &lgr->lnk[SMC_SINGLE_LINK]; - struct ib_gid_attr gattr; - union ib_gid gid; + const struct ib_gid_attr *gattr; int i; if (!lgr->vlan_id) { @@ -461,18 +461,18 @@ static int smc_link_determine_gid(struct smc_link_group *lgr) for (i = 0; i < lnk->smcibdev->pattr[lnk->ibport - 1].gid_tbl_len; i++) { - if (ib_query_gid(lnk->smcibdev->ibdev, lnk->ibport, i, &gid, - &gattr)) + gattr = rdma_get_gid_attr(lnk->smcibdev->ibdev, lnk->ibport, i); + if (IS_ERR(gattr)) continue; - if (gattr.ndev) { - if (is_vlan_dev(gattr.ndev) && - vlan_dev_vlan_id(gattr.ndev) == lgr->vlan_id) { - lnk->gid = gid; - dev_put(gattr.ndev); + if (gattr->ndev) { + if (is_vlan_dev(gattr->ndev) && + vlan_dev_vlan_id(gattr->ndev) == lgr->vlan_id) { + lnk->gid = gattr->gid; + rdma_put_gid_attr(gattr); return 0; } - dev_put(gattr.ndev); } + rdma_put_gid_attr(gattr); } return -ENODEV; } diff --git a/net/smc/smc_ib.c b/net/smc/smc_ib.c index 0eed7ab9f28b..74f29f814ec1 100644 --- a/net/smc/smc_ib.c +++ b/net/smc/smc_ib.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "smc_pnet.h" #include "smc_ib.h" @@ -372,17 +373,21 @@ void smc_ib_buf_unmap_sg(struct smc_ib_device *smcibdev, static int smc_ib_fill_gid_and_mac(struct smc_ib_device *smcibdev, u8 ibport) { - struct ib_gid_attr gattr; - int rc; + const struct ib_gid_attr *gattr; + int rc = 0; - rc = ib_query_gid(smcibdev->ibdev, ibport, 0, - &smcibdev->gid[ibport - 1], &gattr); - if (rc || !gattr.ndev) - return -ENODEV; - - memcpy(smcibdev->mac[ibport - 1], gattr.ndev->dev_addr, ETH_ALEN); - dev_put(gattr.ndev); - return 0; + gattr = rdma_get_gid_attr(smcibdev->ibdev, ibport, 0); + if (IS_ERR(gattr)) + return PTR_ERR(gattr); + if (!gattr->ndev) { + rc = -ENODEV; + goto done; + } + smcibdev->gid[ibport - 1] = gattr->gid; + memcpy(smcibdev->mac[ibport - 1], gattr->ndev->dev_addr, ETH_ALEN); +done: + rdma_put_gid_attr(gattr); + return rc; } /* Create an identifier unique for this instance of SMC-R.