|
@@ -474,6 +474,13 @@ int ipoib_set_mode(struct net_device *dev, const char *buf)
|
|
|
{
|
|
|
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);
|