diff options
-rw-r--r-- | drivers/block/cciss_scsi.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/block/cciss_scsi.c b/drivers/block/cciss_scsi.c index 727d0225b7d0..3bfbde8b4013 100644 --- a/drivers/block/cciss_scsi.c +++ b/drivers/block/cciss_scsi.c | |||
@@ -226,6 +226,13 @@ scsi_cmd_stack_setup(ctlr_info_t *h, struct cciss_scsi_adapter_data_t *sa) | |||
226 | return -ENOMEM; | 226 | return -ENOMEM; |
227 | } | 227 | } |
228 | 228 | ||
229 | stk->elem = kmalloc(sizeof(stk->elem[0]) * stk->nelems, GFP_KERNEL); | ||
230 | if (!stk->elem) { | ||
231 | pci_free_consistent(h->pdev, size, stk->pool, | ||
232 | stk->cmd_pool_handle); | ||
233 | return -1; | ||
234 | } | ||
235 | |||
229 | for (i=0; i<CMD_STACK_SIZE; i++) { | 236 | for (i=0; i<CMD_STACK_SIZE; i++) { |
230 | stk->elem[i] = &stk->pool[i]; | 237 | stk->elem[i] = &stk->pool[i]; |
231 | stk->elem[i]->busaddr = (__u32) (stk->cmd_pool_handle + | 238 | stk->elem[i]->busaddr = (__u32) (stk->cmd_pool_handle + |
@@ -255,6 +262,8 @@ scsi_cmd_stack_free(ctlr_info_t *h) | |||
255 | pci_free_consistent(h->pdev, size, stk->pool, stk->cmd_pool_handle); | 262 | pci_free_consistent(h->pdev, size, stk->pool, stk->cmd_pool_handle); |
256 | stk->pool = NULL; | 263 | stk->pool = NULL; |
257 | cciss_free_sg_chain_blocks(sa->cmd_sg_list, CMD_STACK_SIZE); | 264 | cciss_free_sg_chain_blocks(sa->cmd_sg_list, CMD_STACK_SIZE); |
265 | kfree(stk->elem); | ||
266 | stk->elem = NULL; | ||
258 | } | 267 | } |
259 | 268 | ||
260 | #if 0 | 269 | #if 0 |