summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile5
-rw-r--r--README3
-rw-r--r--makedumpfile.81
-rw-r--r--makedumpfile.c24
-rw-r--r--makedumpfile.h2
-rw-r--r--print_info.c4
6 files changed, 37 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index a06b2db..28c881a 100644
--- a/Makefile
+++ b/Makefile
@@ -50,6 +50,11 @@ ifneq ($(LINKTYPE), dynamic)
LIBS := -static $(LIBS)
endif
+ifeq ($(USELZO), on)
+LIBS := -llzo2 $(LIBS)
+CFLAGS += -DUSELZO
+endif
+
all: makedumpfile
$(OBJ_PART): $(SRC_PART)
diff --git a/README b/README
index a96f035..ede16d6 100644
--- a/README
+++ b/README
@@ -42,6 +42,9 @@
where <arch> is the 'uname -m' of the target architecture.
The user has to set the environment variable CC to appropriate
compiler for the target architecture.
+ 6.Build with lzo support:
+ # make USELZO=on ; make install
+ The user has to prepare lzo library.
* SUPPORTED KERNELS
This makedumpfile supports the following kernels.
diff --git a/makedumpfile.8 b/makedumpfile.8
index 5adadae..2b452ab 100644
--- a/makedumpfile.8
+++ b/makedumpfile.8
@@ -123,6 +123,7 @@ configuration, you need to use --diskset option.
.TP
\fB\-c,\-l\fR
Compress dump data by each page using zlib for -c option or lzo for -l option.
+(-l option needs USELZO=on when building.)
.br
A user cannot specify this option with \-E option, because the ELF format does
not support compressed data.
diff --git a/makedumpfile.c b/makedumpfile.c
index a7fec52..d024e95 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -266,6 +266,7 @@ readpmem_kdump_compressed(unsigned long long paddr, void *bufptr, size_t size)
goto error;
}
memcpy(bufptr, buf2 + page_offset, size);
+#ifdef USELZO
} else if (info->flag_lzo_support
&& (pd.flags & DUMP_DH_COMPRESSED_LZO)) {
retlen = info->page_size;
@@ -277,6 +278,7 @@ readpmem_kdump_compressed(unsigned long long paddr, void *bufptr, size_t size)
goto error;
}
memcpy(bufptr, buf2 + page_offset, size);
+#endif
} else
memcpy(bufptr, buf + page_offset, size);
@@ -2525,8 +2527,16 @@ initial(void)
unsigned long size;
int debug_info = FALSE;
+#ifdef USELZO
if (lzo_init() == LZO_E_OK)
info->flag_lzo_support = TRUE;
+#else
+ if (info->flag_compress == DUMP_DH_COMPRESSED_LZO) {
+ MSG("'-l' option is disabled, ");
+ MSG("because this binary doesn't support lzo compression.\n");
+ MSG("Try `make USELZO=on` when building.\n");
+ }
+#endif
if (!is_xen_memory() && info->flag_exclude_xen_dom) {
MSG("'-X' option is disable,");
@@ -4695,11 +4705,10 @@ write_kdump_pages(struct cache_data *cd_header, struct cache_data *cd_page)
off_t offset_data = 0;
struct disk_dump_header *dh = info->dump_header;
unsigned char buf[info->page_size], *buf_out = NULL;
- unsigned long len_buf_out, len_buf_out_zlib, len_buf_out_lzo;
+ unsigned long len_buf_out;
struct dump_bitmap bitmap2;
struct timeval tv_start;
const off_t failed = (off_t)-1;
- lzo_bytep wrkmem = NULL;
int ret = FALSE;
@@ -4708,6 +4717,10 @@ write_kdump_pages(struct cache_data *cd_header, struct cache_data *cd_page)
initialize_2nd_bitmap(&bitmap2);
+#ifdef USELZO
+ unsigned long len_buf_out_zlib, len_buf_out_lzo;
+ lzo_bytep wrkmem;
+
if ((wrkmem = malloc(LZO1X_1_MEM_COMPRESS)) == NULL) {
ERRMSG("Can't allocate memory for the working memory. %s\n",
strerror(errno));
@@ -4717,6 +4730,9 @@ write_kdump_pages(struct cache_data *cd_header, struct cache_data *cd_page)
len_buf_out_zlib = compressBound(info->page_size);
len_buf_out_lzo = info->page_size + info->page_size / 16 + 64 + 3;
len_buf_out = MAX(len_buf_out_zlib, len_buf_out_lzo);
+#else
+ len_buf_out = compressBound(info->page_size);
+#endif
if ((buf_out = malloc(len_buf_out)) == NULL) {
ERRMSG("Can't allocate memory for the compression buffer. %s\n",
@@ -4807,6 +4823,7 @@ write_kdump_pages(struct cache_data *cd_header, struct cache_data *cd_page)
pd.flags = DUMP_DH_COMPRESSED_ZLIB;
pd.size = size_out;
memcpy(buf, buf_out, pd.size);
+#ifdef USELZO
} else if (info->flag_lzo_support
&& (info->flag_compress & DUMP_DH_COMPRESSED_LZO)
&& ((size_out = info->page_size),
@@ -4816,6 +4833,7 @@ write_kdump_pages(struct cache_data *cd_header, struct cache_data *cd_page)
pd.flags = DUMP_DH_COMPRESSED_LZO;
pd.size = size_out;
memcpy(buf, buf_out, pd.size);
+#endif
} else {
pd.flags = 0;
pd.size = info->page_size;
@@ -4856,8 +4874,10 @@ write_kdump_pages(struct cache_data *cd_header, struct cache_data *cd_page)
out:
if (buf_out != NULL)
free(buf_out);
+#ifdef USELZO
if (wrkmem != NULL)
free(wrkmem);
+#endif
return ret;
}
diff --git a/makedumpfile.h b/makedumpfile.h
index 38782a3..4a6088a 100644
--- a/makedumpfile.h
+++ b/makedumpfile.h
@@ -31,7 +31,9 @@
#include <libelf.h>
#include <byteswap.h>
#include <getopt.h>
+#ifdef USELZO
#include <lzo/lzo1x.h>
+#endif
#include "common.h"
#include "dwarf_info.h"
#include "diskdump_mod.h"
diff --git a/print_info.c b/print_info.c
index e68ae5f..61cafed 100644
--- a/print_info.c
+++ b/print_info.c
@@ -34,7 +34,11 @@ print_usage(void)
{
MSG("\n");
MSG("LZO support:\n");
+#ifdef USELZO
MSG(" enabled\n");
+#else
+ MSG(" disabled ('-l' option will be ignored.)\n");
+#endif
MSG("\n");
MSG("Usage:\n");
MSG(" Creating DUMPFILE:\n");