diff options
Diffstat (limited to 'net/smc/smc_core.c')
-rw-r--r-- | net/smc/smc_core.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/net/smc/smc_core.c b/net/smc/smc_core.c index d99a75f75e42..15bad268f37d 100644 --- a/net/smc/smc_core.c +++ b/net/smc/smc_core.c @@ -451,7 +451,8 @@ out: static int smc_link_determine_gid(struct smc_link_group *lgr) { struct smc_link *lnk = &lgr->lnk[SMC_SINGLE_LINK]; - const struct ib_gid_attr *gattr; + struct ib_gid_attr gattr; + union ib_gid gid; int i; if (!lgr->vlan_id) { @@ -461,18 +462,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++) { - gattr = rdma_get_gid_attr(lnk->smcibdev->ibdev, lnk->ibport, i); - if (IS_ERR(gattr)) + if (ib_query_gid(lnk->smcibdev->ibdev, lnk->ibport, i, &gid, + &gattr)) continue; - 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); + 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); return 0; } + dev_put(gattr.ndev); } - rdma_put_gid_attr(gattr); } return -ENODEV; } |