| From foo@baz Sun Jun 17 12:07:34 CEST 2018 |
| From: David Howells <dhowells@redhat.com> |
| Date: Thu, 10 May 2018 14:22:38 +0100 |
| Subject: afs: Fix server rotation's handling of fileserver probe failure |
| |
| From: David Howells <dhowells@redhat.com> |
| |
| [ Upstream commit ec5a3b4b507efca903d848518dcf2ebf7b04b466 ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/afs/rotate.c | 12 ++++++++++-- |
| 1 file changed, 10 insertions(+), 2 deletions(-) |
| |
| --- 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) |