sctp: remove book keeping not needed anymore
MFC after: 3 days
This commit is contained in:
parent
330b7dccd8
commit
ee9ee699d6
@ -12442,7 +12442,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
bool free_cnt_applied = false;
|
||||
bool some_on_control;
|
||||
bool got_all_of_the_send = false;
|
||||
bool hold_tcblock = false;
|
||||
bool non_blocking = false;
|
||||
|
||||
error = 0;
|
||||
@ -12557,7 +12556,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
stcb = LIST_FIRST(&inp->sctp_asoc_list);
|
||||
if (stcb != NULL) {
|
||||
SCTP_TCB_LOCK(stcb);
|
||||
hold_tcblock = true;
|
||||
}
|
||||
SCTP_INP_RUNLOCK(inp);
|
||||
} else if (sinfo_assoc_id > SCTP_ALL_ASSOC) {
|
||||
@ -12565,7 +12563,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
SCTP_INP_RUNLOCK(inp);
|
||||
if (stcb != NULL) {
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
hold_tcblock = true;
|
||||
}
|
||||
} else if (addr != NULL) {
|
||||
/*-
|
||||
@ -12582,7 +12579,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
SCTP_INP_WUNLOCK(inp);
|
||||
} else {
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
hold_tcblock = true;
|
||||
}
|
||||
} else {
|
||||
SCTP_INP_RUNLOCK(inp);
|
||||
@ -12591,11 +12587,9 @@ sctp_lower_sosend(struct socket *so,
|
||||
#ifdef INVARIANTS
|
||||
if (stcb != NULL) {
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
KASSERT(hold_tcblock, ("tcb lock hold, hold_tcblock is false"));
|
||||
} else {
|
||||
KASSERT(!hold_tcblock, ("hold_tcblock is true, but stcb is NULL"));
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((stcb == NULL) && (addr != NULL)) {
|
||||
/* Possible implicit send? */
|
||||
SCTP_ASOC_CREATE_LOCK(inp);
|
||||
@ -12626,7 +12620,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
SCTP_INP_WUNLOCK(inp);
|
||||
} else {
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
hold_tcblock = true;
|
||||
SCTP_ASOC_CREATE_UNLOCK(inp);
|
||||
create_lock_applied = false;
|
||||
}
|
||||
@ -12669,7 +12662,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
goto out_unlocked;
|
||||
}
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
hold_tcblock = true;
|
||||
SCTP_ASOC_CREATE_UNLOCK(inp);
|
||||
create_lock_applied = false;
|
||||
/*
|
||||
@ -12683,7 +12675,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
if (sctp_process_cmsgs_for_init(stcb, control, &error)) {
|
||||
sctp_free_assoc(inp, stcb, SCTP_NORMAL_PROC,
|
||||
SCTP_FROM_SCTP_OUTPUT + SCTP_LOC_6);
|
||||
hold_tcblock = false;
|
||||
stcb = NULL;
|
||||
KASSERT(error != 0,
|
||||
("error is 0 although sctp_process_cmsgs_for_init() indicated an error"));
|
||||
@ -12703,7 +12694,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
|
||||
KASSERT(!create_lock_applied, ("create_lock_applied is true"));
|
||||
KASSERT(stcb != NULL, ("stcb is NULL"));
|
||||
KASSERT(hold_tcblock, ("hold_tcblock is false"));
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
|
||||
asoc = &stcb->asoc;
|
||||
@ -12807,7 +12797,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
local_soresv = sndlen;
|
||||
|
||||
KASSERT(stcb != NULL, ("stcb is NULL"));
|
||||
KASSERT(hold_tcblock, ("hold_tcblock is false"));
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
KASSERT((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0,
|
||||
("Association about to be freed"));
|
||||
@ -12863,10 +12852,8 @@ sctp_lower_sosend(struct socket *so,
|
||||
SCTP_BUF_LEN(mm) = (int)(tot_out + sizeof(struct sctp_paramhdr));
|
||||
if (top == NULL) {
|
||||
SCTP_TCB_UNLOCK(stcb);
|
||||
hold_tcblock = false;
|
||||
error = uiomove((caddr_t)ph, (int)tot_out, uio);
|
||||
SCTP_TCB_LOCK(stcb);
|
||||
hold_tcblock = true;
|
||||
if ((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) ||
|
||||
(asoc->state & SCTP_STATE_WAS_ABORTED)) {
|
||||
sctp_m_freem(mm);
|
||||
@ -12915,7 +12902,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
}
|
||||
|
||||
KASSERT(stcb != NULL, ("stcb is NULL"));
|
||||
KASSERT(hold_tcblock, ("hold_tcblock is false"));
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
KASSERT((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0,
|
||||
("Association about to be freed"));
|
||||
@ -12974,7 +12960,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
be.error = 0;
|
||||
stcb->block_entry = &be;
|
||||
SCTP_TCB_UNLOCK(stcb);
|
||||
hold_tcblock = false;
|
||||
error = sbwait(so, SO_SND);
|
||||
if (error == 0) {
|
||||
if (so->so_error != 0) {
|
||||
@ -12986,7 +12971,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
}
|
||||
SOCKBUF_UNLOCK(&so->so_snd);
|
||||
SCTP_TCB_LOCK(stcb);
|
||||
hold_tcblock = true;
|
||||
stcb->block_entry = NULL;
|
||||
if (error != 0) {
|
||||
goto out_unlocked;
|
||||
@ -13021,7 +13005,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
|
||||
skip_preblock:
|
||||
KASSERT(stcb != NULL, ("stcb is NULL"));
|
||||
KASSERT(hold_tcblock, ("hold_tcblock is false"));
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
KASSERT((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0,
|
||||
("Association about to be freed"));
|
||||
@ -13056,10 +13039,8 @@ sctp_lower_sosend(struct socket *so,
|
||||
if (strm->last_msg_incomplete == 0) {
|
||||
do_a_copy_in:
|
||||
SCTP_TCB_UNLOCK(stcb);
|
||||
hold_tcblock = false;
|
||||
sp = sctp_copy_it_in(stcb, asoc, sndrcvninfo, uio, net, max_len, user_marks_eor, &error);
|
||||
SCTP_TCB_LOCK(stcb);
|
||||
hold_tcblock = true;
|
||||
if ((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) ||
|
||||
(asoc->state & SCTP_STATE_WAS_ABORTED)) {
|
||||
if (asoc->state & SCTP_STATE_WAS_ABORTED) {
|
||||
@ -13144,7 +13125,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
}
|
||||
|
||||
KASSERT(stcb != NULL, ("stcb is NULL"));
|
||||
KASSERT(hold_tcblock, ("hold_tcblock is false"));
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
KASSERT((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0,
|
||||
("Association about to be freed"));
|
||||
@ -13165,12 +13145,10 @@ sctp_lower_sosend(struct socket *so,
|
||||
((max_len > 0) && (SCTP_SB_LIMIT_SND(so) < SCTP_BASE_SYSCTL(sctp_add_more_threshold))) ||
|
||||
(uio->uio_resid <= max_len)) {
|
||||
SCTP_TCB_UNLOCK(stcb);
|
||||
hold_tcblock = false;
|
||||
sndout = 0;
|
||||
new_tail = NULL;
|
||||
mm = sctp_copy_resume(uio, (int)max_len, user_marks_eor, &error, &sndout, &new_tail);
|
||||
SCTP_TCB_LOCK(stcb);
|
||||
hold_tcblock = true;
|
||||
if ((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) ||
|
||||
(asoc->state & SCTP_STATE_WAS_ABORTED)) {
|
||||
/*
|
||||
@ -13226,7 +13204,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
}
|
||||
|
||||
KASSERT(stcb != NULL, ("stcb is NULL"));
|
||||
KASSERT(hold_tcblock, ("hold_tcblock is false"));
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
KASSERT((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0,
|
||||
("Association about to be freed"));
|
||||
@ -13356,7 +13333,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
be.error = 0;
|
||||
stcb->block_entry = &be;
|
||||
SCTP_TCB_UNLOCK(stcb);
|
||||
hold_tcblock = false;
|
||||
error = sbwait(so, SO_SND);
|
||||
if (error == 0) {
|
||||
if (so->so_error != 0)
|
||||
@ -13367,7 +13343,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
}
|
||||
SOCKBUF_UNLOCK(&so->so_snd);
|
||||
SCTP_TCB_LOCK(stcb);
|
||||
hold_tcblock = true;
|
||||
stcb->block_entry = NULL;
|
||||
if ((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) ||
|
||||
(asoc->state & SCTP_STATE_WAS_ABORTED)) {
|
||||
@ -13399,7 +13374,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
}
|
||||
|
||||
KASSERT(stcb != NULL, ("stcb is NULL"));
|
||||
KASSERT(hold_tcblock, ("hold_tcblock is false"));
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
KASSERT((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0,
|
||||
("Association about to be freed"));
|
||||
@ -13442,7 +13416,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
|
||||
dataless_eof:
|
||||
KASSERT(stcb != NULL, ("stcb is NULL"));
|
||||
KASSERT(hold_tcblock, ("hold_tcblock is false"));
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
KASSERT((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0,
|
||||
("Association about to be freed"));
|
||||
@ -13519,7 +13492,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
sctp_abort_an_association(stcb->sctp_ep, stcb,
|
||||
op_err, false, SCTP_SO_LOCKED);
|
||||
NET_EPOCH_EXIT(et);
|
||||
hold_tcblock = false;
|
||||
stcb = NULL;
|
||||
error = ECONNABORTED;
|
||||
goto out;
|
||||
@ -13533,7 +13505,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
|
||||
skip_out_eof:
|
||||
KASSERT(stcb != NULL, ("stcb is NULL"));
|
||||
KASSERT(hold_tcblock, ("hold_tcblock is false"));
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
KASSERT((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0,
|
||||
("Association about to be freed"));
|
||||
@ -13555,7 +13526,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
}
|
||||
|
||||
KASSERT(stcb != NULL, ("stcb is NULL"));
|
||||
KASSERT(hold_tcblock, ("hold_tcblock is false"));
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
KASSERT((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0,
|
||||
("Association about to be freed"));
|
||||
@ -13605,7 +13575,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
}
|
||||
|
||||
KASSERT(stcb != NULL, ("stcb is NULL"));
|
||||
KASSERT(hold_tcblock, ("hold_tcblock is false"));
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
KASSERT((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0,
|
||||
("Association about to be freed"));
|
||||
@ -13636,7 +13605,6 @@ sctp_lower_sosend(struct socket *so,
|
||||
asoc->total_output_queue_size, error);
|
||||
|
||||
KASSERT(stcb != NULL, ("stcb is NULL"));
|
||||
KASSERT(hold_tcblock, ("hold_tcblock is false"));
|
||||
SCTP_TCB_LOCK_ASSERT(stcb);
|
||||
KASSERT((asoc->state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0,
|
||||
("Association about to be freed"));
|
||||
@ -13652,12 +13620,10 @@ sctp_lower_sosend(struct socket *so,
|
||||
if (local_soresv) {
|
||||
atomic_subtract_int(&asoc->sb_send_resv, (int)sndlen);
|
||||
}
|
||||
if (hold_tcblock) {
|
||||
SCTP_TCB_UNLOCK(stcb);
|
||||
}
|
||||
if (free_cnt_applied) {
|
||||
atomic_subtract_int(&asoc->refcnt, 1);
|
||||
}
|
||||
SCTP_TCB_UNLOCK(stcb);
|
||||
}
|
||||
if (top != NULL) {
|
||||
sctp_m_freem(top);
|
||||
|
Loading…
Reference in New Issue
Block a user