|
@@ -19,7 +19,7 @@
|
|
|
|
|
|
static void *lzo_mem;
|
|
static void *lzo_mem;
|
|
static void *lzo_compress_buf;
|
|
static void *lzo_compress_buf;
|
|
-static DEFINE_MUTEX(deflate_mutex);
|
|
|
|
|
|
+static DEFINE_MUTEX(deflate_mutex); /* for lzo_mem and lzo_compress_buf */
|
|
|
|
|
|
static void free_workspace(void)
|
|
static void free_workspace(void)
|
|
{
|
|
{
|
|
@@ -49,18 +49,21 @@ static int jffs2_lzo_compress(unsigned char *data_in, unsigned char *cpage_out,
|
|
|
|
|
|
mutex_lock(&deflate_mutex);
|
|
mutex_lock(&deflate_mutex);
|
|
ret = lzo1x_1_compress(data_in, *sourcelen, lzo_compress_buf, &compress_size, lzo_mem);
|
|
ret = lzo1x_1_compress(data_in, *sourcelen, lzo_compress_buf, &compress_size, lzo_mem);
|
|
- mutex_unlock(&deflate_mutex);
|
|
|
|
-
|
|
|
|
if (ret != LZO_E_OK)
|
|
if (ret != LZO_E_OK)
|
|
- return -1;
|
|
|
|
|
|
+ goto fail;
|
|
|
|
|
|
if (compress_size > *dstlen)
|
|
if (compress_size > *dstlen)
|
|
- return -1;
|
|
|
|
|
|
+ goto fail;
|
|
|
|
|
|
memcpy(cpage_out, lzo_compress_buf, compress_size);
|
|
memcpy(cpage_out, lzo_compress_buf, compress_size);
|
|
- *dstlen = compress_size;
|
|
|
|
|
|
+ mutex_unlock(&deflate_mutex);
|
|
|
|
|
|
|
|
+ *dstlen = compress_size;
|
|
return 0;
|
|
return 0;
|
|
|
|
+
|
|
|
|
+ fail:
|
|
|
|
+ mutex_unlock(&deflate_mutex);
|
|
|
|
+ return -1;
|
|
}
|
|
}
|
|
|
|
|
|
static int jffs2_lzo_decompress(unsigned char *data_in, unsigned char *cpage_out,
|
|
static int jffs2_lzo_decompress(unsigned char *data_in, unsigned char *cpage_out,
|