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);
452 static int afs_do_setlk(struct file *file, struct file_lock *fl) in afs_do_setlk() argument
467 fl->fl_start, fl->fl_end, fl->fl_type, mode); in afs_do_setlk()
469 fl->fl_ops = &afs_lock_ops; in afs_do_setlk()
470 INIT_LIST_HEAD(&fl->fl_u.afs.link); in afs_do_setlk()
471 fl->fl_u.afs.state = AFS_LOCK_PENDING; in afs_do_setlk()
473 partial = (fl->fl_start != 0 || fl->fl_end != OFFSET_MAX); in afs_do_setlk()
474 type = (fl->fl_type == F_RDLCK) ? AFS_LOCK_READ : AFS_LOCK_WRITE; in afs_do_setlk()
482 trace_afs_flock_op(vnode, fl, afs_flock_op_set_lock); in afs_do_setlk()
499 list_add_tail(&fl->fl_u.afs.link, &vnode->pending_locks); in afs_do_setlk()
513 list_move_tail(&fl->fl_u.afs.link, &vnode->granted_locks); in afs_do_setlk()
514 fl->fl_u.afs.state = AFS_LOCK_GRANTED; in afs_do_setlk()
520 list_move_tail(&fl->fl_u.afs.link, &vnode->granted_locks); in afs_do_setlk()
521 fl->fl_u.afs.state = AFS_LOCK_GRANTED; in afs_do_setlk()
527 !(fl->fl_flags & FL_SLEEP)) { in afs_do_setlk()
550 trace_afs_flock_ev(vnode, fl, afs_flock_try_to_lock, 0); in afs_do_setlk()
565 fl->fl_u.afs.state = ret; in afs_do_setlk()
566 trace_afs_flock_ev(vnode, fl, afs_flock_fail_perm, ret); in afs_do_setlk()
567 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
572 fl->fl_u.afs.state = ret; in afs_do_setlk()
573 trace_afs_flock_ev(vnode, fl, afs_flock_fail_other, ret); in afs_do_setlk()
574 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
579 fl->fl_u.afs.state = ret; in afs_do_setlk()
580 trace_afs_flock_ev(vnode, fl, afs_flock_fail_other, ret); in afs_do_setlk()
581 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
591 ASSERTCMP(vnode->pending_locks.next, ==, &fl->fl_u.afs.link); in afs_do_setlk()
596 trace_afs_flock_ev(vnode, fl, afs_flock_acquired, type); in afs_do_setlk()
605 ASSERTCMP(fl->fl_u.afs.state, ==, AFS_LOCK_GRANTED); in afs_do_setlk()
609 trace_afs_flock_ev(vnode, fl, afs_flock_vfs_locking, 0); in afs_do_setlk()
610 ret = locks_lock_file_wait(file, fl); in afs_do_setlk()
611 trace_afs_flock_ev(vnode, fl, afs_flock_vfs_lock, ret); in afs_do_setlk()
624 if (!(fl->fl_flags & FL_SLEEP)) { in afs_do_setlk()
625 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
632 trace_afs_flock_ev(vnode, fl, afs_flock_would_block, ret); in afs_do_setlk()
643 trace_afs_flock_ev(vnode, fl, afs_flock_waiting, 0); in afs_do_setlk()
644 ret = wait_event_interruptible(fl->fl_wait, in afs_do_setlk()
645 fl->fl_u.afs.state != AFS_LOCK_PENDING); in afs_do_setlk()
646 trace_afs_flock_ev(vnode, fl, afs_flock_waited, ret); in afs_do_setlk()
648 if (fl->fl_u.afs.state >= 0 && fl->fl_u.afs.state != AFS_LOCK_GRANTED) { in afs_do_setlk()
651 switch (fl->fl_u.afs.state) { in afs_do_setlk()
653 fl->fl_u.afs.state = AFS_LOCK_PENDING; in afs_do_setlk()
663 fl->fl_u.afs.state = AFS_LOCK_PENDING; in afs_do_setlk()
675 if (fl->fl_u.afs.state == AFS_LOCK_GRANTED) in afs_do_setlk()
677 ret = fl->fl_u.afs.state; in afs_do_setlk()
689 list_del_init(&fl->fl_u.afs.link); in afs_do_setlk()
702 static int afs_do_unlk(struct file *file, struct file_lock *fl) in afs_do_unlk() argument
707 _enter("{%llx:%llu},%u", vnode->fid.vid, vnode->fid.vnode, fl->fl_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->fl_type = F_UNLCK; in afs_do_getlk()
736 posix_test_lock(file, fl); in afs_do_getlk()
737 if (fl->fl_type == F_UNLCK) { in afs_do_getlk()
746 fl->fl_type = F_RDLCK; in afs_do_getlk()
748 fl->fl_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->fl_pid = 0; in afs_do_getlk()
757 _leave(" = %d [%hd]", ret, fl->fl_type); in afs_do_getlk()
764 int afs_lock(struct file *file, int cmd, struct file_lock *fl) in afs_lock() argument
772 fl->fl_type, fl->fl_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 (fl->fl_type == F_UNLCK) 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->fl_type, fl->fl_flags); in afs_flock()
816 if (!(fl->fl_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 (fl->fl_type == F_UNLCK) 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(locks_inode(fl->fl_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(locks_inode(fl->fl_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()