| From: Feras Daoud <ferasda@mellanox.com> |
| Date: Wed, 28 Dec 2016 14:47:21 +0200 |
| Subject: IB/ipoib: Set device connection mode only when needed |
| |
| commit 80b5b35aba62232521b31440f0a3cf6caa033849 upstream. |
| |
| When changing the connection mode, the ipoib_set_mode function |
| did not check if the previous connection mode equals to the |
| new one. This commit adds the required check and return 0 if the new |
| mode equals to the previous one. |
| |
| Fixes: 839fcaba355a ("IPoIB: Connected mode experimental support") |
| Signed-off-by: Feras Daoud <ferasda@mellanox.com> |
| Signed-off-by: Erez Shitrit <erezsh@mellanox.com> |
| Reviewed-by: Alex Vesker <valex@mellanox.com> |
| Reviewed-by: Yuval Shaia <yuval.shaia@oracle.com> |
| Signed-off-by: Leon Romanovsky <leon@kernel.org> |
| Signed-off-by: Doug Ledford <dledford@redhat.com> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/infiniband/ulp/ipoib/ipoib_main.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c |
| +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c |
| @@ -226,6 +226,13 @@ int ipoib_set_mode(struct net_device *de |
| { |
| struct ipoib_dev_priv *priv = netdev_priv(dev); |
| |
| + if ((test_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags) && |
| + !strcmp(buf, "connected\n")) || |
| + (!test_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags) && |
| + !strcmp(buf, "datagram\n"))) { |
| + return 0; |
| + } |
| + |
| /* flush paths if we switch modes so that connections are restarted */ |
| if (IPOIB_CM_SUPPORTED(dev->dev_addr) && !strcmp(buf, "connected\n")) { |
| set_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags); |