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);
451 static int afs_do_setlk(struct file *file, struct file_lock *fl) in afs_do_setlk() argument
466 fl->fl_start, fl->fl_end, fl->c.flc_type, mode); in afs_do_setlk()
468 fl->fl_ops = &afs_lock_ops; in afs_do_setlk()
469 INIT_LIST_HEAD(&fl->fl_u.afs.link); in afs_do_setlk()
470 fl->fl_u.afs.state = AFS_LOCK_PENDING; in afs_do_setlk()
472 partial = (fl->fl_start != 0 || fl->fl_end != OFFSET_MAX); in afs_do_setlk()
473 type = lock_is_read(fl) ? AFS_LOCK_READ : AFS_LOCK_WRITE; in afs_do_setlk()
481 trace_afs_flock_op(vnode, fl, afs_flock_op_set_lock); in afs_do_setlk()
498 list_add_tail(&fl->fl_u.afs.link, &vnode->pending_locks); in afs_do_setlk()
512 list_move_tail(&fl->fl_u.afs.link, &vnode->granted_locks); in afs_do_setlk()
513 fl->fl_u.afs.state = AFS_LOCK_GRANTED; in afs_do_setlk()
519 list_move_tail(&fl->fl_u.afs.link, &vnode->granted_locks); in afs_do_setlk()
520 fl->fl_u.afs.state = AFS_LOCK_GRANTED; in afs_do_setlk()
526 !(fl->c.flc_flags & FL_SLEEP)) { in afs_do_setlk()
549 trace_afs_flock_ev(vnode, fl, afs_flock_try_to_lock, 0); in afs_do_setlk()
564 fl->fl_u.afs.state = ret; in afs_do_setlk()
565 trace_afs_flock_ev(vnode, fl, afs_flock_fail_perm, ret); in afs_do_setlk()
566 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
571 fl->fl_u.afs.state = ret; in afs_do_setlk()
572 trace_afs_flock_ev(vnode, fl, afs_flock_fail_other, ret); in afs_do_setlk()
573 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
578 fl->fl_u.afs.state = ret; in afs_do_setlk()
579 trace_afs_flock_ev(vnode, fl, afs_flock_fail_other, ret); in afs_do_setlk()
580 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
590 ASSERTCMP(vnode->pending_locks.next, ==, &fl->fl_u.afs.link); in afs_do_setlk()
595 trace_afs_flock_ev(vnode, fl, afs_flock_acquired, type); in afs_do_setlk()
604 ASSERTCMP(fl->fl_u.afs.state, ==, AFS_LOCK_GRANTED); in afs_do_setlk()
608 trace_afs_flock_ev(vnode, fl, afs_flock_vfs_locking, 0); in afs_do_setlk()
609 ret = locks_lock_file_wait(file, fl); in afs_do_setlk()
610 trace_afs_flock_ev(vnode, fl, afs_flock_vfs_lock, ret); in afs_do_setlk()
623 if (!(fl->c.flc_flags & FL_SLEEP)) { in afs_do_setlk()
624 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
631 trace_afs_flock_ev(vnode, fl, afs_flock_would_block, ret); in afs_do_setlk()
642 trace_afs_flock_ev(vnode, fl, afs_flock_waiting, 0); in afs_do_setlk()
643 ret = wait_event_interruptible(fl->c.flc_wait, in afs_do_setlk()
644 fl->fl_u.afs.state != AFS_LOCK_PENDING); in afs_do_setlk()
645 trace_afs_flock_ev(vnode, fl, afs_flock_waited, ret); in afs_do_setlk()
647 if (fl->fl_u.afs.state >= 0 && fl->fl_u.afs.state != AFS_LOCK_GRANTED) { in afs_do_setlk()
650 switch (fl->fl_u.afs.state) { in afs_do_setlk()
652 fl->fl_u.afs.state = AFS_LOCK_PENDING; in afs_do_setlk()
662 fl->fl_u.afs.state = AFS_LOCK_PENDING; in afs_do_setlk()
674 if (fl->fl_u.afs.state == AFS_LOCK_GRANTED) in afs_do_setlk()
676 ret = fl->fl_u.afs.state; in afs_do_setlk()
688 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
701 static int afs_do_unlk(struct file *file, struct file_lock *fl) in afs_do_unlk() argument
707 fl->c.flc_type); in afs_do_unlk()
709 trace_afs_flock_op(vnode, fl, afs_flock_op_unlock); in afs_do_unlk()
714 ret = locks_lock_file_wait(file, fl); in afs_do_unlk()
722 static int afs_do_getlk(struct file *file, struct file_lock *fl) in afs_do_getlk() argument
733 fl->c.flc_type = F_UNLCK; in afs_do_getlk()
736 posix_test_lock(file, fl); in afs_do_getlk()
737 if (lock_is_unlock(fl)) { in afs_do_getlk()
746 fl->c.flc_type = F_RDLCK; in afs_do_getlk()
748 fl->c.flc_type = F_WRLCK; in afs_do_getlk()
749 fl->fl_start = 0; in afs_do_getlk()
750 fl->fl_end = OFFSET_MAX; in afs_do_getlk()
751 fl->c.flc_pid = 0; in afs_do_getlk()
757 _leave(" = %d [%hd]", ret, fl->c.flc_type); in afs_do_getlk()
764 int afs_lock(struct file *file, int cmd, struct file_lock *fl) in afs_lock() argument
772 fl->c.flc_type, fl->c.flc_flags, in afs_lock()
773 (long long) fl->fl_start, (long long) fl->fl_end); in afs_lock()
776 return afs_do_getlk(file, fl); in afs_lock()
778 fl->fl_u.afs.debug_id = atomic_inc_return(&afs_file_lock_debug_id); in afs_lock()
779 trace_afs_flock_op(vnode, fl, afs_flock_op_lock); in afs_lock()
781 if (lock_is_unlock(fl)) in afs_lock()
782 ret = afs_do_unlk(file, fl); in afs_lock()
784 ret = afs_do_setlk(file, fl); in afs_lock()
792 trace_afs_flock_op(vnode, fl, op); in afs_lock()
799 int afs_flock(struct file *file, int cmd, struct file_lock *fl) in afs_flock() argument
807 fl->c.flc_type, fl->c.flc_flags); in afs_flock()
816 if (!(fl->c.flc_flags & FL_FLOCK)) in afs_flock()
819 fl->fl_u.afs.debug_id = atomic_inc_return(&afs_file_lock_debug_id); in afs_flock()
820 trace_afs_flock_op(vnode, fl, afs_flock_op_flock); in afs_flock()
823 if (lock_is_unlock(fl)) in afs_flock()
824 ret = afs_do_unlk(file, fl); in afs_flock()
826 ret = afs_do_setlk(file, fl); in afs_flock()
834 trace_afs_flock_op(vnode, fl, op); in afs_flock()
844 static void afs_fl_copy_lock(struct file_lock *new, struct file_lock *fl) in afs_fl_copy_lock() argument
846 struct afs_vnode *vnode = AFS_FS_I(file_inode(fl->c.flc_file)); in afs_fl_copy_lock()
854 list_add(&new->fl_u.afs.link, &fl->fl_u.afs.link); in afs_fl_copy_lock()
862 static void afs_fl_release_private(struct file_lock *fl) in afs_fl_release_private() argument
864 struct afs_vnode *vnode = AFS_FS_I(file_inode(fl->c.flc_file)); in afs_fl_release_private()
870 trace_afs_flock_op(vnode, fl, afs_flock_op_release_lock); in afs_fl_release_private()
871 list_del_init(&fl->fl_u.afs.link); in afs_fl_release_private()