• Home
  • Raw
  • Download

Lines Matching +full:1 +full:- +full:cell

1 // SPDX-License-Identifier: GPL-2.0-or-later
17 bool afs_begin_vlserver_operation(struct afs_vl_cursor *vc, struct afs_cell *cell, in afs_begin_vlserver_operation() argument
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()
41 struct afs_cell *cell = vc->cell; in afs_start_vl_iteration() local
44 if (cell->dns_source == DNS_RECORD_UNAVAILABLE || in afs_start_vl_iteration()
45 cell->dns_expiry <= ktime_get_real_seconds()) { in afs_start_vl_iteration()
46 dns_lookup_count = smp_load_acquire(&cell->dns_lookup_count); in afs_start_vl_iteration()
47 set_bit(AFS_CELL_FL_DO_LOOKUP, &cell->flags); in afs_start_vl_iteration()
48 afs_queue_cell(cell, afs_cell_trace_get_queue_dns); in afs_start_vl_iteration()
50 if (cell->dns_source == DNS_RECORD_UNAVAILABLE) { in afs_start_vl_iteration()
52 &cell->dns_lookup_count, in afs_start_vl_iteration()
53 smp_load_acquire(&cell->dns_lookup_count) in afs_start_vl_iteration()
55 vc->error = -ERESTARTSYS; in afs_start_vl_iteration()
61 if (cell->dns_status == DNS_LOOKUP_GOT_NOT_FOUND) { in afs_start_vl_iteration()
62 pr_warn("No record of cell %s\n", cell->name); in afs_start_vl_iteration()
63 vc->error = -ENOENT; in afs_start_vl_iteration()
67 if (cell->dns_source == DNS_RECORD_UNAVAILABLE) { in afs_start_vl_iteration()
68 vc->error = -EDESTADDRREQ; in afs_start_vl_iteration()
73 read_lock(&cell->vl_servers_lock); in afs_start_vl_iteration()
74 vc->server_list = afs_get_vlserverlist( in afs_start_vl_iteration()
75 rcu_dereference_protected(cell->vl_servers, in afs_start_vl_iteration()
76 lockdep_is_held(&cell->vl_servers_lock))); in afs_start_vl_iteration()
77 read_unlock(&cell->vl_servers_lock); in afs_start_vl_iteration()
78 if (!vc->server_list->nr_servers) in afs_start_vl_iteration()
81 vc->untried = (1UL << vc->server_list->nr_servers) - 1; in afs_start_vl_iteration()
82 vc->index = -1; in afs_start_vl_iteration()
96 int error = vc->ac.error, i; in afs_select_vlserver()
99 vc->untried, vc->index, in afs_select_vlserver()
100 vc->ac.tried, vc->ac.index, in afs_select_vlserver()
101 error, vc->ac.abort_code); in afs_select_vlserver()
103 if (vc->flags & AFS_VL_CURSOR_STOP) { in afs_select_vlserver()
108 vc->nr_iterations++; in afs_select_vlserver()
118 vc->error = error; in afs_select_vlserver()
119 vc->flags |= AFS_VL_CURSOR_STOP; in afs_select_vlserver()
120 _leave(" = f [okay/local %d]", vc->ac.error); in afs_select_vlserver()
123 case -ECONNABORTED: in afs_select_vlserver()
127 switch (vc->ac.abort_code) { in afs_select_vlserver()
132 vc->error = -EREMOTEIO; in afs_select_vlserver()
133 //write_lock(&vc->cell->vl_servers_lock); in afs_select_vlserver()
134 //vc->server_list->weird_mask |= 1 << vc->index; in afs_select_vlserver()
135 //write_unlock(&vc->cell->vl_servers_lock); in afs_select_vlserver()
139 vc->error = afs_abort_to_error(vc->ac.abort_code); in afs_select_vlserver()
143 case -ERFKILL: in afs_select_vlserver()
144 case -EADDRNOTAVAIL: in afs_select_vlserver()
145 case -ENETUNREACH: in afs_select_vlserver()
146 case -EHOSTUNREACH: in afs_select_vlserver()
147 case -EHOSTDOWN: in afs_select_vlserver()
148 case -ECONNREFUSED: in afs_select_vlserver()
149 case -ETIMEDOUT: in afs_select_vlserver()
150 case -ETIME: in afs_select_vlserver()
152 vc->error = error; in afs_select_vlserver()
155 case -ECONNRESET: in afs_select_vlserver()
157 vc->error = error; in afs_select_vlserver()
158 vc->flags |= AFS_VL_CURSOR_RETRY; in afs_select_vlserver()
161 case -EOPNOTSUPP: in afs_select_vlserver()
168 afs_end_cursor(&vc->ac); in afs_select_vlserver()
169 afs_put_vlserverlist(vc->cell->net, vc->server_list); in afs_select_vlserver()
170 vc->server_list = NULL; in afs_select_vlserver()
171 if (vc->flags & AFS_VL_CURSOR_RETRIED) in afs_select_vlserver()
173 vc->flags |= AFS_VL_CURSOR_RETRIED; in afs_select_vlserver()
180 error = afs_send_vl_probes(vc->cell->net, vc->key, vc->server_list); in afs_select_vlserver()
185 _debug("pick [%lx]", vc->untried); in afs_select_vlserver()
187 error = afs_wait_for_vl_probes(vc->server_list, vc->untried); in afs_select_vlserver()
192 vc->index = vc->server_list->preferred; in afs_select_vlserver()
193 if (test_bit(vc->index, &vc->untried)) in afs_select_vlserver()
196 vc->index = -1; in afs_select_vlserver()
198 for (i = 0; i < vc->server_list->nr_servers; i++) { in afs_select_vlserver()
199 struct afs_vlserver *s = vc->server_list->servers[i].server; in afs_select_vlserver()
201 if (!test_bit(i, &vc->untried) || in afs_select_vlserver()
202 !test_bit(AFS_VLSERVER_FL_RESPONDING, &s->flags)) in afs_select_vlserver()
204 if (s->probe.rtt < rtt) { in afs_select_vlserver()
205 vc->index = i; in afs_select_vlserver()
206 rtt = s->probe.rtt; in afs_select_vlserver()
210 if (vc->index == -1) in afs_select_vlserver()
214 _debug("use %d", vc->index); in afs_select_vlserver()
215 __clear_bit(vc->index, &vc->untried); in afs_select_vlserver()
221 ASSERTCMP(vc->ac.alist, ==, NULL); in afs_select_vlserver()
222 vlserver = vc->server_list->servers[vc->index].server; in afs_select_vlserver()
223 vc->server = vlserver; in afs_select_vlserver()
225 _debug("USING VLSERVER: %s", vlserver->name); in afs_select_vlserver()
227 read_lock(&vlserver->lock); in afs_select_vlserver()
228 alist = rcu_dereference_protected(vlserver->addresses, in afs_select_vlserver()
229 lockdep_is_held(&vlserver->lock)); in afs_select_vlserver()
231 read_unlock(&vlserver->lock); in afs_select_vlserver()
233 memset(&vc->ac, 0, sizeof(vc->ac)); in afs_select_vlserver()
235 if (!vc->ac.alist) in afs_select_vlserver()
236 vc->ac.alist = alist; in afs_select_vlserver()
240 vc->ac.index = -1; in afs_select_vlserver()
243 ASSERT(vc->ac.alist); in afs_select_vlserver()
247 if (!afs_iterate_addresses(&vc->ac)) in afs_select_vlserver()
250 _debug("VL address %d/%d", vc->ac.index, vc->ac.alist->nr_addrs); in afs_select_vlserver()
252 _leave(" = t %pISpc", &vc->ac.alist->addrs[vc->ac.index].transport); in afs_select_vlserver()
257 afs_end_cursor(&vc->ac); in afs_select_vlserver()
264 if (vc->flags & AFS_VL_CURSOR_RETRY) in afs_select_vlserver()
267 e.error = -EDESTADDRREQ; in afs_select_vlserver()
269 for (i = 0; i < vc->server_list->nr_servers; i++) { in afs_select_vlserver()
270 struct afs_vlserver *s = vc->server_list->servers[i].server; in afs_select_vlserver()
272 if (test_bit(AFS_VLSERVER_FL_RESPONDING, &s->flags)) in afs_select_vlserver()
274 afs_prioritise_error(&e, READ_ONCE(s->probe.error), in afs_select_vlserver()
275 s->probe.abort_code); in afs_select_vlserver()
281 vc->error = error; in afs_select_vlserver()
283 vc->flags |= AFS_VL_CURSOR_STOP; in afs_select_vlserver()
284 afs_end_cursor(&vc->ac); in afs_select_vlserver()
285 _leave(" = f [failed %d]", vc->error); in afs_select_vlserver()
294 struct afs_cell *cell = vc->cell; in afs_vl_dump_edestaddrreq() local
304 pr_notice("CELL: %s err=%d\n", cell->name, cell->error); in afs_vl_dump_edestaddrreq()
306 cell->dns_source, cell->dns_status, cell->dns_lookup_count); in afs_vl_dump_edestaddrreq()
308 vc->untried, vc->index, vc->nr_iterations, vc->flags, vc->error); in afs_vl_dump_edestaddrreq()
310 if (vc->server_list) { in afs_vl_dump_edestaddrreq()
311 const struct afs_vlserver_list *sl = vc->server_list; in afs_vl_dump_edestaddrreq()
313 sl->nr_servers, sl->index); in afs_vl_dump_edestaddrreq()
314 for (i = 0; i < sl->nr_servers; i++) { in afs_vl_dump_edestaddrreq()
315 const struct afs_vlserver *s = sl->servers[i].server; in afs_vl_dump_edestaddrreq()
317 s->name, s->port, s->flags, s->probe.error); in afs_vl_dump_edestaddrreq()
318 if (s->addresses) { in afs_vl_dump_edestaddrreq()
320 rcu_dereference(s->addresses); in afs_vl_dump_edestaddrreq()
321 pr_notice("VC: - nr=%u/%u/%u pf=%u\n", in afs_vl_dump_edestaddrreq()
322 a->nr_ipv4, a->nr_addrs, a->max_addrs, in afs_vl_dump_edestaddrreq()
323 a->preferred); in afs_vl_dump_edestaddrreq()
324 pr_notice("VC: - R=%lx F=%lx\n", in afs_vl_dump_edestaddrreq()
325 a->responded, a->failed); in afs_vl_dump_edestaddrreq()
326 if (a == vc->ac.alist) in afs_vl_dump_edestaddrreq()
327 pr_notice("VC: - current\n"); in afs_vl_dump_edestaddrreq()
333 vc->ac.tried, vc->ac.index, vc->ac.abort_code, vc->ac.error, in afs_vl_dump_edestaddrreq()
334 vc->ac.responded, vc->ac.nr_iterations); in afs_vl_dump_edestaddrreq()
343 struct afs_net *net = vc->cell->net; in afs_end_vlserver_operation()
345 if (vc->error == -EDESTADDRREQ || in afs_end_vlserver_operation()
346 vc->error == -EADDRNOTAVAIL || in afs_end_vlserver_operation()
347 vc->error == -ENETUNREACH || in afs_end_vlserver_operation()
348 vc->error == -EHOSTUNREACH) in afs_end_vlserver_operation()
351 afs_end_cursor(&vc->ac); in afs_end_vlserver_operation()
352 afs_put_vlserverlist(net, vc->server_list); in afs_end_vlserver_operation()
354 if (vc->error == -ECONNABORTED) in afs_end_vlserver_operation()
355 vc->error = afs_abort_to_error(vc->ac.abort_code); in afs_end_vlserver_operation()
357 return vc->error; in afs_end_vlserver_operation()