| From foo@baz Sun Jun 17 12:07:34 CEST 2018 |
| From: David Howells <dhowells@redhat.com> |
| Date: Fri, 11 May 2018 22:55:59 +0100 |
| Subject: afs: Fix VNOVOL handling in address rotation |
| |
| From: David Howells <dhowells@redhat.com> |
| |
| [ Upstream commit 3d9fa91161387ee629e7a07c47934d119910c8ae ] |
| |
| If a volume location record lists multiple file servers for a volume, then |
| it's possible that due to a misconfiguration or a changing configuration |
| that one of the file servers doesn't know about it yet and will abort |
| VNOVOL. Currently, the rotation algorithm will stop with EREMOTEIO. |
| |
| Fix this by moving on to try the next server if VNOVOL is returned. Once |
| all the servers have been tried and the record rechecked, the algorithm |
| will stop with EREMOTEIO or ENOMEDIUM. |
| |
| Fixes: d2ddc776a458 ("afs: Overhaul volume and server record caching and fileserver rotation") |
| Reported-by: Marc Dionne <marc.dionne@auristor.com> |
| 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 | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/fs/afs/rotate.c |
| +++ b/fs/afs/rotate.c |
| @@ -179,7 +179,7 @@ bool afs_select_fileserver(struct afs_fs |
| */ |
| if (fc->flags & AFS_FS_CURSOR_VNOVOL) { |
| fc->ac.error = -EREMOTEIO; |
| - goto failed; |
| + goto next_server; |
| } |
| |
| write_lock(&vnode->volume->servers_lock); |
| @@ -201,7 +201,7 @@ bool afs_select_fileserver(struct afs_fs |
| */ |
| if (vnode->volume->servers == fc->server_list) { |
| fc->ac.error = -EREMOTEIO; |
| - goto failed; |
| + goto next_server; |
| } |
| |
| /* Try again */ |