FreeBSD/sys/cam/cam_xpt.c
/*
 * Release a CAM control block for the caller.  Remit the cost of the structure
 * to the device referenced by the path.  If the this device had no 'credits'
 * and peripheral drivers have registered async callbacks for this notification
 * call them now.
 */
Release a CAM control block for the caller.  Remit the cost of the structure
to the device referenced by the path.  If the this device had no 'credits'
and peripheral drivers have registered async callbacks for this notification
call them now.
Release a CAM control block for the caller . Remit the cost of the structure to the device referenced by the path . If the this device had no ' credits ' and peripheral drivers have registered async callbacks for this notification call them now .
void
xpt_release_ccb(union ccb *free_ccb)
{
	struct	 cam_ed *device;
	struct	 cam_periph *periph;
	CAM_DEBUG_PRINT(CAM_DEBUG_XPT, ("xpt_release_ccb\n"));
	xpt_path_assert(free_ccb->ccb_h.path, MA_OWNED);
	device = free_ccb->ccb_h.path->device;
	periph = free_ccb->ccb_h.path->periph;
	xpt_free_ccb(free_ccb);
	periph->periph_allocated--;
	cam_ccbq_release_opening(&device->ccbq);
	xpt_run_allocq(periph, 0);
}
void xpt_release_ccb ( union ccb * free_ccb ) { struct cam_ed * device ; struct cam_periph * periph ; CAM_DEBUG_PRINT ( CAM_DEBUG_XPT , ( " \n " ) ) ; xpt_path_assert ( free_ccb -> ccb_h . path , MA_OWNED ) ; device = free_ccb -> ccb_h . path -> device ; periph = free_ccb -> ccb_h . path -> periph ; xpt_free_ccb ( free_ccb ) ; periph -> periph_allocated -- ; cam_ccbq_release_opening ( & device -> ccbq ) ; xpt_run_allocq ( periph , 0 ) ; }
Release a CAM control block for the caller.
Release a CAM control block for the caller .