Lines Matching refs:overlap

446 	struct lockf **prev, *overlap, *ltmp;
626 * Handle any locks that overlap and are owned by ourselves.
632 ovcase = lf_findoverlap(block, lock, SELF, &prev, &overlap);
634 block = overlap->lf_next;
637 * 0) no overlap
638 * 1) overlap == lock
639 * 2) overlap contains lock
640 * 3) lock contains overlap
641 * 4) overlap starts before lock
642 * 5) overlap ends after lock
648 lock->lf_next = overlap;
658 overlap->lf_type == F_WRLCK)
659 lf_wakelock(overlap, TRUE);
660 overlap->lf_type = lock->lf_type;
662 lock = overlap; /* for lf_coalesce_adjacent() */
669 if (overlap->lf_type == lock->lf_type) {
671 lock = overlap; /* for lf_coalesce_adjacent() */
674 if (overlap->lf_start == lock->lf_start) {
676 lock->lf_next = overlap;
677 overlap->lf_start = lock->lf_end + 1;
684 if (lf_split(overlap, lock)) {
689 lf_wakelock(overlap, TRUE);
698 overlap->lf_type == F_WRLCK) {
699 lf_wakelock(overlap, TRUE);
701 while (!TAILQ_EMPTY(&overlap->lf_blkhd)) {
702 ltmp = TAILQ_FIRST(&overlap->lf_blkhd);
703 TAILQ_REMOVE(&overlap->lf_blkhd, ltmp,
711 * Add the new lock if necessary and delete the overlap.
715 lock->lf_next = overlap->lf_next;
719 *prev = overlap->lf_next;
720 FREE(overlap, M_LOCKF);
725 * Add lock after overlap on the list.
727 lock->lf_next = overlap->lf_next;
728 overlap->lf_next = lock;
729 overlap->lf_end = lock->lf_start - 1;
731 lf_wakelock(overlap, TRUE);
737 * Add the new lock before overlap.
741 lock->lf_next = overlap;
743 overlap->lf_start = lock->lf_end + 1;
744 lf_wakelock(overlap, TRUE);
765 * lock (or an overlap to that lock) and remove it (or shrink
782 struct lockf *overlap, **prev;
794 while ((ovcase = lf_findoverlap(lf, unlock, SELF, &prev, &overlap)) != OVERLAP_NONE) {
798 lf_wakelock(overlap, FALSE);
805 *prev = overlap->lf_next;
806 FREE(overlap, M_LOCKF);
810 if (overlap->lf_start == unlock->lf_start) {
811 overlap->lf_start = unlock->lf_end + 1;
818 if (lf_split(overlap, unlock))
820 overlap->lf_next = unlock->lf_next;
824 *prev = overlap->lf_next;
825 lf = overlap->lf_next;
826 FREE(overlap, M_LOCKF);
830 overlap->lf_end = unlock->lf_start - 1;
831 prev = &overlap->lf_next;
832 lf = overlap->lf_next;
836 overlap->lf_start = unlock->lf_end + 1;
918 struct lockf **prev, *overlap, *lf = *(lock->lf_head);
921 lf_findoverlap(lf, lock, OTHERS, &prev, &overlap) != OVERLAP_NONE;
922 lf = overlap->lf_next) {
924 * Found an overlap.
930 (overlap->lf_flags & F_POSIX) != 0 &&
931 proc_pid((struct proc *)(overlap->lf_id)) != matchpid)
936 if ((lock->lf_type == F_WRLCK || overlap->lf_type == F_WRLCK))
937 return (overlap);
949 * lock The lock we are checking for an overlap
953 * pointer to overlapping lock, if overlap
954 * overlap pointer to pointer to contain address
969 * *overlap The pointer to the overlapping lock
984 * The value of *overlap and *prev are modified, even if there is
989 struct lockf ***prev, struct lockf **overlap)
994 *overlap = lf;
999 lf_print("lf_findoverlap: looking for overlap in", lock);
1020 *overlap = lf = lf->lf_next;
1033 * OK, check for overlap
1038 LOCKF_DEBUG(2, "no overlap\n");
1047 *overlap = lf = lf->lf_next;
1051 LOCKF_DEBUG(2, "overlap == lock\n");
1057 LOCKF_DEBUG(2, "overlap contains lock\n");
1063 LOCKF_DEBUG(2, "lock contains overlap\n");
1068 LOCKF_DEBUG(2, "overlap starts before lock\n");
1074 LOCKF_DEBUG(2, "overlap ends after lock\n");