|
@@ -377,6 +377,10 @@ scsi_alloc_host_cmd_pool(struct Scsi_Host *shost)
|
|
|
pool->slab_flags |= SLAB_CACHE_DMA;
|
|
|
pool->gfp_mask = __GFP_DMA;
|
|
|
}
|
|
|
+
|
|
|
+ if (hostt->cmd_size)
|
|
|
+ hostt->cmd_pool = pool;
|
|
|
+
|
|
|
return pool;
|
|
|
}
|
|
|
|
|
@@ -421,8 +425,10 @@ out:
|
|
|
out_free_slab:
|
|
|
kmem_cache_destroy(pool->cmd_slab);
|
|
|
out_free_pool:
|
|
|
- if (hostt->cmd_size)
|
|
|
+ if (hostt->cmd_size) {
|
|
|
scsi_free_host_cmd_pool(pool);
|
|
|
+ hostt->cmd_pool = NULL;
|
|
|
+ }
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
@@ -444,8 +450,10 @@ static void scsi_put_host_cmd_pool(struct Scsi_Host *shost)
|
|
|
if (!--pool->users) {
|
|
|
kmem_cache_destroy(pool->cmd_slab);
|
|
|
kmem_cache_destroy(pool->sense_slab);
|
|
|
- if (hostt->cmd_size)
|
|
|
+ if (hostt->cmd_size) {
|
|
|
scsi_free_host_cmd_pool(pool);
|
|
|
+ hostt->cmd_pool = NULL;
|
|
|
+ }
|
|
|
}
|
|
|
mutex_unlock(&host_cmd_pool_mutex);
|
|
|
}
|