Lines Matching refs:server
22 struct afs_server *server, bool fast) in afs_schedule_fs_probe() argument
29 atj = server->probed_at; in afs_schedule_fs_probe()
40 static void afs_finished_fs_probe(struct afs_net *net, struct afs_server *server) in afs_finished_fs_probe() argument
42 bool responded = server->probe.responded; in afs_finished_fs_probe()
46 list_add_tail(&server->probe_link, &net->fs_probe_slow); in afs_finished_fs_probe()
48 server->rtt = UINT_MAX; in afs_finished_fs_probe()
49 clear_bit(AFS_SERVER_FL_RESPONDING, &server->flags); in afs_finished_fs_probe()
50 list_add_tail(&server->probe_link, &net->fs_probe_fast); in afs_finished_fs_probe()
54 afs_schedule_fs_probe(net, server, !responded); in afs_finished_fs_probe()
60 static void afs_done_one_fs_probe(struct afs_net *net, struct afs_server *server) in afs_done_one_fs_probe() argument
64 if (atomic_dec_and_test(&server->probe_outstanding)) in afs_done_one_fs_probe()
65 afs_finished_fs_probe(net, server); in afs_done_one_fs_probe()
67 wake_up_all(&server->probe_wq); in afs_done_one_fs_probe()
75 struct afs_server *server, in afs_fs_probe_not_done() argument
84 spin_lock(&server->probe_lock); in afs_fs_probe_not_done()
86 server->probe.local_failure = true; in afs_fs_probe_not_done()
87 if (server->probe.error == 0) in afs_fs_probe_not_done()
88 server->probe.error = -ENOMEM; in afs_fs_probe_not_done()
92 spin_unlock(&server->probe_lock); in afs_fs_probe_not_done()
93 return afs_done_one_fs_probe(net, server); in afs_fs_probe_not_done()
103 struct afs_server *server = call->server; in afs_fileserver_probe_result() local
108 _enter("%pU,%u", &server->uuid, index); in afs_fileserver_probe_result()
110 spin_lock(&server->probe_lock); in afs_fileserver_probe_result()
114 server->probe.error = 0; in afs_fileserver_probe_result()
117 if (!server->probe.responded) { in afs_fileserver_probe_result()
118 server->probe.abort_code = call->abort_code; in afs_fileserver_probe_result()
119 server->probe.error = ret; in afs_fileserver_probe_result()
125 server->probe.local_failure = true; in afs_fileserver_probe_result()
140 if (!server->probe.responded && in afs_fileserver_probe_result()
141 (server->probe.error == 0 || in afs_fileserver_probe_result()
142 server->probe.error == -ETIMEDOUT || in afs_fileserver_probe_result()
143 server->probe.error == -ETIME)) in afs_fileserver_probe_result()
144 server->probe.error = ret; in afs_fileserver_probe_result()
153 server->probe.is_yfs = true; in afs_fileserver_probe_result()
154 set_bit(AFS_SERVER_FL_IS_YFS, &server->flags); in afs_fileserver_probe_result()
157 server->probe.not_yfs = true; in afs_fileserver_probe_result()
158 if (!server->probe.is_yfs) { in afs_fileserver_probe_result()
159 clear_bit(AFS_SERVER_FL_IS_YFS, &server->flags); in afs_fileserver_probe_result()
165 rtt_us < server->probe.rtt) { in afs_fileserver_probe_result()
166 server->probe.rtt = rtt_us; in afs_fileserver_probe_result()
167 server->rtt = rtt_us; in afs_fileserver_probe_result()
172 server->probe.responded = true; in afs_fileserver_probe_result()
174 set_bit(AFS_SERVER_FL_RESPONDING, &server->flags); in afs_fileserver_probe_result()
176 spin_unlock(&server->probe_lock); in afs_fileserver_probe_result()
179 &server->uuid, index, &alist->addrs[index].transport, in afs_fileserver_probe_result()
182 return afs_done_one_fs_probe(call->net, server); in afs_fileserver_probe_result()
189 void afs_fs_probe_fileserver(struct afs_net *net, struct afs_server *server, in afs_fs_probe_fileserver() argument
196 _enter("%pU", &server->uuid); in afs_fs_probe_fileserver()
198 read_lock(&server->fs_lock); in afs_fs_probe_fileserver()
199 ac.alist = rcu_dereference_protected(server->addresses, in afs_fs_probe_fileserver()
200 lockdep_is_held(&server->fs_lock)); in afs_fs_probe_fileserver()
202 read_unlock(&server->fs_lock); in afs_fs_probe_fileserver()
204 server->probed_at = jiffies; in afs_fs_probe_fileserver()
205 atomic_set(&server->probe_outstanding, all ? ac.alist->nr_addrs : 1); in afs_fs_probe_fileserver()
206 memset(&server->probe, 0, sizeof(server->probe)); in afs_fs_probe_fileserver()
207 server->probe.rtt = UINT_MAX; in afs_fs_probe_fileserver()
215 if (!afs_fs_get_capabilities(net, server, &ac, key)) in afs_fs_probe_fileserver()
216 afs_fs_probe_not_done(net, server, &ac); in afs_fs_probe_fileserver()
218 if (!afs_fs_get_capabilities(net, server, &ac, key)) in afs_fs_probe_fileserver()
219 afs_fs_probe_not_done(net, server, &ac); in afs_fs_probe_fileserver()
231 struct afs_server *server; in afs_wait_for_fs_probes() local
241 server = slist->servers[i].server; in afs_wait_for_fs_probes()
242 if (!atomic_read(&server->probe_outstanding)) in afs_wait_for_fs_probes()
244 if (server->probe.responded) in afs_wait_for_fs_probes()
257 server = slist->servers[i].server; in afs_wait_for_fs_probes()
259 add_wait_queue(&server->probe_wq, &waits[i]); in afs_wait_for_fs_probes()
269 server = slist->servers[i].server; in afs_wait_for_fs_probes()
270 if (server->probe.responded) in afs_wait_for_fs_probes()
272 if (atomic_read(&server->probe_outstanding)) in afs_wait_for_fs_probes()
287 server = slist->servers[i].server; in afs_wait_for_fs_probes()
288 rtt_s = READ_ONCE(server->rtt); in afs_wait_for_fs_probes()
289 if (test_bit(AFS_SERVER_FL_RESPONDING, &server->flags) && in afs_wait_for_fs_probes()
295 remove_wait_queue(&server->probe_wq, &waits[i]); in afs_wait_for_fs_probes()
324 static void afs_dispatch_fs_probe(struct afs_net *net, struct afs_server *server, bool all) in afs_dispatch_fs_probe() argument
332 list_del_init(&server->probe_link); in afs_dispatch_fs_probe()
334 afs_get_server(server, afs_server_trace_get_probe); in afs_dispatch_fs_probe()
337 afs_fs_probe_fileserver(net, server, key, all); in afs_dispatch_fs_probe()
338 afs_put_server(net, server, afs_server_trace_put_probe); in afs_dispatch_fs_probe()
345 void afs_probe_fileserver(struct afs_net *net, struct afs_server *server) in afs_probe_fileserver() argument
348 if (!list_empty(&server->probe_link)) in afs_probe_fileserver()
349 return afs_dispatch_fs_probe(net, server, true); in afs_probe_fileserver()
359 struct afs_server *fast, *slow, *server; in afs_fs_probe_dispatcher() local
376 fast = slow = server = NULL; in afs_fs_probe_dispatcher()
401 server = fast ?: slow; in afs_fs_probe_dispatcher()
402 if (server) in afs_fs_probe_dispatcher()
403 _debug("probe %pU", &server->uuid); in afs_fs_probe_dispatcher()
405 if (server && (first_pass || !need_resched())) { in afs_fs_probe_dispatcher()
406 afs_dispatch_fs_probe(net, server, server == fast); in afs_fs_probe_dispatcher()
413 if (server) { in afs_fs_probe_dispatcher()
430 int afs_wait_for_one_fs_probe(struct afs_server *server, bool is_intr) in afs_wait_for_one_fs_probe() argument
435 if (atomic_read(&server->probe_outstanding) == 0) in afs_wait_for_one_fs_probe()
440 prepare_to_wait_event(&server->probe_wq, &wait, in afs_wait_for_one_fs_probe()
443 server->probe.responded || in afs_wait_for_one_fs_probe()
444 atomic_read(&server->probe_outstanding) == 0 || in afs_wait_for_one_fs_probe()
450 finish_wait(&server->probe_wq, &wait); in afs_wait_for_one_fs_probe()
453 if (server->probe.responded) in afs_wait_for_one_fs_probe()