diff --git a/fs/jffs2/LICENCE b/fs/jffs2/LICENCE
new file mode 100644
index 0000000000000000000000000000000000000000..562885908135eb88185a0e62da4201ffd264bcdd
--- /dev/null
+++ b/fs/jffs2/LICENCE
@@ -0,0 +1,30 @@
+The files in this directory and elsewhere which refer to this LICENCE
+file are part of JFFS2, the Journalling Flash File System v2.
+
+	Copyright © 2001-2007 Red Hat, Inc. and others
+
+JFFS2 is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2 or (at your option) any later 
+version.
+
+JFFS2 is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with JFFS2; if not, write to the Free Software Foundation, Inc.,
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+As a special exception, if other files instantiate templates or use
+macros or inline functions from these files, or you compile these
+files and link them with other works to produce a work based on these
+files, these files do not by themselves cause the resulting work to be
+covered by the GNU General Public License. However the source code for
+these files must still be made available in accordance with section (3)
+of the GNU General Public License.
+
+This exception does not invalidate any other reasons why a work based on
+this file might be covered by the GNU General Public License.
+
diff --git a/fs/jffs2/Makefile b/fs/jffs2/Makefile
index fd6a1050c67d14a4f7e03e9afd34fc7fa215da59..7c9fb41b8d64c2698eca4c5dd683cb5eebdf6a65 100644
--- a/fs/jffs2/Makefile
+++ b/fs/jffs2/Makefile
@@ -27,8 +27,7 @@ LIB	= $(obj)libjffs2.a
 
 AOBJS	=
 ifdef CONFIG_CMD_JFFS2
-COBJS-$(CONFIG_JFFS2_LZO_LZARI) += compr_lzari.o
-COBJS-$(CONFIG_JFFS2_LZO_LZARI) += compr_lzo.o
+COBJS-$(CONFIG_JFFS2_LZO) += compr_lzo.o
 COBJS-y += compr_rtime.o
 COBJS-y += compr_rubin.o
 COBJS-y += compr_zlib.o
