Small cleanup. Now bails out if locked_pool couldn't allocate another chunk.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8283 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2004-07-02 19:09:30 +00:00
parent 1f5d3007c4
commit d448e270d8
@@ -105,6 +105,10 @@ create_temp_sg(scsi_ccb *ccb)
SHOW_FLOW(3, "ccb=%p, data=%p, data_len=%lu", ccb, ccb->data, ccb->data_len); SHOW_FLOW(3, "ccb=%p, data=%p, data_len=%lu", ccb, ccb->data, ccb->data_len);
ccb->sg_list = temp_sg = locked_pool->alloc(temp_sg_pool); ccb->sg_list = temp_sg = locked_pool->alloc(temp_sg_pool);
if (temp_sg == NULL) {
SHOW_ERROR0(2, "cannot allocate memory for IO request!");
return false;
}
res = lock_memory(ccb->data, ccb->data_len, B_DMA_IO res = lock_memory(ccb->data, ccb->data_len, B_DMA_IO
| ((ccb->flags & SCSI_DIR_MASK) == SCSI_DIR_IN ? B_READ_DEVICE : 0)); | ((ccb->flags & SCSI_DIR_MASK) == SCSI_DIR_IN ? B_READ_DEVICE : 0));
@@ -127,15 +131,19 @@ err:
} }
// cleanup temporary SG list /** cleanup temporary SG list */
void uninit_temp_sg( void )
void
uninit_temp_sg(void)
{ {
locked_pool->destroy( temp_sg_pool ); locked_pool->destroy(temp_sg_pool);
} }
// destroy SG list buffer /** destroy SG list buffer */
void cleanup_tmp_sg( scsi_ccb *ccb )
void
cleanup_tmp_sg(scsi_ccb *ccb)
{ {
status_t res; status_t res;
@@ -143,15 +151,15 @@ void cleanup_tmp_sg( scsi_ccb *ccb )
ccb, ccb->data, (int)ccb->data_len ); ccb, ccb->data, (int)ccb->data_len );
res = unlock_memory( ccb->data, ccb->data_len, B_DMA_IO | res = unlock_memory( ccb->data, ccb->data_len, B_DMA_IO |
( (ccb->flags & SCSI_DIR_MASK) == SCSI_DIR_IN ? B_READ_DEVICE : 0 )); ((ccb->flags & SCSI_DIR_MASK) == SCSI_DIR_IN ? B_READ_DEVICE : 0));
if (res != B_OK) { if (res != B_OK) {
SHOW_FLOW0(3, "Cannot unlock previously locked memory!"); SHOW_FLOW0(3, "Cannot unlock previously locked memory!");
panic("Cannot unlock previously locked memory!"); panic("Cannot unlock previously locked memory!");
} }
locked_pool->free(temp_sg_pool, (physical_entry *)ccb->sg_list); locked_pool->free(temp_sg_pool, (physical_entry *)ccb->sg_list);
// restore previous state // restore previous state
ccb->sg_list = NULL; ccb->sg_list = NULL;
} }