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