Lines Matching refs:range

101 lf_match(struct lockf_range *range, int type, int flags)  in lf_match()  argument
103 if (range->lf_type != type) in lf_match()
105 if ((range->lf_flags ^ flags) & F_POSIX) in lf_match()
115 lf_overlap(const struct lockf_range *range, off_t start, off_t end) in lf_overlap() argument
117 if (range->lf_start >= start && range->lf_start <= end) in lf_overlap()
119 else if (start >= range->lf_start && start <= range->lf_end) in lf_overlap()
300 struct lockf_range *range; in lf_setlock() local
342 TAILQ_FOREACH(range, &lock->lf_range, lf_link) { in lf_setlock()
343 if (insert_point == NULL && range->lf_start >= start) in lf_setlock()
344 insert_point = range; in lf_setlock()
352 if (range->lf_end < start) in lf_setlock()
354 if (range->lf_start > end) { in lf_setlock()
355 range = NULL; in lf_setlock()
363 if (range->lf_owner == owner) { in lf_setlock()
365 first_match = range; in lf_setlock()
366 last_match = range; in lf_setlock()
375 if (type == F_WRLCK || range->lf_type == F_WRLCK) in lf_setlock()
384 if (range != NULL) { in lf_setlock()
408 if (brange->lf_owner == range->lf_owner) { in lf_setlock()
465 range = new_range1; in lf_setlock()
467 lf_create_range(range, owner, type, flags, start, end); in lf_setlock()
468 lf_insert(&lock->lf_range, range, insert_point); in lf_setlock()
587 while ((range = next) != NULL) { in lf_setlock()
588 next = TAILQ_NEXT(range, lf_link); in lf_setlock()
594 if (range->lf_owner != owner || range == brange) in lf_setlock()
602 if (type == F_RDLCK && range->lf_type == F_WRLCK) in lf_setlock()
613 if (range->lf_start < start) { in lf_setlock()
614 KKASSERT(range == first_match); in lf_setlock()
616 range->lf_end >= start - 1 && in lf_setlock()
617 lf_match(range, type, flags)) { in lf_setlock()
618 range->lf_end = brange->lf_end; in lf_setlock()
619 range->lf_flags |= brange->lf_flags & F_NOEND; in lf_setlock()
630 brange = range; in lf_setlock()
631 } else if (range->lf_end >= start) { in lf_setlock()
632 range->lf_end = start - 1; in lf_setlock()
634 range->lf_flags &= ~F_NOEND; in lf_setlock()
636 if (range == last_match) in lf_setlock()
654 if (range->lf_end > end) { in lf_setlock()
655 KKASSERT(range == last_match); in lf_setlock()
657 range->lf_start <= end + 1 && in lf_setlock()
658 lf_match(range, type, flags)) { in lf_setlock()
659 brange->lf_end = range->lf_end; in lf_setlock()
660 brange->lf_flags |= range->lf_flags & F_NOEND; in lf_setlock()
661 TAILQ_REMOVE(&lock->lf_range, range, lf_link); in lf_setlock()
662 if (range->lf_flags & F_POSIX) in lf_setlock()
664 TAILQ_INSERT_TAIL(&deadlist, range, lf_link); in lf_setlock()
665 } else if (range->lf_start <= end) { in lf_setlock()
666 range->lf_start = end + 1; in lf_setlock()
667 TAILQ_REMOVE(&lock->lf_range, range, lf_link); in lf_setlock()
668 lf_insert(&lock->lf_range, range, next); in lf_setlock()
679 KKASSERT(range->lf_start >= start && range->lf_end <= end); in lf_setlock()
680 TAILQ_REMOVE(&lock->lf_range, range, lf_link); in lf_setlock()
681 if (range->lf_flags & F_POSIX) in lf_setlock()
683 TAILQ_INSERT_TAIL(&deadlist, range, lf_link); in lf_setlock()
684 if (range == last_match) in lf_setlock()
702 range = TAILQ_PREV(brange, lockf_range_list, lf_link); in lf_setlock()
703 if (range && in lf_setlock()
704 range->lf_owner == owner && in lf_setlock()
705 range->lf_end == brange->lf_start - 1 && in lf_setlock()
706 lf_match(range, type, flags) in lf_setlock()
711 range->lf_end = brange->lf_end; in lf_setlock()
712 range->lf_flags |= brange->lf_flags & F_NOEND; in lf_setlock()
717 brange = range; in lf_setlock()
719 range = TAILQ_NEXT(brange, lf_link); in lf_setlock()
720 if (range && in lf_setlock()
721 range->lf_owner == owner && in lf_setlock()
722 range->lf_start == brange->lf_end + 1 && in lf_setlock()
723 lf_match(range, type, flags) in lf_setlock()
728 brange->lf_end = range->lf_end; in lf_setlock()
729 brange->lf_flags |= range->lf_flags & F_NOEND; in lf_setlock()
730 TAILQ_REMOVE(&lock->lf_range, range, lf_link); in lf_setlock()
731 if (range->lf_flags & F_POSIX) in lf_setlock()
733 TAILQ_INSERT_TAIL(&deadlist, range, lf_link); in lf_setlock()
744 while ((range = TAILQ_FIRST(&deadlist)) != NULL) { in lf_setlock()
745 TAILQ_REMOVE(&deadlist, range, lf_link); in lf_setlock()
746 lf_destroy_range(range); in lf_setlock()
773 struct lockf_range *range; in lf_getlock() local
775 TAILQ_FOREACH(range, &lock->lf_range, lf_link) in lf_getlock()
776 if (range->lf_owner != owner && in lf_getlock()
777 lf_overlap(range, start, end) && in lf_getlock()
778 (type == F_WRLCK || range->lf_type == F_WRLCK)) in lf_getlock()
780 if (range == NULL) { in lf_getlock()
784 fl->l_type = range->lf_type; in lf_getlock()
786 fl->l_start = range->lf_start; in lf_getlock()
787 if (range->lf_flags & F_NOEND) in lf_getlock()
790 fl->l_len = range->lf_end - range->lf_start + 1; in lf_getlock()
791 if (range->lf_owner != NULL && (range->lf_flags & F_POSIX)) in lf_getlock()
792 fl->l_pid = range->lf_owner->p_pid; in lf_getlock()
808 struct lockf_range *range, *nrange; in lf_wakeup() local
810 TAILQ_FOREACH_MUTABLE(range, &lock->lf_blocked, lf_link, nrange) { in lf_wakeup()
811 if (lf_overlap(range, start, end) == 0) in lf_wakeup()
813 TAILQ_REMOVE(&lock->lf_blocked, range, lf_link); in lf_wakeup()
814 range->lf_flags = 1; in lf_wakeup()
815 wakeup(range); in lf_wakeup()
829 struct lockf_range *range; in lf_alloc_range() local
833 if ((range = lfpc->free1) != NULL) { in lf_alloc_range()
835 return range; in lf_alloc_range()
837 if ((range = lfpc->free2) != NULL) { in lf_alloc_range()
839 return range; in lf_alloc_range()
841 range = kmalloc(sizeof(struct lockf_range), M_LOCKF, M_WAITOK); in lf_alloc_range()
842 range->lf_owner = NULL; in lf_alloc_range()
844 return(range); in lf_alloc_range()
860 lf_create_range(struct lockf_range *range, struct proc *owner, int type, in lf_create_range() argument
864 range->lf_type = type; in lf_create_range()
865 range->lf_flags = flags; in lf_create_range()
866 range->lf_start = start; in lf_create_range()
867 range->lf_end = end; in lf_create_range()
868 range->lf_owner = owner; in lf_create_range()
871 (uintmax_t)range->lf_start, (uintmax_t)range->lf_end); in lf_create_range()
875 lf_destroy_range(struct lockf_range *range) in lf_destroy_range() argument
880 (uintmax_t)range->lf_start, (uintmax_t)range->lf_end); in lf_destroy_range()
884 range->lf_owner = NULL; in lf_destroy_range()
885 lfpc->free1 = range; in lf_destroy_range()
889 range->lf_owner = NULL; in lf_destroy_range()
890 lfpc->free2 = range; in lf_destroy_range()
893 kfree(range, M_LOCKF); in lf_destroy_range()
916 struct lockf_range *range; in _lf_print_lock() local
926 TAILQ_FOREACH(range, &lock->lf_range, lf_link) in _lf_print_lock()
928 (uintmax_t)range->lf_start, (uintmax_t)range->lf_end, in _lf_print_lock()
929 range->lf_type == F_RDLCK ? "shared" : "exclusive", in _lf_print_lock()
930 range->lf_flags & F_POSIX ? range->lf_owner->p_pid : -1); in _lf_print_lock()
935 TAILQ_FOREACH(range, &lock->lf_blocked, lf_link) in _lf_print_lock()
937 (uintmax_t)range->lf_start, (uintmax_t)range->lf_end, in _lf_print_lock()
938 range->lf_type == F_RDLCK ? "shared" : "exclusive", in _lf_print_lock()
939 range); in _lf_print_lock()