@@ -1079,14 +1079,15 @@ static void smc_pnet_find_roce_by_pnetid(struct net_device *ndev,
struct smc_init_info *ini)
{
u8 ndev_pnetid[SMC_MAX_PNETID_LEN];
+ struct net_device *base_ndev;
struct net *net;
- ndev = pnet_find_base_ndev(ndev);
+ base_ndev = pnet_find_base_ndev(ndev);
net = dev_net(ndev);
- if (smc_pnetid_by_dev_port(ndev->dev.parent, ndev->dev_port,
+ if (smc_pnetid_by_dev_port(base_ndev->dev.parent, base_ndev->dev_port,
ndev_pnetid) &&
smc_pnet_find_ndev_pnetid_by_table(ndev, ndev_pnetid)) {
- smc_pnet_find_rdma_dev(ndev, ini);
+ smc_pnet_find_rdma_dev(base_ndev, ini);
return; /* pnetid could not be determined */
}
_smc_pnet_find_roce_by_pnetid(ndev_pnetid, ini, NULL, net);
The command 'smc_pnet -a -I <ethx> <pnetid>' will add <pnetid> to the pnetid table and will attach the <pnetid> to net device whose name is <ethx>. But When do SMCR by <ethx>, in function smc_pnet_find_roce_by_pnetid, it will use <ethx>'s base ndev's pnetid to match rdma device, not <ethx>'s pnetid. The asymmetric use of the pnetid seems weird. Sometimes it is difficult to know the hierarchy of net device what may make it difficult to configure the pnetid and to use the pnetid. Looking into the history of commit, it was the commit 890a2cb4a966 ("net/smc: rework pnet table") that changes the ndev from the <ethx> to the <ethx>'s base ndev when finding pnetid by pnetid table. It seems a mistake. This patch changes the ndev back to the <ethx> when finding pnetid by pnetid table. Fixes: 890a2cb4a966 ("net/smc: rework pnet table") Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com> --- net/smc/smc_pnet.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)