diff --git a/scst/src/scst_mem.c b/scst/src/scst_mem.c index 85c780c44..f4f4b4096 100644 --- a/scst/src/scst_mem.c +++ b/scst/src/scst_mem.c @@ -1519,6 +1519,9 @@ static void sgv_pool_destroy(struct sgv_pool *pool) TRACE_ENTRY(); + if (unlikely(!pool)) + goto out; + sgv_pool_flush(pool); mutex_lock(&sgv_pools_mutex); @@ -1540,6 +1543,7 @@ static void sgv_pool_destroy(struct sgv_pool *pool) kmem_cache_free(sgv_pool_cachep, pool); +out: TRACE_EXIT(); return; } @@ -1802,18 +1806,15 @@ out: out_free_per_cpu_dma: for (i = 0; i < nr_cpu_ids; i++) - if (sgv_dma_pool_per_cpu[i] != NULL) - sgv_pool_destroy(sgv_dma_pool_per_cpu[i]); + sgv_pool_destroy(sgv_dma_pool_per_cpu[i]); out_free_per_cpu_clust: for (i = 0; i < nr_cpu_ids; i++) - if (sgv_norm_clust_pool_per_cpu[i] != NULL) - sgv_pool_destroy(sgv_norm_clust_pool_per_cpu[i]); + sgv_pool_destroy(sgv_norm_clust_pool_per_cpu[i]); out_free_per_cpu_norm: for (i = 0; i < nr_cpu_ids; i++) - if (sgv_norm_pool_per_cpu[i] != NULL) - sgv_pool_destroy(sgv_norm_pool_per_cpu[i]); + sgv_pool_destroy(sgv_norm_pool_per_cpu[i]); sgv_pool_destroy(sgv_dma_pool_main); @@ -1841,18 +1842,15 @@ void scst_sgv_pools_deinit(void) sgv_pool_destroy(sgv_dma_pool_main); for (i = 0; i < nr_cpu_ids; i++) - if (sgv_dma_pool_per_cpu[i] != NULL) - sgv_pool_destroy(sgv_dma_pool_per_cpu[i]); + sgv_pool_destroy(sgv_dma_pool_per_cpu[i]); sgv_pool_destroy(sgv_norm_pool_main); for (i = 0; i < nr_cpu_ids; i++) - if (sgv_norm_pool_per_cpu[i] != NULL) - sgv_pool_destroy(sgv_norm_pool_per_cpu[i]); + sgv_pool_destroy(sgv_norm_pool_per_cpu[i]); sgv_pool_destroy(sgv_norm_clust_pool_main); for (i = 0; i < nr_cpu_ids; i++) - if (sgv_norm_clust_pool_per_cpu[i] != NULL) - sgv_pool_destroy(sgv_norm_clust_pool_per_cpu[i]); + sgv_pool_destroy(sgv_norm_clust_pool_per_cpu[i]); for (i = 0; i < nr_cpu_ids; i++) sgv_norm_pool_global[i] = NULL;