Lines Matching refs:fl
17 static void afs_fl_copy_lock(struct file_lock *new, struct file_lock *fl);
18 static void afs_fl_release_private(struct file_lock *fl);
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()
88 if (fl->fl_type == F_RDLCK) { in afs_grant_locks()
110 struct file_lock *fl; in afs_lock_work() local
144 fl = list_entry(vnode->granted_locks.next, in afs_lock_work()
146 key = key_get(fl->fl_file->private_data); in afs_lock_work()
178 fl = list_entry(vnode->pending_locks.next, in afs_lock_work()
180 key = key_get(fl->fl_file->private_data); in afs_lock_work()
181 type = (fl->fl_type == F_RDLCK) ? in afs_lock_work()
203 struct file_lock, fl_u.afs.link) == fl) { in afs_lock_work()
204 fl->fl_u.afs.state = ret; in afs_lock_work()
206 afs_grant_locks(vnode, fl); in afs_lock_work()
208 list_del_init(&fl->fl_u.afs.link); in afs_lock_work()
209 wake_up(&fl->fl_wait); in afs_lock_work()
253 static int afs_do_setlk(struct file *file, struct file_lock *fl) in afs_do_setlk() argument
261 _enter("{%x:%u},%u", vnode->fid.vid, vnode->fid.vnode, fl->fl_type); in afs_do_setlk()
264 if (fl->fl_start != 0 || fl->fl_end != OFFSET_MAX) in afs_do_setlk()
271 fl->fl_ops = &afs_lock_ops; in afs_do_setlk()
272 INIT_LIST_HEAD(&fl->fl_u.afs.link); in afs_do_setlk()
273 fl->fl_u.afs.state = AFS_LOCK_PENDING; in afs_do_setlk()
275 type = (fl->fl_type == F_RDLCK) ? AFS_LOCK_READ : AFS_LOCK_WRITE; in afs_do_setlk()
285 if (vnode->status.lock_count != 0 && !(fl->fl_flags & FL_SLEEP)) { in afs_do_setlk()
314 list_add_tail(&fl->fl_u.afs.link, &vnode->pending_locks); in afs_do_setlk()
329 &fl->fl_u.afs.link); in afs_do_setlk()
333 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
341 list_add_tail(&fl->fl_u.afs.link, &vnode->pending_locks); in afs_do_setlk()
343 if (!(fl->fl_flags & FL_SLEEP)) { in afs_do_setlk()
353 ret = wait_event_interruptible(fl->fl_wait, in afs_do_setlk()
354 fl->fl_u.afs.state <= AFS_LOCK_GRANTED); in afs_do_setlk()
355 if (fl->fl_u.afs.state <= AFS_LOCK_GRANTED) { in afs_do_setlk()
356 ret = fl->fl_u.afs.state; in afs_do_setlk()
369 if (fl->fl_u.afs.state <= AFS_LOCK_GRANTED) { in afs_do_setlk()
370 ret = fl->fl_u.afs.state; 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()
386 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
390 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
406 fl->fl_u.afs.state = AFS_LOCK_GRANTED; in afs_do_setlk()
407 list_move_tail(&fl->fl_u.afs.link, &vnode->granted_locks); in afs_do_setlk()
413 ret = posix_lock_file(file, fl, NULL); in afs_do_setlk()
432 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
441 static int afs_do_unlk(struct file *file, struct file_lock *fl) in afs_do_unlk() argument
447 _enter("{%x:%u},%u", vnode->fid.vid, vnode->fid.vnode, fl->fl_type); in afs_do_unlk()
450 if (fl->fl_start != 0 || fl->fl_end != OFFSET_MAX) in afs_do_unlk()
453 fl->fl_ops = &afs_lock_ops; in afs_do_unlk()
454 INIT_LIST_HEAD(&fl->fl_u.afs.link); in afs_do_unlk()
455 fl->fl_u.afs.state = AFS_LOCK_PENDING; in afs_do_unlk()
458 ret = posix_lock_file(file, fl, NULL); in afs_do_unlk()
476 static int afs_do_getlk(struct file *file, struct file_lock *fl) in afs_do_getlk() argument
484 fl->fl_type = F_UNLCK; in afs_do_getlk()
490 posix_test_lock(file, fl); in afs_do_getlk()
491 if (fl->fl_type == F_UNLCK) { in afs_do_getlk()
499 fl->fl_type = F_RDLCK; in afs_do_getlk()
501 fl->fl_type = F_WRLCK; in afs_do_getlk()
502 fl->fl_start = 0; in afs_do_getlk()
503 fl->fl_end = OFFSET_MAX; in afs_do_getlk()
509 _leave(" = %d [%hd]", ret, fl->fl_type); in afs_do_getlk()
516 int afs_lock(struct file *file, int cmd, struct file_lock *fl) in afs_lock() argument
522 fl->fl_type, fl->fl_flags, in afs_lock()
523 (long long) fl->fl_start, (long long) fl->fl_end); in afs_lock()
526 if (__mandatory_lock(&vnode->vfs_inode) && fl->fl_type != F_UNLCK) in afs_lock()
530 return afs_do_getlk(file, fl); in afs_lock()
531 if (fl->fl_type == F_UNLCK) in afs_lock()
532 return afs_do_unlk(file, fl); in afs_lock()
533 return afs_do_setlk(file, fl); in afs_lock()
539 int afs_flock(struct file *file, int cmd, struct file_lock *fl) in afs_flock() argument
545 fl->fl_type, fl->fl_flags); in afs_flock()
554 if (!(fl->fl_flags & FL_FLOCK)) in afs_flock()
558 if (fl->fl_type == F_UNLCK) in afs_flock()
559 return afs_do_unlk(file, fl); in afs_flock()
560 return afs_do_setlk(file, fl); in afs_flock()
569 static void afs_fl_copy_lock(struct file_lock *new, struct file_lock *fl) in afs_fl_copy_lock() argument
573 list_add(&new->fl_u.afs.link, &fl->fl_u.afs.link); in afs_fl_copy_lock()
580 static void afs_fl_release_private(struct file_lock *fl) in afs_fl_release_private() argument
584 list_del_init(&fl->fl_u.afs.link); in afs_fl_release_private()