diff options
Diffstat (limited to 'fs/afs')
-rw-r--r-- | fs/afs/rotate.c | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/fs/afs/rotate.c b/fs/afs/rotate.c index cfe0931e7844..ad1328d85526 100644 --- a/fs/afs/rotate.c +++ b/fs/afs/rotate.c @@ -330,27 +330,6 @@ start: if (!afs_start_fs_iteration(fc, vnode)) goto failed; - goto use_server; - -next_server: - _debug("next"); - afs_end_cursor(&fc->ac); - afs_put_cb_interest(afs_v2net(vnode), fc->cbi); - fc->cbi = NULL; - fc->index++; - if (fc->index >= fc->server_list->nr_servers) - fc->index = 0; - if (fc->index != fc->start) - goto use_server; - - /* That's all the servers poked to no good effect. Try again if some - * of them were busy. - */ - if (fc->flags & AFS_FS_CURSOR_VBUSY) - goto restart_from_beginning; - - fc->ac.error = -EDESTADDRREQ; - goto failed; use_server: _debug("use"); @@ -401,7 +380,6 @@ use_server: fc->ac.start = READ_ONCE(alist->index); fc->ac.index = fc->ac.start; - goto iterate_address; iterate_address: ASSERT(fc->ac.alist); @@ -415,6 +393,26 @@ iterate_address: _leave(" = t"); return true; +next_server: + _debug("next"); + afs_end_cursor(&fc->ac); + afs_put_cb_interest(afs_v2net(vnode), fc->cbi); + fc->cbi = NULL; + fc->index++; + if (fc->index >= fc->server_list->nr_servers) + fc->index = 0; + if (fc->index != fc->start) + goto use_server; + + /* That's all the servers poked to no good effect. Try again if some + * of them were busy. + */ + if (fc->flags & AFS_FS_CURSOR_VBUSY) + goto restart_from_beginning; + + fc->ac.error = -EDESTADDRREQ; + goto failed; + failed: fc->flags |= AFS_FS_CURSOR_STOP; afs_end_cursor(&fc->ac); |