From c5469e612652346436a0cde469b47d3c3d9e48a6 Mon Sep 17 00:00:00 2001 From: Vladislav Bolkhovitin Date: Tue, 25 Sep 2007 09:39:04 +0000 Subject: [PATCH] - Patch from Krzysztof Blaszkowski with some cosmetics: fixes sometimes incorrect active_pages_total accounting git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@197 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scst/src/scst_mem.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scst/src/scst_mem.c b/scst/src/scst_mem.c index 3c1afacbf..92a59556b 100644 --- a/scst/src/scst_mem.c +++ b/scst/src/scst_mem.c @@ -416,7 +416,6 @@ static int sgv_pool_cached_purge(struct sgv_pool_obj *e, int t, unsigned long rt) { EXTRACHECKS_BUG_ON(t == 0); - EXTRACHECKS_BUG_ON(rt == 0); if (time_after(rt, (e->recycle_entry.time_stamp + t))) { __sgv_pool_cached_purge(e); @@ -710,23 +709,26 @@ void *sgv_get_priv(struct sgv_pool_obj *sgv) void sgv_pool_free(struct sgv_pool_obj *sgv) { - int order = sgv->order; + int order = sgv->order, pages; TRACE_MEM("Freeing sgv_obj %p, order %d, sg_entries %p, " "sg_count %d, allocator_priv %p", sgv, order, sgv->sg_entries, sgv->sg_count, sgv->allocator_priv); if (order >= 0) { sgv->sg_entries[sgv->orig_sg].length = sgv->orig_length; + + pages = (sgv->sg_count) ? 1 << order : 0; sgv_pool_cached_put(sgv); } else { sgv->owner_pool->alloc_fns.free_pages_fn(sgv->sg_entries, sgv->sg_count, sgv->allocator_priv); + + pages = (sgv->sg_count) ? 1 << (-order - 1) : 0; kfree(sgv); - order = -order - 1; } spin_lock_bh(&sgv_pools_mgr.mgr.pool_mgr_lock); - sgv_pools_mgr.mgr.thr.active_pages_total -= 1 << order; + sgv_pools_mgr.mgr.thr.active_pages_total -= pages; spin_unlock_bh(&sgv_pools_mgr.mgr.pool_mgr_lock); return; }