Re: 2.6.23-rc1-mm1: reiser4 <-> lzo compile error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Adrian Bunk wrote:

<--  snip  -->

...
 LD      .tmp_vmlinux1
lib/built-in.o: In function `lzo1x_1_compress':
(.text+0x13eae): multiple definition of `lzo1x_1_compress'
fs/built-in.o:(.text+0x117075): first defined here
make[1]: *** [.tmp_vmlinux1] Error 1

<--  snip  -->

AFAIR, we once had a patch in -mm changing reiser4 to use the
LZO code that is now in the kernel?

cu
Adrian

Sorry, guys, I am not happy with the modified LZO:
the compressor tries to test bytes which are out of bounds.

The attached module testlzo.c causes an oops in the second pass:
AFAIK, both, @m and @m_pos should be in [wrkmem, wrkmem + 64K);
I have attached trace.txt with their actual values.

Not ready to migrate to this library.

Any ideas?

Thanks,
Edward.

P.S.
kernel: 2.6.23-rc1-mm1
box: x86
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/lzo.h>
#include <linux/vmalloc.h>

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Compress 64K zeroed chunk");

#define CHUNK_SIZE 65536
#define NR_PASSES 2

static int __init lkp_init( void )
{
	int i;
	int ret;
	void * wrkmem;
	unsigned char * src_buf;
	unsigned char * dst_buf;
	size_t src_len;
	size_t dst_len;

	src_len = CHUNK_SIZE;
	dst_len = lzo1x_worst_compress(src_len);

	printk("<1> Testing LZO: start...\n");

	wrkmem = vmalloc(LZO1X_1_MEM_COMPRESS);
	if (!wrkmem)
		goto enomem;
	src_buf = vmalloc(src_len);
	if (!src_buf) {
		vfree(wrkmem);
		goto enomem;
	}
	memset(src_buf, 0, src_len);

	dst_buf = vmalloc(dst_len);
	if (!dst_buf) {
		vfree(wrkmem);
		vfree(src_buf);
		goto enomem;
	}
	for (i = 0; i < NR_PASSES; i++) {
		size_t out_len;
		ret = lzo1x_1_compress(src_buf, src_len,
				       dst_buf, &out_len,
				       wrkmem);
		if (ret)
			break;
		printk("pass %d: compressed to %d bytes\n", i, out_len);
	}
	vfree(wrkmem);
	vfree(src_buf);
	vfree(dst_buf);
	return ret;
 enomem:
	printk("vmalloc failed\n");
	return -ENOMEM;
}

static void __exit lkp_cleanup( void )
{
	printk("<1>Testing LZO : finish\n");
}
module_init(lkp_init);
module_exit(lkp_cleanup);
Program received signal SIGSEGV, Segmentation fault.
0xc02efec8 in _lzo1x_1_do_compress (in=0xe08c9000 "", in_len=Variable "in_len" is not available.
) at lzo1x_compress.c:130
130                                     ip++;
(gdb) p m
$2 = (const unsigned char *) 0xe08d9000 <Address 0xe08d9000 out of bounds>
(gdb) p wrkmem
$3 = (void *) 0xe08b8000
(gdb) p m - wrkmem
$4 = 135168
(gdb) p m_pos
$5 = (const unsigned char *) 0xe08c9005 ""
(gdb) p m_pos - wrkmem
$6 = 69637

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux