[PATCH 1/2] Squashfs: add LZ4 compression support

2014-11-27 Thread Phillip Lougher
Add support for reading file systems compressed with the
LZ4 compression algorithm.

This patch adds the LZ4 decompressor wrapper code.

Signed-off-by: Phillip Lougher 
---
 fs/squashfs/lz4_wrapper.c |  142 +
 fs/squashfs/squashfs_fs.h |1 +
 2 files changed, 143 insertions(+)
 create mode 100644 fs/squashfs/lz4_wrapper.c

diff --git a/fs/squashfs/lz4_wrapper.c b/fs/squashfs/lz4_wrapper.c
new file mode 100644
index 000..c31e2bc
--- /dev/null
+++ b/fs/squashfs/lz4_wrapper.c
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2013, 2014
+ * Phillip Lougher 
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "squashfs_fs.h"
+#include "squashfs_fs_sb.h"
+#include "squashfs.h"
+#include "decompressor.h"
+#include "page_actor.h"
+
+#define LZ4_LEGACY 1
+
+struct lz4_comp_opts {
+   __le32 version;
+   __le32 flags;
+};
+
+struct squashfs_lz4 {
+   void *input;
+   void *output;
+};
+
+
+static void *lz4_comp_opts(struct squashfs_sb_info *msblk,
+   void *buff, int len)
+{
+   struct lz4_comp_opts *comp_opts = buff;
+
+   /* LZ4 compressed filesystems always have compression options */
+   if (comp_opts == NULL || len < sizeof(*comp_opts))
+   return ERR_PTR(-EIO);
+
+   if (le32_to_cpu(comp_opts->version) != LZ4_LEGACY) {
+   /* LZ4 format currently used by the kernel is the 'legacy'
+* format */
+   ERROR("Unknown LZ4 version\n");
+   return ERR_PTR(-EINVAL);
+   }
+
+   return NULL;
+}
+
+
+static void *lz4_init(struct squashfs_sb_info *msblk, void *buff)
+{
+   int block_size = max_t(int, msblk->block_size, SQUASHFS_METADATA_SIZE);
+   struct squashfs_lz4 *stream;
+
+   stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+   if (stream == NULL)
+   goto failed;
+   stream->input = vmalloc(block_size);
+   if (stream->input == NULL)
+   goto failed2;
+   stream->output = vmalloc(block_size);
+   if (stream->output == NULL)
+   goto failed3;
+
+   return stream;
+
+failed3:
+   vfree(stream->input);
+failed2:
+   kfree(stream);
+failed:
+   ERROR("Failed to initialise LZ4 decompressor\n");
+   return ERR_PTR(-ENOMEM);
+}
+
+
+static void lz4_free(void *strm)
+{
+   struct squashfs_lz4 *stream = strm;
+
+   if (stream) {
+   vfree(stream->input);
+   vfree(stream->output);
+   }
+   kfree(stream);
+}
+
+
+static int lz4_uncompress(struct squashfs_sb_info *msblk, void *strm,
+   struct buffer_head **bh, int b, int offset, int length,
+   struct squashfs_page_actor *output)
+{
+   struct squashfs_lz4 *stream = strm;
+   void *buff = stream->input, *data;
+   int avail, i, bytes = length, res;
+   size_t dest_len = output->length;
+
+   for (i = 0; i < b; i++) {
+   avail = min(bytes, msblk->devblksize - offset);
+   memcpy(buff, bh[i]->b_data + offset, avail);
+   buff += avail;
+   bytes -= avail;
+   offset = 0;
+   put_bh(bh[i]);
+   }
+
+   res = lz4_decompress_unknownoutputsize(stream->input, length,
+   stream->output, _len);
+   if (res)
+   return -EIO;
+
+   bytes = dest_len;
+   data = squashfs_first_page(output);
+   buff = stream->output;
+   while (data) {
+   if (bytes <= PAGE_CACHE_SIZE) {
+   memcpy(data, buff, bytes);
+   break;
+   }
+   memcpy(data, buff, PAGE_CACHE_SIZE);
+   buff += PAGE_CACHE_SIZE;
+   bytes -= PAGE_CACHE_SIZE;
+   data = squashfs_next_page(output);
+   }
+   squashfs_finish_page(output);
+
+   return dest_len;
+}
+
+const struct squashfs_decompressor squashfs_lz4_comp_ops = {
+   .init = lz4_init,
+   .comp_opts = lz4_comp_opts,
+   .free = lz4_free,
+   .decompress = lz4_uncompress,
+   .id = LZ4_COMPRESSION,
+   .name = "lz4",
+   .supported = 1
+};
diff --git a/fs/squashfs/squashfs_fs.h b/fs/squashfs/squashfs_fs.h
index 4b2beda..506f4ba 100644
--- a/fs/squashfs/squashfs_fs.h
+++ b/fs/squashfs/squashfs_fs.h
@@ -240,6 +240,7 @@ struct meta_index {
 #define LZMA_COMPRESSION   2
 #define LZO_COMPRESSION3
 #define XZ_COMPRESSION 4
+#define LZ4_COMPRESSION5
 
 struct squashfs_super_block {
__le32  s_magic;
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 1/2] Squashfs: add LZ4 compression support

2014-11-27 Thread Phillip Lougher
Add support for reading file systems compressed with the
LZ4 compression algorithm.

This patch adds the LZ4 decompressor wrapper code.

Signed-off-by: Phillip Lougher phil...@squashfs.org.uk
---
 fs/squashfs/lz4_wrapper.c |  142 +
 fs/squashfs/squashfs_fs.h |1 +
 2 files changed, 143 insertions(+)
 create mode 100644 fs/squashfs/lz4_wrapper.c

diff --git a/fs/squashfs/lz4_wrapper.c b/fs/squashfs/lz4_wrapper.c
new file mode 100644
index 000..c31e2bc
--- /dev/null
+++ b/fs/squashfs/lz4_wrapper.c
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2013, 2014
+ * Phillip Lougher phil...@squashfs.org.uk
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ */
+
+#include linux/buffer_head.h
+#include linux/mutex.h
+#include linux/slab.h
+#include linux/vmalloc.h
+#include linux/lz4.h
+
+#include squashfs_fs.h
+#include squashfs_fs_sb.h
+#include squashfs.h
+#include decompressor.h
+#include page_actor.h
+
+#define LZ4_LEGACY 1
+
+struct lz4_comp_opts {
+   __le32 version;
+   __le32 flags;
+};
+
+struct squashfs_lz4 {
+   void *input;
+   void *output;
+};
+
+
+static void *lz4_comp_opts(struct squashfs_sb_info *msblk,
+   void *buff, int len)
+{
+   struct lz4_comp_opts *comp_opts = buff;
+
+   /* LZ4 compressed filesystems always have compression options */
+   if (comp_opts == NULL || len  sizeof(*comp_opts))
+   return ERR_PTR(-EIO);
+
+   if (le32_to_cpu(comp_opts-version) != LZ4_LEGACY) {
+   /* LZ4 format currently used by the kernel is the 'legacy'
+* format */
+   ERROR(Unknown LZ4 version\n);
+   return ERR_PTR(-EINVAL);
+   }
+
+   return NULL;
+}
+
+
+static void *lz4_init(struct squashfs_sb_info *msblk, void *buff)
+{
+   int block_size = max_t(int, msblk-block_size, SQUASHFS_METADATA_SIZE);
+   struct squashfs_lz4 *stream;
+
+   stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+   if (stream == NULL)
+   goto failed;
+   stream-input = vmalloc(block_size);
+   if (stream-input == NULL)
+   goto failed2;
+   stream-output = vmalloc(block_size);
+   if (stream-output == NULL)
+   goto failed3;
+
+   return stream;
+
+failed3:
+   vfree(stream-input);
+failed2:
+   kfree(stream);
+failed:
+   ERROR(Failed to initialise LZ4 decompressor\n);
+   return ERR_PTR(-ENOMEM);
+}
+
+
+static void lz4_free(void *strm)
+{
+   struct squashfs_lz4 *stream = strm;
+
+   if (stream) {
+   vfree(stream-input);
+   vfree(stream-output);
+   }
+   kfree(stream);
+}
+
+
+static int lz4_uncompress(struct squashfs_sb_info *msblk, void *strm,
+   struct buffer_head **bh, int b, int offset, int length,
+   struct squashfs_page_actor *output)
+{
+   struct squashfs_lz4 *stream = strm;
+   void *buff = stream-input, *data;
+   int avail, i, bytes = length, res;
+   size_t dest_len = output-length;
+
+   for (i = 0; i  b; i++) {
+   avail = min(bytes, msblk-devblksize - offset);
+   memcpy(buff, bh[i]-b_data + offset, avail);
+   buff += avail;
+   bytes -= avail;
+   offset = 0;
+   put_bh(bh[i]);
+   }
+
+   res = lz4_decompress_unknownoutputsize(stream-input, length,
+   stream-output, dest_len);
+   if (res)
+   return -EIO;
+
+   bytes = dest_len;
+   data = squashfs_first_page(output);
+   buff = stream-output;
+   while (data) {
+   if (bytes = PAGE_CACHE_SIZE) {
+   memcpy(data, buff, bytes);
+   break;
+   }
+   memcpy(data, buff, PAGE_CACHE_SIZE);
+   buff += PAGE_CACHE_SIZE;
+   bytes -= PAGE_CACHE_SIZE;
+   data = squashfs_next_page(output);
+   }
+   squashfs_finish_page(output);
+
+   return dest_len;
+}
+
+const struct squashfs_decompressor squashfs_lz4_comp_ops = {
+   .init = lz4_init,
+   .comp_opts = lz4_comp_opts,
+   .free = lz4_free,
+   .decompress = lz4_uncompress,
+   .id = LZ4_COMPRESSION,
+   .name = lz4,
+   .supported = 1
+};
diff --git a/fs/squashfs/squashfs_fs.h b/fs/squashfs/squashfs_fs.h
index 4b2beda..506f4ba 100644
--- a/fs/squashfs/squashfs_fs.h
+++ b/fs/squashfs/squashfs_fs.h
@@ -240,6 +240,7 @@ struct meta_index {
 #define LZMA_COMPRESSION   2
 #define LZO_COMPRESSION3
 #define XZ_COMPRESSION 4
+#define LZ4_COMPRESSION5
 
 struct squashfs_super_block {
__le32  s_magic;
-- 
1.7.10.4

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  

Re: [PATCH 1/2] Squashfs: add LZ4 compression support

2013-07-21 Thread Joe Perches
On Mon, 2013-07-22 at 03:21 +0100, Phillip Lougher wrote:
> Add support for reading file systems compressed with the
> LZ4 compression algorithm.

Some whitespace trivia and a naming comment.

> diff --git a/fs/squashfs/lz4_wrapper.c b/fs/squashfs/lz4_wrapper.c
[]
> +static void *lz4_init(struct squashfs_sb_info *msblk, void *buff, int len)
[]
> + /* LZ4 compressed filesystems always have compression options */
> + if(comp_opts == NULL || len < sizeof(*comp_opts)) {

space after ifs please.

> + if(le32_to_cpu(comp_opts->version) != LZ4_LEGACY) {

> +
> +
> +static void lz4_free(void *strm)

Single blank line between functions

> +static int lz4_uncompress(struct squashfs_sb_info *msblk, void **buffer,
> + struct buffer_head **bh, int b, int offset, int length, int srclength,
> + int pages)
> +{
> + struct squashfs_lz4 *stream = msblk->stream;
> + void *buff = stream->input;

It's not particularly nice to have both buffer and buff
in the same function.

Maybe void *input though char *input would be better.

> + int avail, i, bytes = length, res;
> + size_t dest_len = srclength;
> +
> + mutex_lock(>read_data_mutex);
> +
> + for (i = 0; i < b; i++) {
> + wait_on_buffer(bh[i]);
> + if (!buffer_uptodate(bh[i]))
> + goto block_release;
> +
> + avail = min(bytes, msblk->devblksize - offset);
> + memcpy(buff, bh[i]->b_data + offset, avail);
> + buff += avail;
> + bytes -= avail;
> + offset = 0;
> + put_bh(bh[i]);
> + }


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 1/2] Squashfs: add LZ4 compression support

2013-07-21 Thread Phillip Lougher
Add support for reading file systems compressed with the
LZ4 compression algorithm.

This patch adds the LZ4 decompressor wrapper code.

Signed-off-by: Phillip Lougher 
---
 fs/squashfs/lz4_wrapper.c |  163 +
 fs/squashfs/squashfs_fs.h |1 +
 2 files changed, 164 insertions(+)
 create mode 100644 fs/squashfs/lz4_wrapper.c

diff --git a/fs/squashfs/lz4_wrapper.c b/fs/squashfs/lz4_wrapper.c
new file mode 100644
index 000..681ed94
--- /dev/null
+++ b/fs/squashfs/lz4_wrapper.c
@@ -0,0 +1,163 @@
+/*
+ * Squashfs - a compressed read only filesystem for Linux
+ *
+ * Copyright (c) 2013
+ * Phillip Lougher 
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * lz4_wrapper.c
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "squashfs_fs.h"
+#include "squashfs_fs_sb.h"
+#include "squashfs.h"
+#include "decompressor.h"
+
+#define LZ4_LEGACY 1
+
+struct lz4_comp_opts {
+   __le32 version;
+   __le32 flags;
+};
+
+struct squashfs_lz4 {
+   void *input;
+   void *output;
+};
+
+
+
+static void *lz4_init(struct squashfs_sb_info *msblk, void *buff, int len)
+{
+   struct lz4_comp_opts *comp_opts = buff;
+   int block_size = max_t(int, msblk->block_size, SQUASHFS_METADATA_SIZE);
+   struct squashfs_lz4 *stream;
+   int err = -ENOMEM;
+
+   /* LZ4 compressed filesystems always have compression options */
+   if(comp_opts == NULL || len < sizeof(*comp_opts)) {
+   err = -EIO;
+   goto failed;
+   }
+   if(le32_to_cpu(comp_opts->version) != LZ4_LEGACY) {
+   /* LZ4 format currently used by the kernel is the 'legacy'
+* format */
+   ERROR("Unknown LZ4 version\n");
+   err = -EINVAL;
+   goto failed;
+   }
+
+   stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+   if (stream == NULL)
+   goto failed;
+   stream->input = vmalloc(block_size);
+   if (stream->input == NULL)
+   goto failed2;
+   stream->output = vmalloc(block_size);
+   if (stream->output == NULL)
+   goto failed3;
+
+   return stream;
+
+failed3:
+   vfree(stream->input);
+failed2:
+   kfree(stream);
+failed:
+   ERROR("Failed to initialise LZ4 decompressor\n");
+   return ERR_PTR(err);
+}
+
+
+static void lz4_free(void *strm)
+{
+   struct squashfs_lz4 *stream = strm;
+
+   if (stream) {
+   vfree(stream->input);
+   vfree(stream->output);
+   }
+   kfree(stream);
+}
+
+
+static int lz4_uncompress(struct squashfs_sb_info *msblk, void **buffer,
+   struct buffer_head **bh, int b, int offset, int length, int srclength,
+   int pages)
+{
+   struct squashfs_lz4 *stream = msblk->stream;
+   void *buff = stream->input;
+   int avail, i, bytes = length, res;
+   size_t dest_len = srclength;
+
+   mutex_lock(>read_data_mutex);
+
+   for (i = 0; i < b; i++) {
+   wait_on_buffer(bh[i]);
+   if (!buffer_uptodate(bh[i]))
+   goto block_release;
+
+   avail = min(bytes, msblk->devblksize - offset);
+   memcpy(buff, bh[i]->b_data + offset, avail);
+   buff += avail;
+   bytes -= avail;
+   offset = 0;
+   put_bh(bh[i]);
+   }
+
+   res = lz4_decompress_unknownoutputsize(stream->input, length,
+   stream->output, _len);
+   if (res)
+   goto failed;
+
+   bytes = dest_len;
+   for (i = 0, buff = stream->output; bytes && i < pages; i++) {
+   avail = min_t(int, bytes, PAGE_CACHE_SIZE);
+   memcpy(buffer[i], buff, avail);
+   buff += avail;
+   bytes -= avail;
+   }
+   if (bytes)
+   goto failed;
+
+   mutex_unlock(>read_data_mutex);
+   return dest_len;
+
+block_release:
+   for (; i < b; i++)
+   put_bh(bh[i]);
+
+failed:
+   mutex_unlock(>read_data_mutex);
+
+   ERROR("lz4 decompression failed, data probably corrupt\n");
+   return -EIO;
+}
+
+const struct squashfs_decompressor squashfs_lz4_comp_ops = {
+   .init = lz4_init,
+   .free = lz4_free,
+   

[PATCH 1/2] Squashfs: add LZ4 compression support

2013-07-21 Thread Phillip Lougher
Add support for reading file systems compressed with the
LZ4 compression algorithm.

This patch adds the LZ4 decompressor wrapper code.

Signed-off-by: Phillip Lougher phil...@squashfs.org.uk
---
 fs/squashfs/lz4_wrapper.c |  163 +
 fs/squashfs/squashfs_fs.h |1 +
 2 files changed, 164 insertions(+)
 create mode 100644 fs/squashfs/lz4_wrapper.c

diff --git a/fs/squashfs/lz4_wrapper.c b/fs/squashfs/lz4_wrapper.c
new file mode 100644
index 000..681ed94
--- /dev/null
+++ b/fs/squashfs/lz4_wrapper.c
@@ -0,0 +1,163 @@
+/*
+ * Squashfs - a compressed read only filesystem for Linux
+ *
+ * Copyright (c) 2013
+ * Phillip Lougher phil...@squashfs.org.uk
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * lz4_wrapper.c
+ */
+
+#include linux/buffer_head.h
+#include linux/mutex.h
+#include linux/slab.h
+#include linux/vmalloc.h
+#include linux/lz4.h
+
+#include squashfs_fs.h
+#include squashfs_fs_sb.h
+#include squashfs.h
+#include decompressor.h
+
+#define LZ4_LEGACY 1
+
+struct lz4_comp_opts {
+   __le32 version;
+   __le32 flags;
+};
+
+struct squashfs_lz4 {
+   void *input;
+   void *output;
+};
+
+
+
+static void *lz4_init(struct squashfs_sb_info *msblk, void *buff, int len)
+{
+   struct lz4_comp_opts *comp_opts = buff;
+   int block_size = max_t(int, msblk-block_size, SQUASHFS_METADATA_SIZE);
+   struct squashfs_lz4 *stream;
+   int err = -ENOMEM;
+
+   /* LZ4 compressed filesystems always have compression options */
+   if(comp_opts == NULL || len  sizeof(*comp_opts)) {
+   err = -EIO;
+   goto failed;
+   }
+   if(le32_to_cpu(comp_opts-version) != LZ4_LEGACY) {
+   /* LZ4 format currently used by the kernel is the 'legacy'
+* format */
+   ERROR(Unknown LZ4 version\n);
+   err = -EINVAL;
+   goto failed;
+   }
+
+   stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+   if (stream == NULL)
+   goto failed;
+   stream-input = vmalloc(block_size);
+   if (stream-input == NULL)
+   goto failed2;
+   stream-output = vmalloc(block_size);
+   if (stream-output == NULL)
+   goto failed3;
+
+   return stream;
+
+failed3:
+   vfree(stream-input);
+failed2:
+   kfree(stream);
+failed:
+   ERROR(Failed to initialise LZ4 decompressor\n);
+   return ERR_PTR(err);
+}
+
+
+static void lz4_free(void *strm)
+{
+   struct squashfs_lz4 *stream = strm;
+
+   if (stream) {
+   vfree(stream-input);
+   vfree(stream-output);
+   }
+   kfree(stream);
+}
+
+
+static int lz4_uncompress(struct squashfs_sb_info *msblk, void **buffer,
+   struct buffer_head **bh, int b, int offset, int length, int srclength,
+   int pages)
+{
+   struct squashfs_lz4 *stream = msblk-stream;
+   void *buff = stream-input;
+   int avail, i, bytes = length, res;
+   size_t dest_len = srclength;
+
+   mutex_lock(msblk-read_data_mutex);
+
+   for (i = 0; i  b; i++) {
+   wait_on_buffer(bh[i]);
+   if (!buffer_uptodate(bh[i]))
+   goto block_release;
+
+   avail = min(bytes, msblk-devblksize - offset);
+   memcpy(buff, bh[i]-b_data + offset, avail);
+   buff += avail;
+   bytes -= avail;
+   offset = 0;
+   put_bh(bh[i]);
+   }
+
+   res = lz4_decompress_unknownoutputsize(stream-input, length,
+   stream-output, dest_len);
+   if (res)
+   goto failed;
+
+   bytes = dest_len;
+   for (i = 0, buff = stream-output; bytes  i  pages; i++) {
+   avail = min_t(int, bytes, PAGE_CACHE_SIZE);
+   memcpy(buffer[i], buff, avail);
+   buff += avail;
+   bytes -= avail;
+   }
+   if (bytes)
+   goto failed;
+
+   mutex_unlock(msblk-read_data_mutex);
+   return dest_len;
+
+block_release:
+   for (; i  b; i++)
+   put_bh(bh[i]);
+
+failed:
+   mutex_unlock(msblk-read_data_mutex);
+
+   ERROR(lz4 decompression failed, data probably corrupt\n);
+   return -EIO;
+}
+
+const struct 

Re: [PATCH 1/2] Squashfs: add LZ4 compression support

2013-07-21 Thread Joe Perches
On Mon, 2013-07-22 at 03:21 +0100, Phillip Lougher wrote:
 Add support for reading file systems compressed with the
 LZ4 compression algorithm.

Some whitespace trivia and a naming comment.

 diff --git a/fs/squashfs/lz4_wrapper.c b/fs/squashfs/lz4_wrapper.c
[]
 +static void *lz4_init(struct squashfs_sb_info *msblk, void *buff, int len)
[]
 + /* LZ4 compressed filesystems always have compression options */
 + if(comp_opts == NULL || len  sizeof(*comp_opts)) {

space after ifs please.

 + if(le32_to_cpu(comp_opts-version) != LZ4_LEGACY) {

 +
 +
 +static void lz4_free(void *strm)

Single blank line between functions

 +static int lz4_uncompress(struct squashfs_sb_info *msblk, void **buffer,
 + struct buffer_head **bh, int b, int offset, int length, int srclength,
 + int pages)
 +{
 + struct squashfs_lz4 *stream = msblk-stream;
 + void *buff = stream-input;

It's not particularly nice to have both buffer and buff
in the same function.

Maybe void *input though char *input would be better.

 + int avail, i, bytes = length, res;
 + size_t dest_len = srclength;
 +
 + mutex_lock(msblk-read_data_mutex);
 +
 + for (i = 0; i  b; i++) {
 + wait_on_buffer(bh[i]);
 + if (!buffer_uptodate(bh[i]))
 + goto block_release;
 +
 + avail = min(bytes, msblk-devblksize - offset);
 + memcpy(buff, bh[i]-b_data + offset, avail);
 + buff += avail;
 + bytes -= avail;
 + offset = 0;
 + put_bh(bh[i]);
 + }


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/