Lines Matching refs:server
27 #define afs_breakring_space(server) \ argument
28 CIRC_SPACE((server)->cb_break_head, (server)->cb_break_tail, \
29 ARRAY_SIZE((server)->cb_break))
38 void afs_init_callback_state(struct afs_server *server) in afs_init_callback_state() argument
42 _enter("{%p}", server); in afs_init_callback_state()
44 spin_lock(&server->cb_lock); in afs_init_callback_state()
47 while (!RB_EMPTY_ROOT(&server->cb_promises)) { in afs_init_callback_state()
48 vnode = rb_entry(server->cb_promises.rb_node, in afs_init_callback_state()
52 rb_erase(&vnode->cb_promise, &server->cb_promises); in afs_init_callback_state()
56 spin_unlock(&server->cb_lock); in afs_init_callback_state()
110 static void afs_break_callback(struct afs_server *server, in afs_break_callback() argument
122 spin_lock(&server->cb_lock); in afs_break_callback()
124 rb_erase(&vnode->cb_promise, &server->cb_promises); in afs_break_callback()
127 spin_unlock(&server->cb_lock); in afs_break_callback()
143 static void afs_break_one_callback(struct afs_server *server, in afs_break_one_callback() argument
150 spin_lock(&server->fs_lock); in afs_break_one_callback()
151 p = server->fs_vnodes.rb_node; in afs_break_one_callback()
174 spin_unlock(&server->fs_lock); in afs_break_one_callback()
180 ASSERTCMP(server, ==, vnode->server); in afs_break_one_callback()
184 spin_unlock(&server->fs_lock); in afs_break_one_callback()
186 afs_break_callback(server, vnode); in afs_break_one_callback()
194 void afs_break_callbacks(struct afs_server *server, size_t count, in afs_break_callbacks() argument
197 _enter("%p,%zu,", server, count); in afs_break_callbacks()
199 ASSERT(server != NULL); in afs_break_callbacks()
211 afs_break_one_callback(server, &callbacks->fid); in afs_break_callbacks()
222 static void afs_do_give_up_callback(struct afs_server *server, in afs_do_give_up_callback() argument
227 _enter("%p,%p", server, vnode); in afs_do_give_up_callback()
229 cb = &server->cb_break[server->cb_break_head]; in afs_do_give_up_callback()
235 server->cb_break_head = in afs_do_give_up_callback()
236 (server->cb_break_head + 1) & in afs_do_give_up_callback()
237 (ARRAY_SIZE(server->cb_break) - 1); in afs_do_give_up_callback()
241 switch (atomic_inc_return(&server->cb_break_n)) { in afs_do_give_up_callback()
244 &server->cb_break_work, HZ * 2); in afs_do_give_up_callback()
247 afs_flush_callback_breaks(server); in afs_do_give_up_callback()
253 ASSERT(server->cb_promises.rb_node != NULL); in afs_do_give_up_callback()
254 rb_erase(&vnode->cb_promise, &server->cb_promises); in afs_do_give_up_callback()
264 struct afs_server *server = vnode->server; in afs_discard_callback_on_delete() local
273 ASSERT(server != NULL); in afs_discard_callback_on_delete()
275 spin_lock(&server->cb_lock); in afs_discard_callback_on_delete()
277 ASSERT(server->cb_promises.rb_node != NULL); in afs_discard_callback_on_delete()
278 rb_erase(&vnode->cb_promise, &server->cb_promises); in afs_discard_callback_on_delete()
281 spin_unlock(&server->cb_lock); in afs_discard_callback_on_delete()
291 struct afs_server *server = vnode->server; in afs_give_up_callback() local
304 ASSERT(server != NULL); in afs_give_up_callback()
306 spin_lock(&server->cb_lock); in afs_give_up_callback()
307 if (vnode->cb_promised && afs_breakring_space(server) == 0) { in afs_give_up_callback()
308 add_wait_queue(&server->cb_break_waitq, &myself); in afs_give_up_callback()
312 afs_breakring_space(server) != 0) in afs_give_up_callback()
314 spin_unlock(&server->cb_lock); in afs_give_up_callback()
316 spin_lock(&server->cb_lock); in afs_give_up_callback()
318 remove_wait_queue(&server->cb_break_waitq, &myself); in afs_give_up_callback()
325 afs_do_give_up_callback(server, vnode); in afs_give_up_callback()
327 spin_unlock(&server->cb_lock); in afs_give_up_callback()
336 struct afs_server *server = in afs_dispatch_give_up_callbacks() local
346 afs_fs_give_up_callbacks(server, &afs_async_call); in afs_dispatch_give_up_callbacks()
352 void afs_flush_callback_breaks(struct afs_server *server) in afs_flush_callback_breaks() argument
354 cancel_delayed_work(&server->cb_break_work); in afs_flush_callback_breaks()
356 &server->cb_break_work, 0); in afs_flush_callback_breaks()
365 struct afs_server *server;
371 server = container_of(work, struct afs_server, updater);
378 spin_lock(&server->cb_lock);
380 if (RB_EMPTY_ROOT(&server->cb_promises)) {
381 spin_unlock(&server->cb_lock);
386 vnode = rb_entry(rb_first(&server->cb_promises),
390 rb_erase(&vnode->cb_promise, &server->cb_promises);
398 spin_unlock(&server->cb_lock);
405 spin_unlock(&server->cb_lock);
431 spin_lock(&server->cb_lock);
433 if (!list_empty(&server->cb_promises)) {
438 xvnode = list_entry(server->cb_promises.prev,
442 xvnode = list_entry(server->cb_promises.next,
451 list_add_tail(&vnode->update, &server->cb_promises);
456 spin_unlock(&server->cb_lock);