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)
467 fl->fl_start, fl->fl_end, fl->fl_type, mode);
469 fl->fl_ops = &afs_lock_ops;
470 INIT_LIST_HEAD(&fl->fl_u.afs.link);
471 fl->fl_u.afs.state = AFS_LOCK_PENDING;
473 partial = (fl->fl_start != 0 || fl->fl_end != OFFSET_MAX);
474 type = (fl->fl_type == F_RDLCK) ? AFS_LOCK_READ : AFS_LOCK_WRITE;
482 trace_afs_flock_op(vnode, fl, afs_flock_op_set_lock);
499 list_add_tail(&fl->fl_u.afs.link, &vnode->pending_locks);
513 list_move_tail(&fl->fl_u.afs.link, &vnode->granted_locks);
514 fl->fl_u.afs.state = AFS_LOCK_GRANTED;
520 list_move_tail(&fl->fl_u.afs.link, &vnode->granted_locks);
521 fl->fl_u.afs.state = AFS_LOCK_GRANTED;
527 !(fl->fl_flags & FL_SLEEP)) {
550 trace_afs_flock_ev(vnode, fl, afs_flock_try_to_lock, 0);
565 fl->fl_u.afs.state = ret;
566 trace_afs_flock_ev(vnode, fl, afs_flock_fail_perm, ret);
567 list_del_init(&fl->fl_u.afs.link);
572 fl->fl_u.afs.state = ret;
573 trace_afs_flock_ev(vnode, fl, afs_flock_fail_other, ret);
574 list_del_init(&fl->fl_u.afs.link);
579 fl->fl_u.afs.state = ret;
580 trace_afs_flock_ev(vnode, fl, afs_flock_fail_other, ret);
581 list_del_init(&fl->fl_u.afs.link);
591 ASSERTCMP(vnode->pending_locks.next, ==, &fl->fl_u.afs.link);
596 trace_afs_flock_ev(vnode, fl, afs_flock_acquired, type);
605 ASSERTCMP(fl->fl_u.afs.state, ==, AFS_LOCK_GRANTED);
609 trace_afs_flock_ev(vnode, fl, afs_flock_vfs_locking, 0);
610 ret = locks_lock_file_wait(file, fl);
611 trace_afs_flock_ev(vnode, fl, afs_flock_vfs_lock, ret);
624 if (!(fl->fl_flags & FL_SLEEP)) {
625 list_del_init(&fl->fl_u.afs.link);
632 trace_afs_flock_ev(vnode, fl, afs_flock_would_block, ret);
643 trace_afs_flock_ev(vnode, fl, afs_flock_waiting, 0);
644 ret = wait_event_interruptible(fl->fl_wait,
645 fl->fl_u.afs.state != AFS_LOCK_PENDING);
646 trace_afs_flock_ev(vnode, fl, afs_flock_waited, ret);
648 if (fl->fl_u.afs.state >= 0 && fl->fl_u.afs.state != AFS_LOCK_GRANTED) {
651 switch (fl->fl_u.afs.state) {
653 fl->fl_u.afs.state = AFS_LOCK_PENDING;
663 fl->fl_u.afs.state = AFS_LOCK_PENDING;
675 if (fl->fl_u.afs.state == AFS_LOCK_GRANTED)
677 ret = fl->fl_u.afs.state;
689 list_del_init(&fl->fl_u.afs.link);
702 static int afs_do_unlk(struct file *file, struct file_lock *fl)
707 _enter("{%llx:%llu},%u", vnode->fid.vid, vnode->fid.vnode, fl->fl_type);
709 trace_afs_flock_op(vnode, fl, afs_flock_op_unlock);
714 ret = locks_lock_file_wait(file, fl);
722 static int afs_do_getlk(struct file *file, struct file_lock *fl)
733 fl->fl_type = F_UNLCK;
736 posix_test_lock(file, fl);
737 if (fl->fl_type == F_UNLCK) {
746 fl->fl_type = F_RDLCK;
748 fl->fl_type = F_WRLCK;
749 fl->fl_start = 0;
750 fl->fl_end = OFFSET_MAX;
751 fl->fl_pid = 0;
757 _leave(" = %d [%hd]", ret, fl->fl_type);
764 int afs_lock(struct file *file, int cmd, struct file_lock *fl)
770 _enter("{%llx:%llu},%d,{t=%x,fl=%x,r=%Ld:%Ld}",
772 fl->fl_type, fl->fl_flags,
773 (long long) fl->fl_start, (long long) fl->fl_end);
776 return afs_do_getlk(file, fl);
778 fl->fl_u.afs.debug_id = atomic_inc_return(&afs_file_lock_debug_id);
779 trace_afs_flock_op(vnode, fl, afs_flock_op_lock);
781 if (fl->fl_type == F_UNLCK)
782 ret = afs_do_unlk(file, fl);
784 ret = afs_do_setlk(file, fl);
792 trace_afs_flock_op(vnode, fl, op);
799 int afs_flock(struct file *file, int cmd, struct file_lock *fl)
805 _enter("{%llx:%llu},%d,{t=%x,fl=%x}",
807 fl->fl_type, fl->fl_flags);
816 if (!(fl->fl_flags & FL_FLOCK))
819 fl->fl_u.afs.debug_id = atomic_inc_return(&afs_file_lock_debug_id);
820 trace_afs_flock_op(vnode, fl, afs_flock_op_flock);
823 if (fl->fl_type == F_UNLCK)
824 ret = afs_do_unlk(file, fl);
826 ret = afs_do_setlk(file, fl);
834 trace_afs_flock_op(vnode, fl, op);
844 static void afs_fl_copy_lock(struct file_lock *new, struct file_lock *fl)
846 struct afs_vnode *vnode = AFS_FS_I(file_inode(fl->fl_file));
854 list_add(&new->fl_u.afs.link, &fl->fl_u.afs.link);
862 static void afs_fl_release_private(struct file_lock *fl)
864 struct afs_vnode *vnode = AFS_FS_I(file_inode(fl->fl_file));
870 trace_afs_flock_op(vnode, fl, afs_flock_op_release_lock);
871 list_del_init(&fl->fl_u.afs.link);