diff --git a/src/lib/small/mempool.c b/src/lib/small/mempool.c
index 99dd415508d9218b103624ddb8fc52c6223945bb..052242470a0f627ba6f1382322c145b6ba3e182c 100644
--- a/src/lib/small/mempool.c
+++ b/src/lib/small/mempool.c
@@ -54,7 +54,7 @@ mslab_create(struct mslab *slab, struct mempool *pool)
 }
 
 /** Beginning of object data in the slab. */
-void *
+static inline void *
 mslab_offset(struct mslab *slab)
 {
 	return (char *) slab + mslab_sizeof() +
diff --git a/src/lib/small/small.h b/src/lib/small/small.h
index 08a30da847e0ed4c67231102be3e0c49db5a2ab0..2ae8a9029ff43366c1cc5984b06c4e41bcf24221 100644
--- a/src/lib/small/small.h
+++ b/src/lib/small/small.h
@@ -206,7 +206,8 @@ smfree(struct small_alloc *alloc, void *ptr)
 	struct mslab *slab = (struct mslab *)
 		slab_from_ptr(alloc->cache, ptr, alloc->slab_order);
 	struct mempool *pool = slab->pool;
-	mempool_free(pool, ptr);
+	pool->slabs.stats.used -= pool->objsize;
+	mslab_free(pool, slab, ptr);
 	/*
 	 * Don't keep around empty factored pools
 	 * if the allocator is out of them.