diff -ru cloop-2.01.orig/Makefile cloop-2.01/Makefile
--- cloop-2.01.orig/Makefile	2004-05-14 15:17:51.000000000 -0400
+++ cloop-2.01/Makefile	2004-11-24 11:14:24.980695520 -0500
@@ -1,20 +1,20 @@
 #!/usr/bin/make
 
-KERNEL_DIR=/usr/src/linux
+KERNEL_DIR?=/usr/src/linux
 
-ifdef APPSONLY
-CFLAGS:=-Wall -Wstrict-prototypes -Wno-trigraphs -O2 -s -I. -fno-strict-aliasing -fno-common -fomit-frame-pointer 
-else
-include $(KERNEL_DIR)/.config
-include $(KERNEL_DIR)/conf.vars
-endif
+# cloop overrides user CFLAGS
+CFLAGS:=-Wall -Wstrict-prototypes -Wno-trigraphs -O2 -s -I. -fno-strict-aliasing -fno-common -fomit-frame-pointer
+-include $(KERNEL_DIR)/.config
+-include $(KERNEL_DIR)/conf.vars
 
 CKERNOPS:=-D__KERNEL__ -DMODULE -fno-builtin -nostdlib -DKBUILD_MODNAME="cloop" -DKBUILD_BASENAME="cloop"
 
 ifdef CONFIG_MODVERSIONS
+ifneq ($(shell grep . $(KERNEL_DIR)/include/linux/modversions.h 2>/dev/null),)
 MODVERSIONS:= -DMODVERSIONS -include $(KERNEL_DIR)/include/linux/modversions.h
 CKERNOPS += $(MODVERSIONS)
 endif
+endif
 
 # Check for SMP in config and #define __SMP__ if necessary.
 # This is ESSENTIAL when compiling a SMP version of cloop.o
@@ -26,19 +26,38 @@
 
 KERNOBJ:=compressed_loop.o
 
+all: $(MODULE) utils
+
 # Name of module
 ifeq ($(PATCHLEVEL),6)
 MODULE:=cloop.ko
 else
 MODULE:=cloop.o
+
+#it still may be a 2.6 header tree
+ifneq ($(shell grep 'UTS.*2.6' $(KERNEL_DIR)/include/linux/version.h),)
+MODULE:=cloop.ko
 endif
 
-ALL_TARGETS = create_compressed_fs extract_compressed_fs
-ifndef APPSONLY
-ALL_TARGETS += $(MODULE)
 endif
 
-all: $(ALL_TARGETS)
+# needed on some 2.6 systems with broken or with 2.4 headers
+ifeq ($(MODULE),cloop.ko)
+CKERNOPS+= -D__OPTIMIZE__
+endif
+
+# check for amd64
+ifeq ($(shell uname -m),x86_64)
+CKERNOPS+=-mno-red-zone -mcmodel=kernel
+endif
+
+# Add compressloop when it has been fixed
+utils: create_compressed_fs extract_compressed_fs
+#
+#cloop.ko: cloop.o
+#	cp cloop.o cloop.ko
+
+all: utils $(MODULE)
 
 $(MODULE): compressed_loop.o
 	@echo "Building for Kernel Patchlevel $(PATCHLEVEL)"
@@ -49,6 +68,7 @@
 	ln -f $< $@
 
 advancecomp-1.9_create_compressed_fs/advfs:
+	test -e advancecomp-1.9_create_compressed_fs/config.status || ( cd advancecomp-1.9_create_compressed_fs && ./configure CXXFLAGS="-D__OPTIMIZE__" )
 	( $(MAKE) -C advancecomp-1.9_create_compressed_fs advfs )
 
 
@@ -57,7 +77,7 @@
 
 clean:
 	rm -f $(KERNOBJ) create_compressed_fs extract_compressed_fs zoom *.o *.ko
-	$(MAKE) -C advancecomp-1.9_create_compressed_fs clean
+	$(MAKE) -C advancecomp-1.9_create_compressed_fs distclean
 
 dist: clean
 	cd .. ; \
@@ -69,3 +89,4 @@
 	$(CC) -I$(KERNEL_DIR)/include -I$(KERNEL_DIR)/include/asm/mach-default $(CFLAGS) $(CKERNOPS) $< -c -o $@
 
 compressed_loop.o create_compressed_fs.o: compressed_loop.h
+
diff -ru cloop-2.01.orig/compressed_loop.c cloop-2.01/compressed_loop.c
--- cloop-2.01.orig/compressed_loop.c	2004-07-27 18:44:11.000000000 -0400
+++ cloop-2.01/compressed_loop.c	2004-11-24 10:59:04.224671712 -0500
@@ -202,7 +202,11 @@
                           unsigned long offset, unsigned long size)
 {
  char *kaddr;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,7)
+ struct clo_read_data *p = (struct clo_read_data*)desc->arg.buf;
+#else
  struct clo_read_data *p = (struct clo_read_data*)desc->buf;
+#endif
  unsigned long count = desc->count;
  if (size > count) size = count;
  kaddr = kmap(page);
@@ -228,7 +232,11 @@
    read_descriptor_t desc;
    desc.written = 0;
    desc.count   = size;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,7)
+   desc.arg.buf = (char*)&cd;
+#else
    desc.buf     = (char*)&cd;
+#endif
    desc.error   = 0;
 #ifdef REDHAT_KERNEL /* Greenshoe Linux */
    do_generic_file_read(f, &pos, &desc, clo_read_actor, 0);

