Lines Matching refs:server
32 static int afs_install_server(struct afs_server *server) in afs_install_server() argument
38 _enter("%p", server); in afs_install_server()
49 if (server->addr.s_addr < xserver->addr.s_addr) in afs_install_server()
51 else if (server->addr.s_addr > xserver->addr.s_addr) in afs_install_server()
57 rb_link_node(&server->master_rb, p, pp); in afs_install_server()
58 rb_insert_color(&server->master_rb, &afs_servers); in afs_install_server()
72 struct afs_server *server; in afs_alloc_server() local
76 server = kzalloc(sizeof(struct afs_server), GFP_KERNEL); in afs_alloc_server()
77 if (server) { in afs_alloc_server()
78 atomic_set(&server->usage, 1); in afs_alloc_server()
79 server->cell = cell; in afs_alloc_server()
81 INIT_LIST_HEAD(&server->link); in afs_alloc_server()
82 INIT_LIST_HEAD(&server->grave); in afs_alloc_server()
83 init_rwsem(&server->sem); in afs_alloc_server()
84 spin_lock_init(&server->fs_lock); in afs_alloc_server()
85 server->fs_vnodes = RB_ROOT; in afs_alloc_server()
86 server->cb_promises = RB_ROOT; in afs_alloc_server()
87 spin_lock_init(&server->cb_lock); in afs_alloc_server()
88 init_waitqueue_head(&server->cb_break_waitq); in afs_alloc_server()
89 INIT_DELAYED_WORK(&server->cb_break_work, in afs_alloc_server()
92 memcpy(&server->addr, addr, sizeof(struct in_addr)); in afs_alloc_server()
93 server->addr.s_addr = addr->s_addr; in afs_alloc_server()
94 _leave(" = %p{%d}", server, atomic_read(&server->usage)); in afs_alloc_server()
98 return server; in afs_alloc_server()
107 struct afs_server *server, *candidate; in afs_lookup_server() local
114 list_for_each_entry(server, &cell->servers, link) { in afs_lookup_server()
115 if (server->addr.s_addr == addr->s_addr) in afs_lookup_server()
129 list_for_each_entry(server, &cell->servers, link) { in afs_lookup_server()
130 if (server->addr.s_addr == addr->s_addr) in afs_lookup_server()
135 server = candidate; in afs_lookup_server()
136 if (afs_install_server(server) < 0) in afs_lookup_server()
140 list_add_tail(&server->link, &cell->servers); in afs_lookup_server()
143 _leave(" = %p{%d}", server, atomic_read(&server->usage)); in afs_lookup_server()
144 return server; in afs_lookup_server()
149 afs_get_server(server); in afs_lookup_server()
152 if (!list_empty(&server->grave)) { in afs_lookup_server()
154 list_del_init(&server->grave); in afs_lookup_server()
157 _leave(" = %p{%d}", server, atomic_read(&server->usage)); in afs_lookup_server()
158 return server; in afs_lookup_server()
163 afs_get_server(server); in afs_lookup_server()
183 struct afs_server *server = NULL; in afs_find_server() local
193 server = rb_entry(p, struct afs_server, master_rb); in afs_find_server()
197 if (addr.s_addr < server->addr.s_addr) { in afs_find_server()
199 } else if (addr.s_addr > server->addr.s_addr) { in afs_find_server()
202 afs_get_server(server); in afs_find_server()
207 server = NULL; in afs_find_server()
210 ASSERTIFCMP(server, server->addr.s_addr, ==, addr.s_addr); in afs_find_server()
211 _leave(" = %p", server); in afs_find_server()
212 return server; in afs_find_server()
219 void afs_put_server(struct afs_server *server) in afs_put_server() argument
221 if (!server) in afs_put_server()
224 _enter("%p{%d}", server, atomic_read(&server->usage)); in afs_put_server()
226 _debug("PUT SERVER %d", atomic_read(&server->usage)); in afs_put_server()
228 ASSERTCMP(atomic_read(&server->usage), >, 0); in afs_put_server()
230 if (likely(!atomic_dec_and_test(&server->usage))) { in afs_put_server()
235 afs_flush_callback_breaks(server); in afs_put_server()
238 if (atomic_read(&server->usage) == 0) { in afs_put_server()
239 list_move_tail(&server->grave, &afs_server_graveyard); in afs_put_server()
240 server->time_of_death = get_seconds(); in afs_put_server()
251 static void afs_destroy_server(struct afs_server *server) in afs_destroy_server() argument
253 _enter("%p", server); in afs_destroy_server()
255 ASSERTIF(server->cb_break_head != server->cb_break_tail, in afs_destroy_server()
256 delayed_work_pending(&server->cb_break_work)); in afs_destroy_server()
258 ASSERTCMP(server->fs_vnodes.rb_node, ==, NULL); in afs_destroy_server()
259 ASSERTCMP(server->cb_promises.rb_node, ==, NULL); in afs_destroy_server()
260 ASSERTCMP(server->cb_break_head, ==, server->cb_break_tail); in afs_destroy_server()
261 ASSERTCMP(atomic_read(&server->cb_break_n), ==, 0); in afs_destroy_server()
263 afs_put_cell(server->cell); in afs_destroy_server()
264 kfree(server); in afs_destroy_server()
273 struct afs_server *server; in afs_reap_server() local
281 server = list_entry(afs_server_graveyard.next, in afs_reap_server()
285 expiry = server->time_of_death + afs_server_timeout; in afs_reap_server()
292 write_lock(&server->cell->servers_lock); in afs_reap_server()
294 if (atomic_read(&server->usage) > 0) { in afs_reap_server()
295 list_del_init(&server->grave); in afs_reap_server()
297 list_move_tail(&server->grave, &corpses); in afs_reap_server()
298 list_del_init(&server->link); in afs_reap_server()
299 rb_erase(&server->master_rb, &afs_servers); in afs_reap_server()
302 write_unlock(&server->cell->servers_lock); in afs_reap_server()
309 server = list_entry(corpses.next, struct afs_server, grave); in afs_reap_server()
310 list_del(&server->grave); in afs_reap_server()
311 afs_destroy_server(server); in afs_reap_server()