X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=fs%2Fafs%2Fcallback.c;h=a78d5b236bb1685ffe5e3eaf36ee3e2ccd6db28b;hb=867a89e0b73af48838c7987e80899a1ff26dd6ff;hp=639399f0ab6f229ab26c89b68458610ae92f552b;hpb=6b06d2cc6d52830e3e0c001006b26255f47184dd;p=linux-2.6 diff --git a/fs/afs/callback.c b/fs/afs/callback.c index 639399f0ab..a78d5b236b 100644 --- a/fs/afs/callback.c +++ b/fs/afs/callback.c @@ -17,9 +17,12 @@ #include #include #include +#include #include "internal.h" +#if 0 unsigned afs_vnode_update_timeout = 10; +#endif /* 0 */ #define afs_breakring_space(server) \ CIRC_SPACE((server)->cb_break_head, (server)->cb_break_tail, \ @@ -44,7 +47,7 @@ void afs_init_callback_state(struct afs_server *server) while (!RB_EMPTY_ROOT(&server->cb_promises)) { vnode = rb_entry(server->cb_promises.rb_node, struct afs_vnode, cb_promise); - _debug("UNPROMISE { vid=%x vn=%u uq=%u}", + _debug("UNPROMISE { vid=%x:%u uq=%u}", vnode->fid.vid, vnode->fid.vnode, vnode->fid.unique); rb_erase(&vnode->cb_promise, &server->cb_promises); vnode->cb_promised = false; @@ -84,11 +87,8 @@ void afs_broken_callback_work(struct work_struct *work) /* if the vnode's data version number changed then its contents * are different */ - if (test_and_clear_bit(AFS_VNODE_ZAP_DATA, &vnode->flags)) { - _debug("zap data {%x:%u}", - vnode->fid.vid, vnode->fid.vnode); - invalidate_remote_inode(&vnode->vfs_inode); - } + if (test_and_clear_bit(AFS_VNODE_ZAP_DATA, &vnode->flags)) + afs_zap_data(vnode); } out: @@ -127,6 +127,9 @@ static void afs_break_callback(struct afs_server *server, spin_unlock(&server->cb_lock); queue_work(afs_callback_update_worker, &vnode->cb_broken_work); + if (list_empty(&vnode->granted_locks) && + !list_empty(&vnode->pending_locks)) + afs_lock_may_be_available(vnode); spin_unlock(&vnode->lock); } } @@ -468,7 +471,7 @@ int __init afs_callback_update_init(void) /* * shut down the callback update process */ -void __exit afs_callback_update_kill(void) +void afs_callback_update_kill(void) { destroy_workqueue(afs_callback_update_worker); }