diff options
Diffstat (limited to 'net/ipv4/multipath_drr.c')
| -rw-r--r-- | net/ipv4/multipath_drr.c | 18 |
1 files changed, 1 insertions, 17 deletions
diff --git a/net/ipv4/multipath_drr.c b/net/ipv4/multipath_drr.c index 9349686131fc..cf2e6bcf7973 100644 --- a/net/ipv4/multipath_drr.c +++ b/net/ipv4/multipath_drr.c | |||
| @@ -57,7 +57,6 @@ struct multipath_device { | |||
| 57 | 57 | ||
| 58 | static struct multipath_device state[MULTIPATH_MAX_DEVICECANDIDATES]; | 58 | static struct multipath_device state[MULTIPATH_MAX_DEVICECANDIDATES]; |
| 59 | static DEFINE_SPINLOCK(state_lock); | 59 | static DEFINE_SPINLOCK(state_lock); |
| 60 | static struct rtable *last_selection = NULL; | ||
| 61 | 60 | ||
| 62 | static int inline __multipath_findslot(void) | 61 | static int inline __multipath_findslot(void) |
| 63 | { | 62 | { |
| @@ -111,11 +110,6 @@ struct notifier_block drr_dev_notifier = { | |||
| 111 | .notifier_call = drr_dev_event, | 110 | .notifier_call = drr_dev_event, |
| 112 | }; | 111 | }; |
| 113 | 112 | ||
| 114 | static void drr_remove(struct rtable *rt) | ||
| 115 | { | ||
| 116 | if (last_selection == rt) | ||
| 117 | last_selection = NULL; | ||
| 118 | } | ||
| 119 | 113 | ||
| 120 | static void drr_safe_inc(atomic_t *usecount) | 114 | static void drr_safe_inc(atomic_t *usecount) |
| 121 | { | 115 | { |
| @@ -144,14 +138,6 @@ static void drr_select_route(const struct flowi *flp, | |||
| 144 | int devidx = -1; | 138 | int devidx = -1; |
| 145 | int cur_min_devidx = -1; | 139 | int cur_min_devidx = -1; |
| 146 | 140 | ||
| 147 | /* if necessary and possible utilize the old alternative */ | ||
| 148 | if ((flp->flags & FLOWI_FLAG_MULTIPATHOLDROUTE) != 0 && | ||
| 149 | last_selection != NULL) { | ||
| 150 | result = last_selection; | ||
| 151 | *rp = result; | ||
| 152 | return; | ||
| 153 | } | ||
| 154 | |||
| 155 | /* 1. make sure all alt. nexthops have the same GC related data */ | 141 | /* 1. make sure all alt. nexthops have the same GC related data */ |
| 156 | /* 2. determine the new candidate to be returned */ | 142 | /* 2. determine the new candidate to be returned */ |
| 157 | result = NULL; | 143 | result = NULL; |
| @@ -229,12 +215,10 @@ static void drr_select_route(const struct flowi *flp, | |||
| 229 | } | 215 | } |
| 230 | 216 | ||
| 231 | *rp = result; | 217 | *rp = result; |
| 232 | last_selection = result; | ||
| 233 | } | 218 | } |
| 234 | 219 | ||
| 235 | static struct ip_mp_alg_ops drr_ops = { | 220 | static struct ip_mp_alg_ops drr_ops = { |
| 236 | .mp_alg_select_route = drr_select_route, | 221 | .mp_alg_select_route = drr_select_route, |
| 237 | .mp_alg_remove = drr_remove, | ||
| 238 | }; | 222 | }; |
| 239 | 223 | ||
| 240 | static int __init drr_init(void) | 224 | static int __init drr_init(void) |
| @@ -244,7 +228,7 @@ static int __init drr_init(void) | |||
| 244 | if (err) | 228 | if (err) |
| 245 | return err; | 229 | return err; |
| 246 | 230 | ||
| 247 | err = multipath_alg_register(&drr_ops, IP_MP_ALG_RR); | 231 | err = multipath_alg_register(&drr_ops, IP_MP_ALG_DRR); |
| 248 | if (err) | 232 | if (err) |
| 249 | goto fail; | 233 | goto fail; |
| 250 | 234 | ||