diff --git a/fs/jffs2/compr_lzari.c b/fs/jffs2/compr_lzari.c
deleted file mode 100644
index 6a296085620a6a86b57fb58e41f53d45689bdc20..0000000000000000000000000000000000000000
--- a/fs/jffs2/compr_lzari.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * JFFS2 -- Journalling Flash File System, Version 2.
- *
- * Copyright (C) 2004 Patrik Kluba,
- *                    University of Szeged, Hungary
- *
- * For licensing information, see the file 'LICENCE' in the
- * jffs2 directory.
- *
- * $Id: compr_lzari.c,v 1.3 2004/06/23 16:34:39 havasi Exp $
- *
- */
-
-/*
-   Lempel-Ziv-Arithmetic coding compression module for jffs2
-   Based on the LZARI source included in LDS (lossless datacompression sources)
-*/
-
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
-
-/*
-Original copyright follows:
-
-**************************************************************
-	LZARI.C -- A Data Compression Program
-	(tab = 4 spaces)
-**************************************************************
-	4/7/1989 Haruhiko Okumura
-	Use, distribute, and modify this program freely.
-	Please send me your improved versions.
-		PC-VAN		SCIENCE
-		NIFTY-Serve	PAF01022
-		CompuServe	74050,1022
-**************************************************************
-
-LZARI.C (c)1989 by Haruyasu Yoshizaki, Haruhiko Okumura, and Kenji Rikitake.
-All rights reserved. Permission granted for non-commercial use.
-
-*/
-
-/*
-
-	2004-02-18  pajko <pajko(AT)halom(DOT)u-szeged(DOT)hu>
-				Removed unused variables and fixed no return value
-
-	2004-02-16  pajko <pajko(AT)halom(DOT)u-szeged(DOT)hu>
-				Initial release
-
-*/
-
-
-#include <config.h>
-#include <linux/stddef.h>
-#include <jffs2/jffs2.h>
-
-
-#define N			4096	/* size of ring buffer */
-#define F			60	/* upper limit for match_length */
-#define THRESHOLD		2	/* encode string into position and length
-					   if match_length is greater than this */
-#define NIL			N	/* index for root of binary search trees */
-
-static unsigned char
-		text_buf[N + F - 1];	/* ring buffer of size N,
-			with extra F-1 bytes to facilitate string comparison */
-
-/********** Arithmetic Compression **********/
-
-/*  If you are not familiar with arithmetic compression, you should read
-		I. E. Witten, R. M. Neal, and J. G. Cleary,
-			Communications of the ACM, Vol. 30, pp. 520-540 (1987),
-	from which much have been borrowed.  */
-
-#define M   15
-
-/*	Q1 (= 2 to the M) must be sufficiently large, but not so
-	large as the unsigned long 4 * Q1 * (Q1 - 1) overflows.  */
-
-#define Q1  (1UL << M)
-#define Q2  (2 * Q1)
-#define Q3  (3 * Q1)
-#define Q4  (4 * Q1)
-#define MAX_CUM (Q1 - 1)
-
-#define N_CHAR  (256 - THRESHOLD + F)
-	/* character code = 0, 1, ..., N_CHAR - 1 */
-
-static unsigned long char_to_sym[N_CHAR], sym_to_char[N_CHAR + 1];
-static unsigned long
-	sym_freq[N_CHAR + 1],  /* frequency for symbols */
-	sym_cum[N_CHAR + 1],   /* cumulative freq for symbols */
-	position_cum[N + 1];   /* cumulative freq for positions */
-
-static void StartModel(void)  /* Initialize model */
-{
-	unsigned long ch, sym, i;
-
-	sym_cum[N_CHAR] = 0;
-	for (sym = N_CHAR; sym >= 1; sym--) {
-		ch = sym - 1;
-		char_to_sym[ch] = sym;  sym_to_char[sym] = ch;
-		sym_freq[sym] = 1;
-		sym_cum[sym - 1] = sym_cum[sym] + sym_freq[sym];
-	}
-	sym_freq[0] = 0;  /* sentinel (!= sym_freq[1]) */
-	position_cum[N] = 0;
-	for (i = N; i >= 1; i--)
-		position_cum[i - 1] = position_cum[i] + 10000 / (i + 200);
-			/* empirical distribution function (quite tentative) */
-			/* Please devise a better mechanism! */
-}
-
-static void UpdateModel(unsigned long sym)
-{
-	unsigned long c, ch_i, ch_sym;
-	unsigned long i;
-	if (sym_cum[0] >= MAX_CUM) {
-		c = 0;
-		for (i = N_CHAR; i > 0; i--) {
-			sym_cum[i] = c;
-			c += (sym_freq[i] = (sym_freq[i] + 1) >> 1);
-		}
-		sym_cum[0] = c;
-	}
-	for (i = sym; sym_freq[i] == sym_freq[i - 1]; i--) ;
-	if (i < sym) {
-		ch_i = sym_to_char[i];    ch_sym = sym_to_char[sym];
-		sym_to_char[i] = ch_sym;  sym_to_char[sym] = ch_i;
-		char_to_sym[ch_i] = sym;  char_to_sym[ch_sym] = i;
-	}
-	sym_freq[i]++;
-	while (--i > 0) sym_cum[i]++;
-	sym_cum[0]++;
-}
-
-static unsigned long BinarySearchSym(unsigned long x)
-	/* 1      if x >= sym_cum[1],
-	   N_CHAR if sym_cum[N_CHAR] > x,
-	   i such that sym_cum[i - 1] > x >= sym_cum[i] otherwise */
-{
-	unsigned long i, j, k;
-
-	i = 1;  j = N_CHAR;
-	while (i < j) {
-		k = (i + j) / 2;
-		if (sym_cum[k] > x) i = k + 1;  else j = k;
-	}
-	return i;
-}
-
-unsigned long BinarySearchPos(unsigned long x)
-	/* 0 if x >= position_cum[1],
-	   N - 1 if position_cum[N] > x,
-	   i such that position_cum[i] > x >= position_cum[i + 1] otherwise */
-{
-	unsigned long i, j, k;
-
-	i = 1;  j = N;
-	while (i < j) {
-		k = (i + j) / 2;
-		if (position_cum[k] > x) i = k + 1;  else j = k;
-	}
-	return i - 1;
-}
-
-static int Decode(unsigned char *srcbuf, unsigned char *dstbuf, unsigned long srclen,
-					unsigned long dstlen)	/* Just the reverse of Encode(). */
-{
-	unsigned long i, r, j, k, c, range, sym;
-	unsigned char *ip, *op;
-	unsigned char *srcend = srcbuf + srclen;
-	unsigned char *dstend = dstbuf + dstlen;
-	unsigned char buffer = 0;
-	unsigned char mask = 0;
-	unsigned long low = 0;
-	unsigned long high = Q4;
-	unsigned long value = 0;
-
-	ip = srcbuf;
-	op = dstbuf;
-	for (i = 0; i < M + 2; i++) {
-		value *= 2;
-		if ((mask >>= 1) == 0) {
-			buffer = (ip >= srcend) ? 0 : *(ip++);
-			mask = 128;
-		}
-		value += ((buffer & mask) != 0);
-	}
-
-	StartModel();
-	for (i = 0; i < N - F; i++) text_buf[i] = ' ';
-	r = N - F;
-
-	while (op < dstend) {
-		range = high - low;
-		sym = BinarySearchSym((unsigned long)
-				(((value - low + 1) * sym_cum[0] - 1) / range));
-		high = low + (range * sym_cum[sym - 1]) / sym_cum[0];
-		low +=       (range * sym_cum[sym    ]) / sym_cum[0];
-		for ( ; ; ) {
-			if (low >= Q2) {
-				value -= Q2;  low -= Q2;  high -= Q2;
-			} else if (low >= Q1 && high <= Q3) {
-				value -= Q1;  low -= Q1;  high -= Q1;
-			} else if (high > Q2) break;
-			low += low;  high += high;
-			value *= 2;
-			if ((mask >>= 1) == 0) {
-				buffer = (ip >= srcend) ? 0 : *(ip++);
-				mask = 128;
-			}
-			value += ((buffer & mask) != 0);
-		}
-		c = sym_to_char[sym];
-		UpdateModel(sym);
-		if (c < 256) {
-			if (op >= dstend) return -1;
-			*(op++) = c;
-			text_buf[r++] = c;
-			r &= (N - 1);
-		} else {
-			j = c - 255 + THRESHOLD;
-			range = high - low;
-			i = BinarySearchPos((unsigned long)
-				(((value - low + 1) * position_cum[0] - 1) / range));
-			high = low + (range * position_cum[i    ]) / position_cum[0];
-			low +=       (range * position_cum[i + 1]) / position_cum[0];
-			for ( ; ; ) {
-				if (low >= Q2) {
-					value -= Q2;  low -= Q2;  high -= Q2;
-				} else if (low >= Q1 && high <= Q3) {
-					value -= Q1;  low -= Q1;  high -= Q1;
-				} else if (high > Q2) break;
-				low += low;  high += high;
-				value *= 2;
-				if ((mask >>= 1) == 0) {
-					buffer = (ip >= srcend) ? 0 : *(ip++);
-					mask = 128;
-				}
-				value += ((buffer & mask) != 0);
-			}
-			i = (r - i - 1) & (N - 1);
-			for (k = 0; k < j; k++) {
-				c = text_buf[(i + k) & (N - 1)];
-				if (op >= dstend) return -1;
-				*(op++) = c;
-				text_buf[r++] = c;
-				r &= (N - 1);
-			}
-		}
-	}
-	return 0;
-}
-
-int lzari_decompress(unsigned char *data_in, unsigned char *cpage_out,
-		      u32 srclen, u32 destlen)
-{
-    return Decode(data_in, cpage_out, srclen, destlen);
-}
diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c
index 1923ed909a53db3deee554eedba651cf63748a4c..93651f53e9242d9c2e51672383c9a69d234f6c18 100644
--- a/fs/jffs2/jffs2_1pass.c
+++ b/fs/jffs2/jffs2_1pass.c
@@ -471,9 +471,8 @@ static char *compr_names[] = {
 	"COPY",
 	"DYNRUBIN",
 	"ZLIB",
-#if defined(CONFIG_JFFS2_LZO_LZARI)
+#if defined(CONFIG_JFFS2_LZO)
 	"LZO",
-	"LZARI",
 #endif
 };
 
