diff options
author | David Howells <dhowells@redhat.com> | 2018-05-10 15:22:38 +0200 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2018-05-14 14:26:44 +0200 |
commit | ec5a3b4b507efca903d848518dcf2ebf7b04b466 (patch) | |
tree | 9fa419fed67bda42ac1caf3e2d2698f8c51f2854 /fs/afs | |
parent | afs: Fix refcounting in callback registration (diff) | |
download | linux-ec5a3b4b507efca903d848518dcf2ebf7b04b466.tar.xz linux-ec5a3b4b507efca903d848518dcf2ebf7b04b466.zip |
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: if (!test_bit(AFS_SERVER_FL_PROBED, &server->flags)) { fc->ac.alist = afs_get_addrlist(alist); - if (!afs_probe_fileserver(fc)) - goto failed; + if (!afs_probe_fileserver(fc)) { + switch (fc->ac.error) { + case -ENOMEM: + case -ERESTARTSYS: + case -EINTR: + goto failed; + default: + goto next_server; + } + } } if (!fc->ac.alist) |