diff options
| -rw-r--r-- | drivers/net/bonding/bond_main.c | 4 | ||||
| -rw-r--r-- | drivers/net/bonding/bond_options.c | 13 | ||||
| -rw-r--r-- | drivers/net/bonding/bond_sysfs.c | 4 | ||||
| -rw-r--r-- | drivers/net/bonding/bonding.h | 7 |
4 files changed, 19 insertions, 9 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 4dd5ee2a34cc..36eab0c4fb33 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
| @@ -4110,7 +4110,7 @@ static int bond_check_params(struct bond_params *params) | |||
| 4110 | if (!miimon) { | 4110 | if (!miimon) { |
| 4111 | pr_warning("Warning: miimon must be specified, otherwise bonding will not detect link failure, speed and duplex which are essential for 802.3ad operation\n"); | 4111 | pr_warning("Warning: miimon must be specified, otherwise bonding will not detect link failure, speed and duplex which are essential for 802.3ad operation\n"); |
| 4112 | pr_warning("Forcing miimon to 100msec\n"); | 4112 | pr_warning("Forcing miimon to 100msec\n"); |
| 4113 | miimon = 100; | 4113 | miimon = BOND_DEFAULT_MIIMON; |
| 4114 | } | 4114 | } |
| 4115 | } | 4115 | } |
| 4116 | 4116 | ||
| @@ -4147,7 +4147,7 @@ static int bond_check_params(struct bond_params *params) | |||
| 4147 | if (!miimon) { | 4147 | if (!miimon) { |
| 4148 | pr_warning("Warning: miimon must be specified, otherwise bonding will not detect link failure and link speed which are essential for TLB/ALB load balancing\n"); | 4148 | pr_warning("Warning: miimon must be specified, otherwise bonding will not detect link failure and link speed which are essential for TLB/ALB load balancing\n"); |
| 4149 | pr_warning("Forcing miimon to 100msec\n"); | 4149 | pr_warning("Forcing miimon to 100msec\n"); |
| 4150 | miimon = 100; | 4150 | miimon = BOND_DEFAULT_MIIMON; |
| 4151 | } | 4151 | } |
| 4152 | } | 4152 | } |
| 4153 | 4153 | ||
diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c index 9a5223c7b4d1..ea6f640782b7 100644 --- a/drivers/net/bonding/bond_options.c +++ b/drivers/net/bonding/bond_options.c | |||
| @@ -45,10 +45,15 @@ int bond_option_mode_set(struct bonding *bond, int mode) | |||
| 45 | return -EPERM; | 45 | return -EPERM; |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | if (BOND_MODE_IS_LB(mode) && bond->params.arp_interval) { | 48 | if (BOND_NO_USES_ARP(mode) && bond->params.arp_interval) { |
| 49 | pr_err("%s: %s mode is incompatible with arp monitoring.\n", | 49 | pr_info("%s: %s mode is incompatible with arp monitoring, start mii monitoring\n", |
| 50 | bond->dev->name, bond_mode_tbl[mode].modename); | 50 | bond->dev->name, bond_mode_tbl[mode].modename); |
| 51 | return -EINVAL; | 51 | /* disable arp monitoring */ |
| 52 | bond->params.arp_interval = 0; | ||
| 53 | /* set miimon to default value */ | ||
| 54 | bond->params.miimon = BOND_DEFAULT_MIIMON; | ||
| 55 | pr_info("%s: Setting MII monitoring interval to %d.\n", | ||
| 56 | bond->dev->name, bond->params.miimon); | ||
| 52 | } | 57 | } |
| 53 | 58 | ||
| 54 | /* don't cache arp_validate between modes */ | 59 | /* don't cache arp_validate between modes */ |
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c index 0ec2a7e8c8a9..abf5e106edc5 100644 --- a/drivers/net/bonding/bond_sysfs.c +++ b/drivers/net/bonding/bond_sysfs.c | |||
| @@ -523,9 +523,7 @@ static ssize_t bonding_store_arp_interval(struct device *d, | |||
| 523 | ret = -EINVAL; | 523 | ret = -EINVAL; |
| 524 | goto out; | 524 | goto out; |
| 525 | } | 525 | } |
| 526 | if (bond->params.mode == BOND_MODE_ALB || | 526 | if (BOND_NO_USES_ARP(bond->params.mode)) { |
| 527 | bond->params.mode == BOND_MODE_TLB || | ||
| 528 | bond->params.mode == BOND_MODE_8023AD) { | ||
| 529 | pr_info("%s: ARP monitoring cannot be used with ALB/TLB/802.3ad. Only MII monitoring is supported on %s.\n", | 527 | pr_info("%s: ARP monitoring cannot be used with ALB/TLB/802.3ad. Only MII monitoring is supported on %s.\n", |
| 530 | bond->dev->name, bond->dev->name); | 528 | bond->dev->name, bond->dev->name); |
| 531 | ret = -EINVAL; | 529 | ret = -EINVAL; |
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h index ca31286aa028..a9f4f9f4d8ce 100644 --- a/drivers/net/bonding/bonding.h +++ b/drivers/net/bonding/bonding.h | |||
| @@ -35,6 +35,8 @@ | |||
| 35 | 35 | ||
| 36 | #define BOND_MAX_ARP_TARGETS 16 | 36 | #define BOND_MAX_ARP_TARGETS 16 |
| 37 | 37 | ||
| 38 | #define BOND_DEFAULT_MIIMON 100 | ||
| 39 | |||
| 38 | #define IS_UP(dev) \ | 40 | #define IS_UP(dev) \ |
| 39 | ((((dev)->flags & IFF_UP) == IFF_UP) && \ | 41 | ((((dev)->flags & IFF_UP) == IFF_UP) && \ |
| 40 | netif_running(dev) && \ | 42 | netif_running(dev) && \ |
| @@ -55,6 +57,11 @@ | |||
| 55 | ((mode) == BOND_MODE_TLB) || \ | 57 | ((mode) == BOND_MODE_TLB) || \ |
| 56 | ((mode) == BOND_MODE_ALB)) | 58 | ((mode) == BOND_MODE_ALB)) |
| 57 | 59 | ||
| 60 | #define BOND_NO_USES_ARP(mode) \ | ||
| 61 | (((mode) == BOND_MODE_8023AD) || \ | ||
| 62 | ((mode) == BOND_MODE_TLB) || \ | ||
| 63 | ((mode) == BOND_MODE_ALB)) | ||
| 64 | |||
| 58 | #define TX_QUEUE_OVERRIDE(mode) \ | 65 | #define TX_QUEUE_OVERRIDE(mode) \ |
| 59 | (((mode) == BOND_MODE_ACTIVEBACKUP) || \ | 66 | (((mode) == BOND_MODE_ACTIVEBACKUP) || \ |
| 60 | ((mode) == BOND_MODE_ROUNDROBIN)) | 67 | ((mode) == BOND_MODE_ROUNDROBIN)) |
