diff options
author | Feras Daoud <ferasda@mellanox.com> | 2016-12-28 15:47:21 +0300 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2017-06-05 23:13:41 +0300 |
commit | 31c8b9423b11de5da378c5e185d2f3f0b8c24bd8 (patch) | |
tree | d63cc8f7f22f686a4105e3398d5da2644202a2ec | |
parent | 18c7fb96d479ebc604f5a2e515e64f53f410d0e3 (diff) | |
download | linux-31c8b9423b11de5da378c5e185d2f3f0b8c24bd8.tar.xz |
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>
[bwh: Backported to 3.2:
- Adjust filename
- Unlock RTNL lock before returning]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
-rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_cm.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c index 0bbe030d26a8..2630797facab 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c @@ -1480,6 +1480,14 @@ static ssize_t set_mode(struct device *d, struct device_attribute *attr, if (!rtnl_trylock()) return restart_syscall(); + 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"))) { + rtnl_unlock(); + 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); |