Skip to contentSkip to conversation

RDMA/core: Fix ENODEV error for iWARP test over vlan

PATCH Applied Anumula Murali Mohan Reddy 2 participants 4 messages Oct 8, 2024 – Nov 12, 2024 InfiniBand

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/1 RDMA/core: Fix ENODEV error for iWARP test over vlan

If traffic is over vlan, cma_validate_port() fails to match vlan net_device ifindex with bound_if_index and results in ENODEV error. It is because rdma_copy_src_l2_addr() always assigns bound_if_index with real net_device ifindex.
This patch fixes the issue by assigning bound_if_index with vlan net_device index if traffic is over vlan.

Fixes f8ef1be816bf ("RDMA/cma: Avoid GID lookups on iWARP devices")

---
Changes since v2:
Addressed previous review comments

---
 drivers/infiniband/core/addr.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/infiniband/core/addr.c +2 -0
index be0743dac3ff..c4cf26f1d149 100644
@@ -269,6 +269,8 @@ rdma_find_ndev_for_src_ip_rcu(struct net *net, const struct sockaddr *src_in)
 		break;
 #endif
 	}
+	if (!ret && dev && is_vlan_dev(dev))
+		dev = vlan_dev_real_dev(dev);
 	return ret ? ERR_PTR(ret) : dev;
 }
 
Signature · 1 line
2.39.3
#1 lore raw
Quoted 8 lines · Anumula Murali Mohan Reddy

If traffic is over vlan, cma_validate_port() fails to match vlan net_device ifindex with bound_if_index and results in ENODEV error. It is because rdma_copy_src_l2_addr() always assigns bound_if_index with real net_device ifindex.
This patch fixes the issue by assigning bound_if_index with vlan net_device index if traffic is over vlan.

[...]

Applied, thanks!

[1/1] RDMA/core: Fix ENODEV error for iWARP test over vlan

      https://git.kernel.org/rdma/rdma/c/5069d7e202f640

Best regards,

Signature · 1 line
Leon Romanovsky <[email protected]>
#2 lore raw
In reply to Anumula Murali Mohan Reddy
Quoted 10 lines · Anumula Murali Mohan Reddy

If traffic is over vlan, cma_validate_port() fails to match vlan net_device ifindex with bound_if_index and results in ENODEV error. It is because rdma_copy_src_l2_addr() always assigns bound_if_index with real net_device ifindex.
This patch fixes the issue by assigning bound_if_index with vlan net_device index if traffic is over vlan.

Fixes f8ef1be816bf ("RDMA/cma: Avoid GID lookups on iWARP devices")
Quoted 6 lines

---
Changes since v2:
Addressed previous review comments

---
 drivers/infiniband/core/addr.c | 2 ++
 1 file changed, 2 insertions(+)

This patch causes to udaddy regression. It doesn't work over VLANs anymore.

# Client:
ifconfig eth2 1.1.1.1
ip link add link eth2 name p0.3597 type vlan protocol 802.1Q id 3597 ip link set dev p0.3597 up
ip addr add 2.2.2.2/16 dev p0.3597
udaddy -S 847 -C 220 -c 2 -t 0 -s 2.2.2.3 -b 2.2.2.2

# Server:
ifconfig eth2 1.1.1.3
ip link add link eth2 name p0.3597 type vlan protocol 802.1Q id 3597 ip link set dev p0.3597 up
ip addr add 2.2.2.3/16 dev p0.3597
udaddy -S 847 -C 220 -c 2 -t 0 -b 2.2.2.3

Thanks

Quoted 17 lines
drivers/infiniband/core/addr.c +2 -0
index be0743dac3ff..c4cf26f1d149 100644
@@ -269,6 +269,8 @@ rdma_find_ndev_for_src_ip_rcu(struct net *net, const struct sockaddr *src_in)
 		break;
 #endif
 	}
+	if (!ret && dev && is_vlan_dev(dev))
+		dev = vlan_dev_real_dev(dev);
 	return ret ? ERR_PTR(ret) : dev;
 }
 
Signature · 1 line
2.39.3
#3 lore raw
Quoted 51 lines · Leon Romanovsky
Quoted 10 lines · Anumula Murali Mohan Reddy

If traffic is over vlan, cma_validate_port() fails to match vlan net_device ifindex with bound_if_index and results in ENODEV error. It is because rdma_copy_src_l2_addr() always assigns bound_if_index with real net_device ifindex.
This patch fixes the issue by assigning bound_if_index with vlan net_device index if traffic is over vlan.

Fixes f8ef1be816bf ("RDMA/cma: Avoid GID lookups on iWARP devices")
Quoted 6 lines

---
Changes since v2:
Addressed previous review comments

---
 drivers/infiniband/core/addr.c | 2 ++
 1 file changed, 2 insertions(+)

This patch causes to udaddy regression. It doesn't work over VLANs anymore.

# Client:
ifconfig eth2 1.1.1.1
ip link add link eth2 name p0.3597 type vlan protocol 802.1Q id 3597 ip link set dev p0.3597 up
ip addr add 2.2.2.2/16 dev p0.3597
udaddy -S 847 -C 220 -c 2 -t 0 -s 2.2.2.3 -b 2.2.2.2

# Server:
ifconfig eth2 1.1.1.3
ip link add link eth2 name p0.3597 type vlan protocol 802.1Q id 3597 ip link set dev p0.3597 up
ip addr add 2.2.2.3/16 dev p0.3597
udaddy -S 847 -C 220 -c 2 -t 0 -b 2.2.2.3

Thanks

Quoted 14 lines
drivers/infiniband/core/addr.c +2 -0
index be0743dac3ff..c4cf26f1d149 100644
@@ -269,6 +269,8 @@ rdma_find_ndev_for_src_ip_rcu(struct net *net, const struct sockaddr *src_in)
 		break;
 #endif
 	}
+	if (!ret && dev && is_vlan_dev(dev))
+		dev = vlan_dev_real_dev(dev);
 	return ret ? ERR_PTR(ret) : dev;
 }
 
Quoted 3 lines
Quoted 3 lines
Signature · 1 line
2.39.3

i am able to reproduce the issue with udaddy, i am working on a new patch. for now you can proceed with reverting this change