Lines Matching refs:server
37 struct afs_server *server = NULL; in afs_find_server() local
50 if (server) in afs_find_server()
51 afs_put_server(net, server, afs_server_trace_put_find_rsq); in afs_find_server()
52 server = NULL; in afs_find_server()
56 hlist_for_each_entry_rcu(server, &net->fs_addresses6, addr6_link) { in afs_find_server()
57 alist = rcu_dereference(server->addresses); in afs_find_server()
71 hlist_for_each_entry_rcu(server, &net->fs_addresses4, addr4_link) { in afs_find_server()
72 alist = rcu_dereference(server->addresses); in afs_find_server()
86 server = NULL; in afs_find_server()
88 if (server && !atomic_inc_not_zero(&server->usage)) in afs_find_server()
89 server = NULL; in afs_find_server()
96 return server; in afs_find_server()
104 struct afs_server *server = NULL; in afs_find_server_by_uuid() local
115 if (server) in afs_find_server_by_uuid()
116 afs_put_server(net, server, afs_server_trace_put_uuid_rsq); in afs_find_server_by_uuid()
117 server = NULL; in afs_find_server_by_uuid()
123 server = rb_entry(p, struct afs_server, uuid_rb); in afs_find_server_by_uuid()
125 diff = memcmp(uuid, &server->uuid, sizeof(*uuid)); in afs_find_server_by_uuid()
131 afs_get_server(server, afs_server_trace_get_by_uuid); in afs_find_server_by_uuid()
135 server = NULL; in afs_find_server_by_uuid()
141 _leave(" = %p", server); in afs_find_server_by_uuid()
142 return server; in afs_find_server_by_uuid()
152 struct afs_server *server; in afs_install_server() local
166 server = rb_entry(p, struct afs_server, uuid_rb); in afs_install_server()
167 diff = memcmp(&candidate->uuid, &server->uuid, sizeof(uuid_t)); in afs_install_server()
176 server = candidate; in afs_install_server()
177 rb_link_node(&server->uuid_rb, p, pp); in afs_install_server()
178 rb_insert_color(&server->uuid_rb, &net->fs_servers); in afs_install_server()
179 hlist_add_head_rcu(&server->proc_link, &net->fs_proc); in afs_install_server()
182 alist = rcu_dereference_protected(server->addresses, in afs_install_server()
194 hlist_add_head_rcu(&server->addr4_link, &net->fs_addresses4); in afs_install_server()
196 hlist_add_head_rcu(&server->addr6_link, &net->fs_addresses6); in afs_install_server()
202 afs_get_server(server, afs_server_trace_get_install); in afs_install_server()
204 return server; in afs_install_server()
214 struct afs_server *server; in afs_alloc_server() local
218 server = kzalloc(sizeof(struct afs_server), GFP_KERNEL); in afs_alloc_server()
219 if (!server) in afs_alloc_server()
222 atomic_set(&server->usage, 1); in afs_alloc_server()
223 server->debug_id = atomic_inc_return(&afs_server_debug_id); in afs_alloc_server()
224 RCU_INIT_POINTER(server->addresses, alist); in afs_alloc_server()
225 server->addr_version = alist->version; in afs_alloc_server()
226 server->uuid = *uuid; in afs_alloc_server()
227 server->update_at = ktime_get_real_seconds() + afs_server_update_delay; in afs_alloc_server()
228 rwlock_init(&server->fs_lock); in afs_alloc_server()
229 INIT_HLIST_HEAD(&server->cb_volumes); in afs_alloc_server()
230 rwlock_init(&server->cb_break_lock); in afs_alloc_server()
231 init_waitqueue_head(&server->probe_wq); in afs_alloc_server()
232 spin_lock_init(&server->probe_lock); in afs_alloc_server()
235 trace_afs_server(server, 1, afs_server_trace_alloc); in afs_alloc_server()
236 _leave(" = %p", server); in afs_alloc_server()
237 return server; in afs_alloc_server()
257 if (test_bit(AFS_VLSERVER_FL_IS_YFS, &vc.server->flags)) in afs_vl_lookup_addrs()
276 struct afs_server *server, *candidate; in afs_lookup_server() local
280 server = afs_find_server_by_uuid(cell->net, uuid); in afs_lookup_server()
281 if (server) in afs_lookup_server()
282 return server; in afs_lookup_server()
294 server = afs_install_server(cell->net, candidate); in afs_lookup_server()
295 if (server != candidate) { in afs_lookup_server()
300 _leave(" = %p{%d}", server, atomic_read(&server->usage)); in afs_lookup_server()
301 return server; in afs_lookup_server()
333 struct afs_server *afs_get_server(struct afs_server *server, in afs_get_server() argument
336 unsigned int u = atomic_inc_return(&server->usage); in afs_get_server()
338 trace_afs_server(server, u, reason); in afs_get_server()
339 return server; in afs_get_server()
345 void afs_put_server(struct afs_net *net, struct afs_server *server, in afs_put_server() argument
350 if (!server) in afs_put_server()
353 server->put_time = ktime_get_real_seconds(); in afs_put_server()
355 usage = atomic_dec_return(&server->usage); in afs_put_server()
357 trace_afs_server(server, usage, reason); in afs_put_server()
367 struct afs_server *server = container_of(rcu, struct afs_server, rcu); in afs_server_rcu() local
369 trace_afs_server(server, atomic_read(&server->usage), in afs_server_rcu()
371 afs_put_addrlist(rcu_access_pointer(server->addresses)); in afs_server_rcu()
372 kfree(server); in afs_server_rcu()
378 static void afs_destroy_server(struct afs_net *net, struct afs_server *server) in afs_destroy_server() argument
380 struct afs_addr_list *alist = rcu_access_pointer(server->addresses); in afs_destroy_server()
387 trace_afs_server(server, atomic_read(&server->usage), in afs_destroy_server()
390 if (test_bit(AFS_SERVER_FL_MAY_HAVE_CB, &server->flags)) in afs_destroy_server()
391 afs_fs_give_up_all_callbacks(net, server, &ac, NULL); in afs_destroy_server()
393 wait_var_event(&server->probe_outstanding, in afs_destroy_server()
394 atomic_read(&server->probe_outstanding) == 0); in afs_destroy_server()
396 trace_afs_server(server, atomic_read(&server->usage), in afs_destroy_server()
398 call_rcu(&server->rcu, afs_server_rcu); in afs_destroy_server()
407 struct afs_server *server; in afs_gc_servers() local
411 while ((server = gc_list)) { in afs_gc_servers()
412 gc_list = server->gc_next; in afs_gc_servers()
416 deleted = atomic_try_cmpxchg(&server->usage, &usage, 0); in afs_gc_servers()
417 trace_afs_server(server, usage, afs_server_trace_gc); in afs_gc_servers()
419 rb_erase(&server->uuid_rb, &net->fs_servers); in afs_gc_servers()
420 hlist_del_rcu(&server->proc_link); in afs_gc_servers()
426 if (!hlist_unhashed(&server->addr4_link)) in afs_gc_servers()
427 hlist_del_rcu(&server->addr4_link); in afs_gc_servers()
428 if (!hlist_unhashed(&server->addr6_link)) in afs_gc_servers()
429 hlist_del_rcu(&server->addr6_link); in afs_gc_servers()
431 afs_destroy_server(net, server); in afs_gc_servers()
459 struct afs_server *server = in afs_manage_servers() local
461 int usage = atomic_read(&server->usage); in afs_manage_servers()
463 _debug("manage %pU %u", &server->uuid, usage); in afs_manage_servers()
469 time64_t expire_at = server->put_time; in afs_manage_servers()
471 if (!test_bit(AFS_SERVER_FL_VL_FAIL, &server->flags) && in afs_manage_servers()
472 !test_bit(AFS_SERVER_FL_NOT_FOUND, &server->flags)) in afs_manage_servers()
475 server->gc_next = gc_list; in afs_manage_servers()
476 gc_list = server; in afs_manage_servers()
534 static noinline bool afs_update_server_record(struct afs_fs_cursor *fc, struct afs_server *server) in afs_update_server_record() argument
540 trace_afs_server(server, atomic_read(&server->usage), afs_server_trace_update); in afs_update_server_record()
543 &server->uuid); in afs_update_server_record()
548 server->addresses) { in afs_update_server_record()
558 if (server->addr_version != alist->version) { in afs_update_server_record()
559 write_lock(&server->fs_lock); in afs_update_server_record()
560 discard = rcu_dereference_protected(server->addresses, in afs_update_server_record()
561 lockdep_is_held(&server->fs_lock)); in afs_update_server_record()
562 rcu_assign_pointer(server->addresses, alist); in afs_update_server_record()
563 server->addr_version = alist->version; in afs_update_server_record()
564 write_unlock(&server->fs_lock); in afs_update_server_record()
567 server->update_at = ktime_get_real_seconds() + afs_server_update_delay; in afs_update_server_record()
576 bool afs_check_server_record(struct afs_fs_cursor *fc, struct afs_server *server) in afs_check_server_record() argument
585 ASSERT(server); in afs_check_server_record()
588 diff = READ_ONCE(server->update_at) - now; in afs_check_server_record()
594 if (!test_and_set_bit_lock(AFS_SERVER_FL_UPDATING, &server->flags)) { in afs_check_server_record()
595 success = afs_update_server_record(fc, server); in afs_check_server_record()
596 clear_bit_unlock(AFS_SERVER_FL_UPDATING, &server->flags); in afs_check_server_record()
597 wake_up_bit(&server->flags, AFS_SERVER_FL_UPDATING); in afs_check_server_record()
602 ret = wait_on_bit(&server->flags, AFS_SERVER_FL_UPDATING, in afs_check_server_record()
605 if (!(fc->flags & AFS_FS_CURSOR_INTR) && server->addresses) { in afs_check_server_record()