• Home
  • Raw
  • Download

Lines Matching refs:vnode

61 void afs_lock_may_be_available(struct afs_vnode *vnode)  in afs_lock_may_be_available()  argument
63 _enter("{%x:%u}", vnode->fid.vid, vnode->fid.vnode); in afs_lock_may_be_available()
65 queue_delayed_work(afs_lock_manager, &vnode->lock_work, 0); in afs_lock_may_be_available()
72 static void afs_schedule_lock_extension(struct afs_vnode *vnode) in afs_schedule_lock_extension() argument
74 queue_delayed_work(afs_lock_manager, &vnode->lock_work, in afs_schedule_lock_extension()
83 static void afs_grant_locks(struct afs_vnode *vnode, struct file_lock *fl) in afs_grant_locks() argument
87 list_move_tail(&fl->fl_u.afs.link, &vnode->granted_locks); in afs_grant_locks()
89 list_for_each_entry_safe(p, _p, &vnode->pending_locks, in afs_grant_locks()
94 &vnode->granted_locks); in afs_grant_locks()
108 struct afs_vnode *vnode = in afs_lock_work() local
115 _enter("{%x:%u}", vnode->fid.vid, vnode->fid.vnode); in afs_lock_work()
117 spin_lock(&vnode->lock); in afs_lock_work()
119 if (test_bit(AFS_VNODE_UNLOCKING, &vnode->flags)) { in afs_lock_work()
121 spin_unlock(&vnode->lock); in afs_lock_work()
125 ret = afs_vnode_release_lock(vnode, vnode->unlock_key); in afs_lock_work()
129 vnode->fid.vid, vnode->fid.vnode, ret); in afs_lock_work()
131 spin_lock(&vnode->lock); in afs_lock_work()
132 key_put(vnode->unlock_key); in afs_lock_work()
133 vnode->unlock_key = NULL; in afs_lock_work()
134 clear_bit(AFS_VNODE_UNLOCKING, &vnode->flags); in afs_lock_work()
139 if (!list_empty(&vnode->granted_locks)) { in afs_lock_work()
142 if (test_and_set_bit(AFS_VNODE_LOCKING, &vnode->flags)) in afs_lock_work()
144 fl = list_entry(vnode->granted_locks.next, in afs_lock_work()
147 spin_unlock(&vnode->lock); in afs_lock_work()
149 ret = afs_vnode_extend_lock(vnode, key); in afs_lock_work()
150 clear_bit(AFS_VNODE_LOCKING, &vnode->flags); in afs_lock_work()
154 afs_schedule_lock_extension(vnode); in afs_lock_work()
161 vnode->fid.vid, vnode->fid.vnode, ret); in afs_lock_work()
162 queue_delayed_work(afs_lock_manager, &vnode->lock_work, in afs_lock_work()
173 if (!list_empty(&vnode->pending_locks)) { in afs_lock_work()
176 if (test_and_set_bit(AFS_VNODE_LOCKING, &vnode->flags)) in afs_lock_work()
178 fl = list_entry(vnode->pending_locks.next, in afs_lock_work()
183 spin_unlock(&vnode->lock); in afs_lock_work()
185 ret = afs_vnode_set_lock(vnode, key, type); in afs_lock_work()
186 clear_bit(AFS_VNODE_LOCKING, &vnode->flags); in afs_lock_work()
194 set_bit(AFS_VNODE_READLOCKED, &vnode->flags); in afs_lock_work()
196 set_bit(AFS_VNODE_WRITELOCKED, &vnode->flags); in afs_lock_work()
199 spin_lock(&vnode->lock); in afs_lock_work()
202 if (list_entry(vnode->pending_locks.next, in afs_lock_work()
206 afs_grant_locks(vnode, fl); in afs_lock_work()
210 spin_unlock(&vnode->lock); in afs_lock_work()
213 clear_bit(AFS_VNODE_READLOCKED, &vnode->flags); in afs_lock_work()
214 clear_bit(AFS_VNODE_WRITELOCKED, &vnode->flags); in afs_lock_work()
215 spin_unlock(&vnode->lock); in afs_lock_work()
216 afs_vnode_release_lock(vnode, key); in afs_lock_work()
217 if (!list_empty(&vnode->pending_locks)) in afs_lock_work()
218 afs_lock_may_be_available(vnode); in afs_lock_work()
228 spin_unlock(&vnode->lock); in afs_lock_work()
238 static void afs_defer_unlock(struct afs_vnode *vnode, struct key *key) in afs_defer_unlock() argument
240 cancel_delayed_work(&vnode->lock_work); in afs_defer_unlock()
241 if (!test_and_clear_bit(AFS_VNODE_READLOCKED, &vnode->flags) && in afs_defer_unlock()
242 !test_and_clear_bit(AFS_VNODE_WRITELOCKED, &vnode->flags)) in afs_defer_unlock()
244 if (test_and_set_bit(AFS_VNODE_UNLOCKING, &vnode->flags)) in afs_defer_unlock()
246 vnode->unlock_key = key_get(key); in afs_defer_unlock()
247 afs_lock_may_be_available(vnode); in afs_defer_unlock()
256 struct afs_vnode *vnode = AFS_FS_I(inode); in afs_do_setlk() local
261 _enter("{%x:%u},%u", vnode->fid.vid, vnode->fid.vnode, fl->fl_type); in afs_do_setlk()
281 ret = afs_vnode_fetch_status(vnode, NULL, key); in afs_do_setlk()
285 if (vnode->status.lock_count != 0 && !(fl->fl_flags & FL_SLEEP)) { in afs_do_setlk()
290 spin_lock(&vnode->lock); in afs_do_setlk()
296 vnode->flags & (1 << AFS_VNODE_READLOCKED)) { in afs_do_setlk()
298 ASSERTCMP(vnode->flags & in afs_do_setlk()
301 ASSERT(!list_empty(&vnode->granted_locks)); in afs_do_setlk()
307 if (list_empty(&vnode->pending_locks) && in afs_do_setlk()
308 list_empty(&vnode->granted_locks)) { in afs_do_setlk()
310 ASSERTCMP(vnode->flags & in afs_do_setlk()
314 list_add_tail(&fl->fl_u.afs.link, &vnode->pending_locks); in afs_do_setlk()
315 set_bit(AFS_VNODE_LOCKING, &vnode->flags); in afs_do_setlk()
316 spin_unlock(&vnode->lock); in afs_do_setlk()
318 ret = afs_vnode_set_lock(vnode, key, type); in afs_do_setlk()
319 clear_bit(AFS_VNODE_LOCKING, &vnode->flags); in afs_do_setlk()
326 spin_lock(&vnode->lock); in afs_do_setlk()
327 ASSERT(list_empty(&vnode->granted_locks)); in afs_do_setlk()
328 ASSERTCMP(vnode->pending_locks.next, ==, in afs_do_setlk()
332 spin_lock(&vnode->lock); in afs_do_setlk()
334 spin_unlock(&vnode->lock); in afs_do_setlk()
341 list_add_tail(&fl->fl_u.afs.link, &vnode->pending_locks); in afs_do_setlk()
348 spin_unlock(&vnode->lock); in afs_do_setlk()
359 spin_lock(&vnode->lock); in afs_do_setlk()
368 spin_lock(&vnode->lock); in afs_do_setlk()
372 spin_unlock(&vnode->lock); in afs_do_setlk()
382 if (list_empty(&vnode->granted_locks) && in afs_do_setlk()
383 vnode->pending_locks.next == &fl->fl_u.afs.link) { in afs_do_setlk()
384 if (vnode->pending_locks.prev != &fl->fl_u.afs.link) { in afs_do_setlk()
387 afs_lock_may_be_available(vnode); in afs_do_setlk()
392 spin_unlock(&vnode->lock); in afs_do_setlk()
398 spin_lock(&vnode->lock); in afs_do_setlk()
399 afs_schedule_lock_extension(vnode); in afs_do_setlk()
401 set_bit(AFS_VNODE_READLOCKED, &vnode->flags); in afs_do_setlk()
403 set_bit(AFS_VNODE_WRITELOCKED, &vnode->flags); in afs_do_setlk()
407 list_move_tail(&fl->fl_u.afs.link, &vnode->granted_locks); in afs_do_setlk()
410 ASSERT(!(vnode->flags & (1 << AFS_VNODE_LOCKING))); in afs_do_setlk()
411 ASSERT((vnode->flags & ((1 << AFS_VNODE_READLOCKED) | in afs_do_setlk()
416 spin_unlock(&vnode->lock); in afs_do_setlk()
421 afs_vnode_fetch_status(vnode, NULL, key); in afs_do_setlk()
433 if (list_empty(&vnode->granted_locks)) in afs_do_setlk()
434 afs_defer_unlock(vnode, key); in afs_do_setlk()
443 struct afs_vnode *vnode = AFS_FS_I(file->f_mapping->host); in afs_do_unlk() local
447 _enter("{%x:%u},%u", vnode->fid.vid, vnode->fid.vnode, fl->fl_type); in afs_do_unlk()
457 spin_lock(&vnode->lock); in afs_do_unlk()
460 spin_unlock(&vnode->lock); in afs_do_unlk()
466 if (list_empty(&vnode->granted_locks)) in afs_do_unlk()
467 afs_defer_unlock(vnode, key); in afs_do_unlk()
468 spin_unlock(&vnode->lock); in afs_do_unlk()
478 struct afs_vnode *vnode = AFS_FS_I(file->f_mapping->host); in afs_do_getlk() local
486 inode_lock(&vnode->vfs_inode); in afs_do_getlk()
493 ret = afs_vnode_fetch_status(vnode, NULL, key); in afs_do_getlk()
496 lock_count = vnode->status.lock_count; in afs_do_getlk()
508 inode_unlock(&vnode->vfs_inode); in afs_do_getlk()
518 struct afs_vnode *vnode = AFS_FS_I(file_inode(file)); in afs_lock() local
521 vnode->fid.vid, vnode->fid.vnode, cmd, in afs_lock()
526 if (__mandatory_lock(&vnode->vfs_inode) && fl->fl_type != F_UNLCK) in afs_lock()
541 struct afs_vnode *vnode = AFS_FS_I(file_inode(file)); in afs_flock() local
544 vnode->fid.vid, vnode->fid.vnode, cmd, in afs_flock()