MINOR: compression: report zlib memory usage

Show the memory usage and the max memory available for zlib.
The value stored is now the memory used instead of the remaining
available memory.
diff --git a/src/cfgparse.c b/src/cfgparse.c
index d4b3d91..1fe2708 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -885,7 +885,7 @@
 			err_code |= ERR_ALERT | ERR_FATAL;
 			goto out;
 		}
-		global.maxzlibmem = atol(args[1]);
+		global.maxzlibmem = atol(args[1]) * 1024L * 1024L;
 	}
 	else if (!strcmp(args[0], "ulimit-n")) {
 		if (global.rlimit_nofile != 0) {
diff --git a/src/compression.c b/src/compression.c
index c1e1afd..1df0f57 100644
--- a/src/compression.c
+++ b/src/compression.c
@@ -47,7 +47,7 @@
 static struct pool_head *zlib_pool_head = NULL;
 static struct pool_head *zlib_pool_pending_buf = NULL;
 
-static long long zlib_memory_available = -1;
+long zlib_used_memory = 0;
 
 #endif
 
@@ -301,10 +301,7 @@
 #ifdef USE_ZLIB
 	z_stream *strm;
 
-	if (global.maxzlibmem > 0 && zlib_memory_available < 0)
-		zlib_memory_available = global.maxzlibmem * 1024 * 1024;  /*  Megabytes to bytes */
-
-	if (global.maxzlibmem > 0 && zlib_memory_available < sizeof(struct comp_ctx))
+	if (global.maxzlibmem > 0 && (global.maxzlibmem - zlib_used_memory) < sizeof(struct comp_ctx))
 		return -1;
 #endif
 
@@ -315,7 +312,7 @@
 	if (*comp_ctx == NULL)
 		return -1;
 #ifdef USE_ZLIB
-	zlib_memory_available -= sizeof(struct comp_ctx);
+	zlib_used_memory += sizeof(struct comp_ctx);
 
 	strm = &(*comp_ctx)->strm;
 	strm->zalloc = alloc_zlib;
@@ -337,9 +334,8 @@
 	*comp_ctx = NULL;
 
 #ifdef USE_ZLIB
-	zlib_memory_available += sizeof(struct comp_ctx);
+	zlib_used_memory -= sizeof(struct comp_ctx);
 #endif
-
 	return 0;
 }
 
@@ -380,7 +376,6 @@
 	return 0;
 }
 
-
 int identity_reset(struct comp_ctx *comp_ctx)
 {
 	return 0;
@@ -406,10 +401,8 @@
 	static char round = 0; /* order in deflateInit2 */
 	void *buf = NULL;
 
-	if (global.maxzlibmem > 0 && zlib_memory_available < items * size){
-		buf = NULL;
+	if (global.maxzlibmem > 0 && (global.maxzlibmem - zlib_used_memory) < (long)(items * size))
 		goto end;
-	}
 
 	switch (round) {
 		case 0:
@@ -442,8 +435,8 @@
 			ctx->zlib_pending_buf = buf = pool_alloc2(zlib_pool_pending_buf);
 		break;
 	}
-	if (buf != NULL && global.maxzlibmem > 0)
-		zlib_memory_available -= items * size;
+	if (buf != NULL)
+		zlib_used_memory += items * size;
 
 end:
 
@@ -474,8 +467,7 @@
 		pool = zlib_pool_pending_buf;
 
 	pool_free2(pool, ptr);
-	if (global.maxzlibmem > 0)
-		zlib_memory_available += pool->size;
+	zlib_used_memory -= pool->size;
 }
 
 /**************************
diff --git a/src/dumpstats.c b/src/dumpstats.c
index 32825b0..2a07140 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -42,6 +42,7 @@
 #include <proto/backend.h>
 #include <proto/channel.h>
 #include <proto/checks.h>
+#include <proto/compression.h>
 #include <proto/dumpstats.h>
 #include <proto/fd.h>
 #include <proto/freq_ctr.h>
@@ -1747,6 +1748,10 @@
 				     "CompressBpsIn: %u\n"
 				     "CompressBpsOut: %u\n"
 				     "CompressBpsRateLim: %u\n"
+#ifdef USE_ZLIB
+				     "ZlibMemUsage: %ld\n"
+				     "MaxZlibMemUsage: %ld\n"
+#endif
 				     "Tasks: %d\n"
 				     "Run_queue: %d\n"
 				     "Idle_pct: %d\n"
@@ -1765,6 +1770,9 @@
 				     read_freq_ctr(&global.conn_per_sec), global.cps_lim, global.cps_max,
 				     read_freq_ctr(&global.comp_bps_in), read_freq_ctr(&global.comp_bps_out),
 				     global.comp_rate_lim,
+#ifdef USE_ZLIB
+				     zlib_used_memory, global.maxzlibmem,
+#endif
 				     nb_tasks_cur, run_queue_cur, idle_pct,
 				     global.node, global.desc?global.desc:""
 				     );