| From 50e35955dc772e2bc03fc9118a53550a8a9346b4 Mon Sep 17 00:00:00 2001 |
| From: Kamal Heib <kamalheib1@gmail.com> |
| Date: Mon, 28 Oct 2019 17:59:28 +0200 |
| Subject: [PATCH] RDMA/core: Fix return code when modify_port isn't supported |
| |
| commit 55bfe905fa97633438c13fb029aed85371d85480 upstream. |
| |
| Improve return code from ib_modify_port() by doing the following: |
| - Use "-EOPNOTSUPP" instead "-ENOSYS" which is the proper return code |
| |
| - Allow only fake IB_PORT_CM_SUP manipulation for RoCE providers that |
| didn't implement the modify_port callback, otherwise return |
| "-EOPNOTSUPP" |
| |
| Fixes: 61e0962d5221 ("IB: Avoid ib_modify_port() failure for RoCE devices") |
| Link: https://lore.kernel.org/r/20191028155931.1114-2-kamalheib1@gmail.com |
| Signed-off-by: Kamal Heib <kamalheib1@gmail.com> |
| Reviewed-by: Jason Gunthorpe <jgg@mellanox.com> |
| Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c |
| index ee12ba03b17b..862cda8d4f46 100644 |
| --- a/drivers/infiniband/core/device.c |
| +++ b/drivers/infiniband/core/device.c |
| @@ -2241,8 +2241,12 @@ int ib_modify_port(struct ib_device *device, |
| rc = device->ops.modify_port(device, port_num, |
| port_modify_mask, |
| port_modify); |
| + else if (rdma_protocol_roce(device, port_num) && |
| + ((port_modify->set_port_cap_mask & ~IB_PORT_CM_SUP) == 0 || |
| + (port_modify->clr_port_cap_mask & ~IB_PORT_CM_SUP) == 0)) |
| + rc = 0; |
| else |
| - rc = rdma_protocol_roce(device, port_num) ? 0 : -ENOSYS; |
| + rc = -EOPNOTSUPP; |
| return rc; |
| } |
| EXPORT_SYMBOL(ib_modify_port); |
| -- |
| 2.7.4 |
| |