Lines Matching refs:vc

17 bool afs_begin_vlserver_operation(struct afs_vl_cursor *vc, struct afs_cell *cell,  in afs_begin_vlserver_operation()  argument
20 memset(vc, 0, sizeof(*vc)); in afs_begin_vlserver_operation()
21 vc->cell = cell; in afs_begin_vlserver_operation()
22 vc->key = key; in afs_begin_vlserver_operation()
23 vc->error = -EDESTADDRREQ; in afs_begin_vlserver_operation()
24 vc->ac.error = SHRT_MAX; in afs_begin_vlserver_operation()
27 vc->error = -EINTR; in afs_begin_vlserver_operation()
28 vc->flags |= AFS_VL_CURSOR_STOP; in afs_begin_vlserver_operation()
39 static bool afs_start_vl_iteration(struct afs_vl_cursor *vc) in afs_start_vl_iteration() argument
41 struct afs_cell *cell = vc->cell; in afs_start_vl_iteration()
55 vc->error = -ERESTARTSYS; in afs_start_vl_iteration()
62 vc->error = -EDESTADDRREQ; in afs_start_vl_iteration()
68 vc->server_list = afs_get_vlserverlist( in afs_start_vl_iteration()
72 if (!vc->server_list->nr_servers) in afs_start_vl_iteration()
75 vc->untried = (1UL << vc->server_list->nr_servers) - 1; in afs_start_vl_iteration()
76 vc->index = -1; in afs_start_vl_iteration()
84 bool afs_select_vlserver(struct afs_vl_cursor *vc) in afs_select_vlserver() argument
90 int error = vc->ac.error, i; in afs_select_vlserver()
93 vc->untried, vc->index, in afs_select_vlserver()
94 vc->ac.tried, vc->ac.index, in afs_select_vlserver()
95 error, vc->ac.abort_code); in afs_select_vlserver()
97 if (vc->flags & AFS_VL_CURSOR_STOP) { in afs_select_vlserver()
102 vc->nr_iterations++; in afs_select_vlserver()
112 vc->error = error; in afs_select_vlserver()
113 vc->flags |= AFS_VL_CURSOR_STOP; in afs_select_vlserver()
114 _leave(" = f [okay/local %d]", vc->ac.error); in afs_select_vlserver()
121 switch (vc->ac.abort_code) { in afs_select_vlserver()
126 vc->error = -EREMOTEIO; in afs_select_vlserver()
133 vc->error = afs_abort_to_error(vc->ac.abort_code); in afs_select_vlserver()
146 vc->error = error; in afs_select_vlserver()
151 vc->error = error; in afs_select_vlserver()
152 vc->flags |= AFS_VL_CURSOR_RETRY; in afs_select_vlserver()
162 afs_end_cursor(&vc->ac); in afs_select_vlserver()
163 afs_put_vlserverlist(vc->cell->net, vc->server_list); in afs_select_vlserver()
164 vc->server_list = NULL; in afs_select_vlserver()
165 if (vc->flags & AFS_VL_CURSOR_RETRIED) in afs_select_vlserver()
167 vc->flags |= AFS_VL_CURSOR_RETRIED; in afs_select_vlserver()
171 if (!afs_start_vl_iteration(vc)) in afs_select_vlserver()
174 error = afs_send_vl_probes(vc->cell->net, vc->key, vc->server_list); in afs_select_vlserver()
179 _debug("pick [%lx]", vc->untried); in afs_select_vlserver()
181 error = afs_wait_for_vl_probes(vc->server_list, vc->untried); in afs_select_vlserver()
186 vc->index = vc->server_list->preferred; in afs_select_vlserver()
187 if (test_bit(vc->index, &vc->untried)) in afs_select_vlserver()
190 vc->index = -1; in afs_select_vlserver()
192 for (i = 0; i < vc->server_list->nr_servers; i++) { in afs_select_vlserver()
193 struct afs_vlserver *s = vc->server_list->servers[i].server; in afs_select_vlserver()
195 if (!test_bit(i, &vc->untried) || in afs_select_vlserver()
199 vc->index = i; in afs_select_vlserver()
204 if (vc->index == -1) in afs_select_vlserver()
208 _debug("use %d", vc->index); in afs_select_vlserver()
209 __clear_bit(vc->index, &vc->untried); in afs_select_vlserver()
215 ASSERTCMP(vc->ac.alist, ==, NULL); in afs_select_vlserver()
216 vlserver = vc->server_list->servers[vc->index].server; in afs_select_vlserver()
217 vc->server = vlserver; in afs_select_vlserver()
227 memset(&vc->ac, 0, sizeof(vc->ac)); in afs_select_vlserver()
229 if (!vc->ac.alist) in afs_select_vlserver()
230 vc->ac.alist = alist; in afs_select_vlserver()
234 vc->ac.index = -1; in afs_select_vlserver()
237 ASSERT(vc->ac.alist); in afs_select_vlserver()
241 if (!afs_iterate_addresses(&vc->ac)) in afs_select_vlserver()
244 _debug("VL address %d/%d", vc->ac.index, vc->ac.alist->nr_addrs); in afs_select_vlserver()
246 _leave(" = t %pISpc", &vc->ac.alist->addrs[vc->ac.index].transport); in afs_select_vlserver()
251 afs_end_cursor(&vc->ac); in afs_select_vlserver()
258 if (vc->flags & AFS_VL_CURSOR_RETRY) in afs_select_vlserver()
263 for (i = 0; i < vc->server_list->nr_servers; i++) { in afs_select_vlserver()
264 struct afs_vlserver *s = vc->server_list->servers[i].server; in afs_select_vlserver()
275 vc->error = error; in afs_select_vlserver()
277 vc->flags |= AFS_VL_CURSOR_STOP; in afs_select_vlserver()
278 afs_end_cursor(&vc->ac); in afs_select_vlserver()
279 _leave(" = f [failed %d]", vc->error); in afs_select_vlserver()
286 static void afs_vl_dump_edestaddrreq(const struct afs_vl_cursor *vc) in afs_vl_dump_edestaddrreq() argument
298 vc->untried, vc->index, vc->nr_iterations, vc->flags, vc->error); in afs_vl_dump_edestaddrreq()
300 if (vc->server_list) { in afs_vl_dump_edestaddrreq()
301 const struct afs_vlserver_list *sl = vc->server_list; in afs_vl_dump_edestaddrreq()
316 if (a == vc->ac.alist) in afs_vl_dump_edestaddrreq()
323 vc->ac.tried, vc->ac.index, vc->ac.abort_code, vc->ac.error, in afs_vl_dump_edestaddrreq()
324 vc->ac.responded, vc->ac.nr_iterations); in afs_vl_dump_edestaddrreq()
331 int afs_end_vlserver_operation(struct afs_vl_cursor *vc) in afs_end_vlserver_operation() argument
333 struct afs_net *net = vc->cell->net; in afs_end_vlserver_operation()
335 if (vc->error == -EDESTADDRREQ || in afs_end_vlserver_operation()
336 vc->error == -EADDRNOTAVAIL || in afs_end_vlserver_operation()
337 vc->error == -ENETUNREACH || in afs_end_vlserver_operation()
338 vc->error == -EHOSTUNREACH) in afs_end_vlserver_operation()
339 afs_vl_dump_edestaddrreq(vc); in afs_end_vlserver_operation()
341 afs_end_cursor(&vc->ac); in afs_end_vlserver_operation()
342 afs_put_vlserverlist(net, vc->server_list); in afs_end_vlserver_operation()
344 if (vc->error == -ECONNABORTED) in afs_end_vlserver_operation()
345 vc->error = afs_abort_to_error(vc->ac.abort_code); in afs_end_vlserver_operation()
347 return vc->error; in afs_end_vlserver_operation()