@@ -781,13 +780,10 @@ jffs2_1pass_read_inode(struct b_lists *pL, u32 inode, char *dest)
 				case JFFS2_COMPR_ZLIB:
 					ret = zlib_decompress(src, lDest, jNode->csize, jNode->dsize);
 					break;
-#if defined(CONFIG_JFFS2_LZO_LZARI)
+#if defined(CONFIG_JFFS2_LZO)
 				case JFFS2_COMPR_LZO:
 					ret = lzo_decompress(src, lDest, jNode->csize, jNode->dsize);
 					break;
-				case JFFS2_COMPR_LZARI:
-					ret = lzari_decompress(src, lDest, jNode->csize, jNode->dsize);
-					break;
 #endif
 				default:
 					/* unknown */
diff --git a/fs/jffs2/jffs2_nand_1pass.c b/fs/jffs2/jffs2_nand_1pass.c
index fe8c70d91d4282b2c06210ba459184b33f28ccfa..3982003a4215d0c3902f6e1c9665af9b07f8ac81 100644
--- a/fs/jffs2/jffs2_nand_1pass.c
+++ b/fs/jffs2/jffs2_nand_1pass.c
@@ -34,9 +34,8 @@ static char *compr_names[] = {
 	"COPY",
 	"DYNRUBIN",
 	"ZLIB",
-#if defined(CONFIG_JFFS2_LZO_LZARI)
+#if defined(CONFIG_JFFS2_LZO)
 	"LZO",
-	"LZARI",
 #endif
 };
 
