mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 14:33:24 -04:00
net/smc: Look up the pnetid ib device within the net namespace
Scope smc_pnet_find_ib() to the caller's net namespace so pnetid setup cannot bind to a same-named RDMA device from another namespace once names become per-netns. Signed-off-by: Jiri Pirko <jiri@nvidia.com> Link: https://patch.msgid.link/20260716132316.1495242-7-jiri@resnulli.us Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
committed by
Leon Romanovsky
parent
601f3fd97d
commit
47b9ef3c00
@@ -304,13 +304,18 @@ static bool smc_pnetid_valid(const char *pnet_name, char *pnetid)
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Find an infiniband device by a given name. The device might not exist. */
|
||||
static struct smc_ib_device *smc_pnet_find_ib(char *ib_name)
|
||||
/*
|
||||
* Find an infiniband device by a given name, restricted to the devices
|
||||
* accessible from @net. The device might not exist.
|
||||
*/
|
||||
static struct smc_ib_device *smc_pnet_find_ib(struct net *net, char *ib_name)
|
||||
{
|
||||
struct smc_ib_device *ibdev;
|
||||
|
||||
mutex_lock(&smc_ib_devices.mutex);
|
||||
list_for_each_entry(ibdev, &smc_ib_devices.list, list) {
|
||||
if (!rdma_dev_access_netns(ibdev->ibdev, net))
|
||||
continue;
|
||||
if (!strncmp(ibdev->ibdev->name, ib_name,
|
||||
sizeof(ibdev->ibdev->name)) ||
|
||||
(ibdev->ibdev->dev.parent &&
|
||||
@@ -408,8 +413,8 @@ static int smc_pnet_add_eth(struct smc_pnettable *pnettable, struct net *net,
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int smc_pnet_add_ib(struct smc_pnettable *pnettable, char *ib_name,
|
||||
u8 ib_port, char *pnet_name)
|
||||
static int smc_pnet_add_ib(struct smc_pnettable *pnettable, struct net *net,
|
||||
char *ib_name, u8 ib_port, char *pnet_name)
|
||||
{
|
||||
struct smc_pnetentry *tmp_pe, *new_pe;
|
||||
struct smc_ib_device *ib_dev;
|
||||
@@ -419,7 +424,7 @@ static int smc_pnet_add_ib(struct smc_pnettable *pnettable, char *ib_name,
|
||||
bool new_ibdev;
|
||||
|
||||
/* try to apply the pnetid to active devices */
|
||||
ib_dev = smc_pnet_find_ib(ib_name);
|
||||
ib_dev = smc_pnet_find_ib(net, ib_name);
|
||||
if (ib_dev) {
|
||||
ibdev_applied = smc_pnet_apply_ib(ib_dev, ib_port, pnet_name);
|
||||
if (ibdev_applied)
|
||||
@@ -518,7 +523,7 @@ static int smc_pnet_enter(struct net *net, struct nlattr *tb[])
|
||||
if (ibport < 1 || ibport > SMC_MAX_PORTS)
|
||||
goto error;
|
||||
}
|
||||
rc = smc_pnet_add_ib(pnettable, string, ibport, pnet_name);
|
||||
rc = smc_pnet_add_ib(pnettable, net, string, ibport, pnet_name);
|
||||
if (!rc)
|
||||
new_ibdev = true;
|
||||
else if (rc != -EEXIST)
|
||||
@@ -1170,6 +1175,9 @@ int smc_pnetid_by_table_ib(struct smc_ib_device *smcibdev, u8 ib_port)
|
||||
struct smc_net *sn;
|
||||
int rc = -ENOENT;
|
||||
|
||||
if (!rdma_dev_access_netns(smcibdev->ibdev, &init_net))
|
||||
return -ENOENT;
|
||||
|
||||
/* get pnettable for init namespace */
|
||||
sn = net_generic(&init_net, smc_net_id);
|
||||
pnettable = &sn->pnettable;
|
||||
|
||||
Reference in New Issue
Block a user