diff options
Diffstat (limited to 'drivers/md/dm-mpath.c')
-rw-r--r-- | drivers/md/dm-mpath.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index c35160786cf4..2469ba68dc2b 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c | |||
@@ -329,14 +329,18 @@ static void __choose_pgpath(struct multipath *m, size_t nr_bytes) | |||
329 | /* | 329 | /* |
330 | * Loop through priority groups until we find a valid path. | 330 | * Loop through priority groups until we find a valid path. |
331 | * First time we skip PGs marked 'bypassed'. | 331 | * First time we skip PGs marked 'bypassed'. |
332 | * Second time we only try the ones we skipped. | 332 | * Second time we only try the ones we skipped, but set |
333 | * pg_init_delay_retry so we do not hammer controllers. | ||
333 | */ | 334 | */ |
334 | do { | 335 | do { |
335 | list_for_each_entry(pg, &m->priority_groups, list) { | 336 | list_for_each_entry(pg, &m->priority_groups, list) { |
336 | if (pg->bypassed == bypassed) | 337 | if (pg->bypassed == bypassed) |
337 | continue; | 338 | continue; |
338 | if (!__choose_path_in_pg(m, pg, nr_bytes)) | 339 | if (!__choose_path_in_pg(m, pg, nr_bytes)) { |
340 | if (!bypassed) | ||
341 | m->pg_init_delay_retry = 1; | ||
339 | return; | 342 | return; |
343 | } | ||
340 | } | 344 | } |
341 | } while (bypassed--); | 345 | } while (bypassed--); |
342 | 346 | ||