Lines Matching refs:hole

450 	struct sackhole *hole;
458 hole = (struct sackhole *)uma_zalloc(V_sack_hole_zone, M_NOWAIT);
459 if (hole == NULL)
462 hole->start = start;
463 hole->end = end;
464 hole->rxmit = start;
469 return hole;
476 tcp_sackhole_free(struct tcpcb *tp, struct sackhole *hole)
479 uma_zfree(V_sack_hole_zone, hole);
489 * Insert new SACK hole into scoreboard.
495 struct sackhole *hole;
497 /* Allocate a new SACK hole. */
498 hole = tcp_sackhole_alloc(tp, start, end);
499 if (hole == NULL)
502 /* Insert the new SACK hole into scoreboard. */
504 TAILQ_INSERT_AFTER(&tp->snd_holes, after, hole, scblink);
506 TAILQ_INSERT_TAIL(&tp->snd_holes, hole, scblink);
510 tp->sackhint.nexthole = hole;
512 return hole;
516 * Remove SACK hole from scoreboard.
519 tcp_sackhole_remove(struct tcpcb *tp, struct sackhole *hole)
523 if (tp->sackhint.nexthole == hole)
524 tp->sackhint.nexthole = TAILQ_NEXT(hole, scblink);
526 /* Remove this SACK hole. */
527 TAILQ_REMOVE(&tp->snd_holes, hole, scblink);
529 /* Free this SACK hole. */
530 tcp_sackhole_free(tp, hole);
631 * hole at the tail. If the second or later highest SACK
633 * inserted by way of hole splitting in the while-loop below.
643 * We failed to add a new hole based on the current
662 cur = TAILQ_LAST(&tp->snd_holes, sackhole_head); /* Last SACK hole. */
670 * SACKs data beyond the current hole. Go to the
678 * SACKs data before the current hole. Go to the
679 * previous hole.
689 /* Data acks at least the beginning of hole. */
691 /* Acks entire hole, so delete hole. */
697 * next hole too, so continue onto the next
698 * hole.
702 /* Move start of hole forward. */
707 /* Data acks at least the end of hole. */
709 /* Move end of hole backward. */
714 * ACKs some data in middle of a hole; need
715 * to split current hole
735 * we're done with the sack block or the sack hole.
805 if (SEQ_LT(p->rxmit, tp->snd_una)) {/* old SACK hole */
818 * Returns the next hole to retransmit and the number of retransmitted bytes
819 * from the scoreboard. We store both the next hole and the number of
824 * the loop to traverse more than 1 link before finding the next hole to
831 * that hole has been sacked, in which case, the hole would have been removed
837 struct sackhole *hole = NULL;
841 hole = tp->sackhint.nexthole;
842 if (hole == NULL || SEQ_LT(hole->rxmit, hole->end))
844 while ((hole = TAILQ_NEXT(hole, scblink)) != NULL) {
845 if (SEQ_LT(hole->rxmit, hole->end)) {
846 tp->sackhint.nexthole = hole;
851 return (hole);
871 * i) snd_nxt lies between end of one hole and beginning of another
872 * ii) snd_nxt lies between end of last hole and snd_fack