Lines Matching refs:server
20 * outstanding server count.
23 struct afs_server *server, bool fast)
30 atj = server->probed_at;
41 static void afs_finished_fs_probe(struct afs_net *net, struct afs_server *server)
43 bool responded = server->probe.responded;
47 list_add_tail(&server->probe_link, &net->fs_probe_slow);
49 server->rtt = UINT_MAX;
50 clear_bit(AFS_SERVER_FL_RESPONDING, &server->flags);
51 list_add_tail(&server->probe_link, &net->fs_probe_fast);
55 afs_schedule_fs_probe(net, server, !responded);
61 static void afs_done_one_fs_probe(struct afs_net *net, struct afs_server *server)
65 if (atomic_dec_and_test(&server->probe_outstanding))
66 afs_finished_fs_probe(net, server);
68 wake_up_all(&server->probe_wq);
76 struct afs_server *server,
85 spin_lock(&server->probe_lock);
87 server->probe.local_failure = true;
88 if (server->probe.error == 0)
89 server->probe.error = -ENOMEM;
93 spin_unlock(&server->probe_lock);
94 return afs_done_one_fs_probe(net, server);
104 struct afs_server *server = call->server;
109 _enter("%pU,%u", &server->uuid, index);
111 spin_lock(&server->probe_lock);
115 server->probe.error = 0;
118 if (!server->probe.responded) {
119 server->probe.abort_code = call->abort_code;
120 server->probe.error = ret;
126 server->probe.local_failure = true;
141 if (!server->probe.responded &&
142 (server->probe.error == 0 ||
143 server->probe.error == -ETIMEDOUT ||
144 server->probe.error == -ETIME))
145 server->probe.error = ret;
154 server->probe.is_yfs = true;
155 set_bit(AFS_SERVER_FL_IS_YFS, &server->flags);
158 server->probe.not_yfs = true;
159 if (!server->probe.is_yfs) {
160 clear_bit(AFS_SERVER_FL_IS_YFS, &server->flags);
165 set_bit(AFS_SERVER_FL_HAS_FS64, &server->flags);
167 clear_bit(AFS_SERVER_FL_HAS_FS64, &server->flags);
171 if (rtt_us < server->probe.rtt) {
172 server->probe.rtt = rtt_us;
173 server->rtt = rtt_us;
178 server->probe.responded = true;
180 set_bit(AFS_SERVER_FL_RESPONDING, &server->flags);
182 spin_unlock(&server->probe_lock);
185 &server->uuid, index, &alist->addrs[index].transport,
188 return afs_done_one_fs_probe(call->net, server);
195 void afs_fs_probe_fileserver(struct afs_net *net, struct afs_server *server,
202 _enter("%pU", &server->uuid);
204 read_lock(&server->fs_lock);
205 ac.alist = rcu_dereference_protected(server->addresses,
206 lockdep_is_held(&server->fs_lock));
208 read_unlock(&server->fs_lock);
210 server->probed_at = jiffies;
211 atomic_set(&server->probe_outstanding, all ? ac.alist->nr_addrs : 1);
212 memset(&server->probe, 0, sizeof(server->probe));
213 server->probe.rtt = UINT_MAX;
221 if (!afs_fs_get_capabilities(net, server, &ac, key))
222 afs_fs_probe_not_done(net, server, &ac);
224 if (!afs_fs_get_capabilities(net, server, &ac, key))
225 afs_fs_probe_not_done(net, server, &ac);
237 struct afs_server *server;
247 server = slist->servers[i].server;
248 if (!atomic_read(&server->probe_outstanding))
250 if (server->probe.responded)
263 server = slist->servers[i].server;
265 add_wait_queue(&server->probe_wq, &waits[i]);
275 server = slist->servers[i].server;
276 if (server->probe.responded)
278 if (atomic_read(&server->probe_outstanding))
293 server = slist->servers[i].server;
294 rtt_s = READ_ONCE(server->rtt);
295 if (test_bit(AFS_SERVER_FL_RESPONDING, &server->flags) &&
301 remove_wait_queue(&server->probe_wq, &waits[i]);
328 * Dispatch a probe to a server.
330 static void afs_dispatch_fs_probe(struct afs_net *net, struct afs_server *server, bool all)
338 list_del_init(&server->probe_link);
340 afs_get_server(server, afs_server_trace_get_probe);
343 afs_fs_probe_fileserver(net, server, key, all);
344 afs_put_server(net, server, afs_server_trace_put_probe);
348 * Probe a server immediately without waiting for its due time to come
351 void afs_probe_fileserver(struct afs_net *net, struct afs_server *server)
354 if (!list_empty(&server->probe_link))
355 return afs_dispatch_fs_probe(net, server, true);
365 struct afs_server *fast, *slow, *server;
385 fast = slow = server = NULL;
410 server = fast ?: slow;
411 if (server)
412 _debug("probe %pU", &server->uuid);
414 if (server && (first_pass || !need_resched())) {
415 afs_dispatch_fs_probe(net, server, server == fast);
422 if (server) {
439 int afs_wait_for_one_fs_probe(struct afs_server *server, bool is_intr)
444 if (atomic_read(&server->probe_outstanding) == 0)
449 prepare_to_wait_event(&server->probe_wq, &wait,
452 server->probe.responded ||
453 atomic_read(&server->probe_outstanding) == 0 ||
459 finish_wait(&server->probe_wq, &wait);
462 if (server->probe.responded)