Lines Matching defs:vc
17 bool afs_begin_vlserver_operation(struct afs_vl_cursor *vc, struct afs_cell *cell,
20 memset(vc, 0, sizeof(*vc));
21 vc->cell = cell;
22 vc->key = key;
23 vc->error = -EDESTADDRREQ;
24 vc->ac.error = SHRT_MAX;
27 vc->error = -EINTR;
28 vc->flags |= AFS_VL_CURSOR_STOP;
39 static bool afs_start_vl_iteration(struct afs_vl_cursor *vc)
41 struct afs_cell *cell = vc->cell;
55 vc->error = -ERESTARTSYS;
63 vc->error = -ENOENT;
68 vc->error = -EDESTADDRREQ;
74 vc->server_list = afs_get_vlserverlist(
78 if (!vc->server_list->nr_servers)
81 vc->untried = (1UL << vc->server_list->nr_servers) - 1;
82 vc->index = -1;
90 bool afs_select_vlserver(struct afs_vl_cursor *vc)
96 int error = vc->ac.error, i;
99 vc->untried, vc->index,
100 vc->ac.tried, vc->ac.index,
101 error, vc->ac.abort_code);
103 if (vc->flags & AFS_VL_CURSOR_STOP) {
108 vc->nr_iterations++;
118 vc->error = error;
119 vc->flags |= AFS_VL_CURSOR_STOP;
120 _leave(" = f [okay/local %d]", vc->ac.error);
127 switch (vc->ac.abort_code) {
132 vc->error = -EREMOTEIO;
133 //write_lock(&vc->cell->vl_servers_lock);
134 //vc->server_list->weird_mask |= 1 << vc->index;
135 //write_unlock(&vc->cell->vl_servers_lock);
139 vc->error = afs_abort_to_error(vc->ac.abort_code);
152 vc->error = error;
157 vc->error = error;
158 vc->flags |= AFS_VL_CURSOR_RETRY;
168 afs_end_cursor(&vc->ac);
169 afs_put_vlserverlist(vc->cell->net, vc->server_list);
170 vc->server_list = NULL;
171 if (vc->flags & AFS_VL_CURSOR_RETRIED)
173 vc->flags |= AFS_VL_CURSOR_RETRIED;
177 if (!afs_start_vl_iteration(vc))
180 error = afs_send_vl_probes(vc->cell->net, vc->key, vc->server_list);
185 _debug("pick [%lx]", vc->untried);
187 error = afs_wait_for_vl_probes(vc->server_list, vc->untried);
192 vc->index = vc->server_list->preferred;
193 if (test_bit(vc->index, &vc->untried))
196 vc->index = -1;
198 for (i = 0; i < vc->server_list->nr_servers; i++) {
199 struct afs_vlserver *s = vc->server_list->servers[i].server;
201 if (!test_bit(i, &vc->untried) ||
205 vc->index = i;
210 if (vc->index == -1)
214 _debug("use %d", vc->index);
215 __clear_bit(vc->index, &vc->untried);
221 ASSERTCMP(vc->ac.alist, ==, NULL);
222 vlserver = vc->server_list->servers[vc->index].server;
223 vc->server = vlserver;
233 memset(&vc->ac, 0, sizeof(vc->ac));
235 if (!vc->ac.alist)
236 vc->ac.alist = alist;
240 vc->ac.index = -1;
243 ASSERT(vc->ac.alist);
247 if (!afs_iterate_addresses(&vc->ac))
250 _debug("VL address %d/%d", vc->ac.index, vc->ac.alist->nr_addrs);
252 _leave(" = t %pISpc", &vc->ac.alist->addrs[vc->ac.index].transport);
257 afs_end_cursor(&vc->ac);
264 if (vc->flags & AFS_VL_CURSOR_RETRY)
269 for (i = 0; i < vc->server_list->nr_servers; i++) {
270 struct afs_vlserver *s = vc->server_list->servers[i].server;
281 vc->error = error;
283 vc->flags |= AFS_VL_CURSOR_STOP;
284 afs_end_cursor(&vc->ac);
285 _leave(" = f [failed %d]", vc->error);
292 static void afs_vl_dump_edestaddrreq(const struct afs_vl_cursor *vc)
294 struct afs_cell *cell = vc->cell;
308 vc->untried, vc->index, vc->nr_iterations, vc->flags, vc->error);
310 if (vc->server_list) {
311 const struct afs_vlserver_list *sl = vc->server_list;
326 if (a == vc->ac.alist)
333 vc->ac.tried, vc->ac.index, vc->ac.abort_code, vc->ac.error,
334 vc->ac.responded, vc->ac.nr_iterations);
341 int afs_end_vlserver_operation(struct afs_vl_cursor *vc)
343 struct afs_net *net = vc->cell->net;
345 if (vc->error == -EDESTADDRREQ ||
346 vc->error == -EADDRNOTAVAIL ||
347 vc->error == -ENETUNREACH ||
348 vc->error == -EHOSTUNREACH)
349 afs_vl_dump_edestaddrreq(vc);
351 afs_end_cursor(&vc->ac);
352 afs_put_vlserverlist(net, vc->server_list);
354 if (vc->error == -ECONNABORTED)
355 vc->error = afs_abort_to_error(vc->ac.abort_code);
357 return vc->error;