IB/cma: Fix RDMA port validation for iWarp
authorMatan Barak <matanb@mellanox.com>
Thu, 7 Jan 2016 09:19:29 +0000 (11:19 +0200)
committerDoug Ledford <dledford@redhat.com>
Tue, 19 Jan 2016 18:33:47 +0000 (13:33 -0500)
cma_validate_port wrongly assumed that Ethernet devices are RoCE
devices and thus their ndev should be matched in the GID table.
This broke the iWarp support. Fixing that matching the ndev only if
we work on a RoCE port.

Cc: <stable@vger.kernel.org> # 4.4.x-
Fixes: abae1b71dd37 ('IB/cma: cma_validate_port should verify the port
     and netdevice')
Reported-by: Hariprasad Shenai <hariprasad@chelsio.com>
Tested-by: Hariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: Matan Barak <matanb@mellanox.com>
Reviewed-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/cma.c

index 559ee3d27b4a683dcbc0510f83212d73fe2a11c4..a811594b0b59be6fab169dd221227e0432d12c3d 100644 (file)
@@ -551,7 +551,7 @@ static inline int cma_validate_port(struct ib_device *device, u8 port,
        if ((dev_type != ARPHRD_INFINIBAND) && rdma_protocol_ib(device, port))
                return ret;
 
-       if (dev_type == ARPHRD_ETHER) {
+       if (dev_type == ARPHRD_ETHER && rdma_protocol_roce(device, port)) {
                ndev = dev_get_by_index(&init_net, bound_if_index);
                if (ndev && ndev->flags & IFF_LOOPBACK) {
                        pr_info("detected loopback device\n");