Lines Matching refs:ccb
202 ccb_t *ccb; in get_ccb() local
207 ccb = TAILQ_FIRST(&sess->s_ccb_pool); in get_ccb()
209 DEB(100, ("get_ccb: ccb = %p, waitok = %d\n", ccb, waitok)); in get_ccb()
211 if (ccb != NULL) { in get_ccb()
212 TAILQ_REMOVE(&sess->s_ccb_pool, ccb, ccb_chain); in get_ccb()
223 if (ccb == NULL) { in get_ccb()
228 ccb->ccb_flags = 0; in get_ccb()
229 ccb->ccb_timedout = TOUT_NONE; in get_ccb()
230 ccb->ccb_xs = NULL; in get_ccb()
231 ccb->ccb_temp_data = NULL; in get_ccb()
232 ccb->ccb_text_data = NULL; in get_ccb()
233 ccb->ccb_status = ISCSI_STATUS_SUCCESS; in get_ccb()
234 ccb->ccb_ITT = (ccb->ccb_ITT & 0xffffff); in get_ccb()
235 ccb->ccb_disp = CCBDISP_NOWAIT; in get_ccb()
236 ccb->ccb_connection = conn; in get_ccb()
237 ccb->ccb_num_timeouts = 0; in get_ccb()
244 ccb, conn->c_usecount)); in get_ccb()
246 return ccb; in get_ccb()
257 free_ccb(ccb_t *ccb) in free_ccb() argument
259 session_t *sess = ccb->ccb_session; in free_ccb()
260 connection_t *conn = ccb->ccb_connection; in free_ccb()
265 ccb, conn->c_usecount-1)); in free_ccb()
267 KASSERT((ccb->ccb_flags & CCBF_WAITQUEUE) == 0); in free_ccb()
269 ccb->ccb_connection = NULL; in free_ccb()
274 if (ccb->ccb_disp > CCBDISP_NOWAIT) { in free_ccb()
275 DEBOUT(("Freeing CCB with disp %d\n",ccb->ccb_disp)); in free_ccb()
278 ccb->ccb_disp = CCBDISP_UNUSED; in free_ccb()
281 if (ccb->ccb_temp_data != NULL) { in free_ccb()
282 free(ccb->ccb_temp_data, M_TEMP); in free_ccb()
284 if (ccb->ccb_text_data != NULL) { in free_ccb()
285 free(ccb->ccb_text_data, M_TEMP); in free_ccb()
288 if ((pdu = ccb->ccb_pdu_waiting) != NULL) { in free_ccb()
289 ccb->ccb_pdu_waiting = NULL; in free_ccb()
300 TAILQ_INSERT_TAIL(&sess->s_ccb_pool, ccb, ccb_chain); in free_ccb()
318 ccb_t *ccb; in create_ccbs() local
323 for (i = 0, ccb = sess->s_ccb; i < CCBS_PER_SESSION; i++, ccb++) { in create_ccbs()
324 ccb->ccb_ITT = i | sid; in create_ccbs()
325 ccb->ccb_session = sess; in create_ccbs()
327 callout_init(&ccb->ccb_timeout, CALLOUT_MPSAFE); in create_ccbs()
328 callout_setfunc(&ccb->ccb_timeout, ccb_timeout_co, ccb); in create_ccbs()
330 DEB(9, ("Create_ccbs: ccb %p itt %x\n", ccb, ccb->ccb_ITT)); in create_ccbs()
331 TAILQ_INSERT_HEAD(&sess->s_ccb_pool, ccb, ccb_chain); in create_ccbs()
346 ccb_t *ccb; in destroy_ccbs() local
350 for (i = 0, ccb = sess->s_ccb; i < CCBS_PER_SESSION; i++, ccb++) { in destroy_ccbs()
352 callout_halt(&ccb->ccb_timeout, NULL); in destroy_ccbs()
353 callout_destroy(&ccb->ccb_timeout); in destroy_ccbs()
355 DEB(9, ("destroy_ccbs: ccb %p itt %x\n", ccb, ccb->ccb_ITT)); in destroy_ccbs()
356 KASSERT((ccb->ccb_flags & CCBF_WAITQUEUE) == 0); in destroy_ccbs()
357 KASSERT(ccb->ccb_disp == CCBDISP_UNUSED); in destroy_ccbs()
358 KASSERT(ccb->ccb_connection == NULL); in destroy_ccbs()
359 TAILQ_REMOVE(&sess->s_ccb_pool, ccb, ccb_chain); in destroy_ccbs()
368 suspend_ccb(ccb_t *ccb, bool yes) in suspend_ccb() argument
372 conn = ccb->ccb_connection; in suspend_ccb()
378 KASSERT((ccb->ccb_flags & CCBF_WAITQUEUE) == 0); in suspend_ccb()
379 TAILQ_INSERT_TAIL(&conn->c_ccbs_waiting, ccb, ccb_chain); in suspend_ccb()
380 ccb->ccb_flags |= CCBF_WAITQUEUE; in suspend_ccb()
381 } else if (ccb->ccb_flags & CCBF_WAITQUEUE) { in suspend_ccb()
382 TAILQ_REMOVE(&conn->c_ccbs_waiting, ccb, ccb_chain); in suspend_ccb()
383 ccb->ccb_flags &= ~CCBF_WAITQUEUE; in suspend_ccb()
397 wake_ccb(ccb_t *ccb, uint32_t status) in wake_ccb() argument
402 conn = ccb->ccb_connection; in wake_ccb()
406 ccb->ccb_CmdSN, ccb, ccb->ccb_disp)); in wake_ccb()
408 ccb_timeout_stop(ccb); in wake_ccb()
411 disp = ccb->ccb_disp; in wake_ccb()
418 suspend_ccb(ccb, FALSE); in wake_ccb()
421 ccb->ccb_disp = CCBDISP_BUSY; in wake_ccb()
422 ccb->ccb_status = status; in wake_ccb()
434 iscsi_done(ccb); in wake_ccb()
437 free_ccb(ccb); in wake_ccb()
440 DEBC(conn, 1, ("CCB done, ccb = %p, invalid disposition %d", ccb, disp)); in wake_ccb()
441 free_ccb(ccb); in wake_ccb()