@@ -344,13 +343,10 @@ jffs2_1pass_read_inode(struct b_lists *pL, u32 ino, char *dest,
 			case JFFS2_COMPR_ZLIB:
 				ret = zlib_decompress(src, dst, inode->csize, inode->dsize);
 				break;
-#if defined(CONFIG_JFFS2_LZO_LZARI)
+#if defined(CONFIG_JFFS2_LZO)
 			case JFFS2_COMPR_LZO:
 				ret = lzo_decompress(src, dst, inode->csize, inode->dsize);
 				break;
-			case JFFS2_COMPR_LZARI:
-				ret = lzari_decompress(src, dst, inode->csize, inode->dsize);
-				break;
 #endif
 			default:
 				/* unknown */
diff --git a/include/jffs2/jffs2.h b/include/jffs2/jffs2.h
index ed96babf610967cf2cedf3bf9c90167861b5976d..651f94cf381edd2a286dadc9ff4e61225e38f35e 100644
--- a/include/jffs2/jffs2.h
+++ b/include/jffs2/jffs2.h
@@ -68,10 +68,9 @@
 #define JFFS2_COMPR_COPY	0x04
 #define JFFS2_COMPR_DYNRUBIN	0x05
 #define JFFS2_COMPR_ZLIB	0x06
-#if defined(CONFIG_JFFS2_LZO_LZARI)
+#if defined(CONFIG_JFFS2_LZO)
 #define JFFS2_COMPR_LZO		0x07
-#define JFFS2_COMPR_LZARI	0x08
-#define JFFS2_NUM_COMPR		9
+#define JFFS2_NUM_COMPR		8
 #else
 #define JFFS2_NUM_COMPR		7
 #endif
@@ -226,11 +225,9 @@ void dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out,
 		unsigned long sourcelen, unsigned long dstlen);
 long zlib_decompress(unsigned char *data_in, unsigned char *cpage_out,
 		__u32 srclen, __u32 destlen);
-#if defined(CONFIG_JFFS2_LZO_LZARI)
+#if defined(CONFIG_JFFS2_LZO)
 int lzo_decompress(unsigned char *data_in, unsigned char *cpage_out,
 		u32 srclen, u32 destlen);
-int lzari_decompress(unsigned char *data_in, unsigned char *cpage_out,
-		u32 srclen, u32 destlen);
 #endif
 
 char *mkmodestr(unsigned long mode, char *str);