diff options
author | David Howells <dhowells@redhat.com> | 2018-05-10 09:22:38 -0400 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2018-05-14 08:26:44 -0400 |
commit | ec5a3b4b507efca903d848518dcf2ebf7b04b466 (patch) | |
tree | 9fa419fed67bda42ac1caf3e2d2698f8c51f2854 /fs/afs | |
parent | d4a96bec7a7362834ef5c31d7b2cc9bf36eb0570 (diff) |
afs: Fix server rotation's handling of fileserver probe failure
The server rotation algorithm just gives up if it fails to probe a
fileserver. Fix this by rotating to the next fileserver instead.
Fixes: d2ddc776a458 ("afs: Overhaul volume and server record caching and fileserver rotation")
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'fs/afs')
-rw-r--r-- | fs/afs/rotate.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/afs/rotate.c b/fs/afs/rotate.c index 4a26d51b2968..84584dcced72 100644 --- a/fs/afs/rotate.c +++ b/fs/afs/rotate.c | |||
@@ -369,8 +369,16 @@ use_server: | |||
369 | if (!test_bit(AFS_SERVER_FL_PROBED, &server->flags)) { | 369 | if (!test_bit(AFS_SERVER_FL_PROBED, &server->flags)) { |
370 | fc->ac.alist = afs_get_addrlist(alist); | 370 | fc->ac.alist = afs_get_addrlist(alist); |
371 | 371 | ||
372 | if (!afs_probe_fileserver(fc)) | 372 | if (!afs_probe_fileserver(fc)) { |
373 | goto failed; | 373 | switch (fc->ac.error) { |
374 | case -ENOMEM: | ||
375 | case -ERESTARTSYS: | ||
376 | case -EINTR: | ||
377 | goto failed; | ||
378 | default: | ||
379 | goto next_server; | ||
380 | } | ||
381 | } | ||
374 | } | 382 | } |
375 | 383 | ||
376 | if (!fc->ac.alist) | 384 | if (!fc->ac.alist) |