Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8715056 authored by Adrien Schildknecht's avatar Adrien Schildknecht Committed by Daniel Rosenberg
Browse files

ANDROID: Squashfs: remove the FILE_CACHE option



FILE_DIRECT is working fine and offers faster results and lower memory
footprint.

Removing FILE_CACHE makes our life easier because we don't have to
maintain 2 differents function that does the same thing.

Change-Id: Ib11dfeb6847fb79d166e10686a95eabb8c65710a
Signed-off-by: default avatarAdrien Schildknecht <adriens@google.com>
parent 966a0f11
Loading
Loading
Loading
Loading
+0 −28
Original line number Diff line number Diff line
@@ -25,34 +25,6 @@ config SQUASHFS

	  If unsure, say N.

choice
	prompt "File decompression options"
	depends on SQUASHFS
	help
	  Squashfs now supports two options for decompressing file
	  data.  Traditionally Squashfs has decompressed into an
	  intermediate buffer and then memcopied it into the page cache.
	  Squashfs now supports the ability to decompress directly into
	  the page cache.

	  If unsure, select "Decompress file data into an intermediate buffer"

config SQUASHFS_FILE_CACHE
	bool "Decompress file data into an intermediate buffer"
	help
	  Decompress file data into an intermediate buffer and then
	  memcopy it into the page cache.

config SQUASHFS_FILE_DIRECT
	bool "Decompress files directly into the page cache"
	help
	  Directly decompress file data into the page cache.
	  Doing so can significantly improve performance because
	  it eliminates a memcpy and it also removes the lock contention
	  on the single buffer.

endchoice

choice
	prompt "Decompressor parallelisation options"
	depends on SQUASHFS
+1 −2
Original line number Diff line number Diff line
@@ -6,8 +6,7 @@
obj-$(CONFIG_SQUASHFS) += squashfs.o
squashfs-y += block.o cache.o dir.o export.o file.o fragment.o id.o inode.o
squashfs-y += namei.o super.o symlink.o decompressor.o
squashfs-$(CONFIG_SQUASHFS_FILE_CACHE) += file_cache.o
squashfs-$(CONFIG_SQUASHFS_FILE_DIRECT) += file_direct.o page_actor.o
squashfs-y += file_direct.o page_actor.o
squashfs-$(CONFIG_SQUASHFS_DECOMP_SINGLE) += decompressor_single.o
squashfs-$(CONFIG_SQUASHFS_DECOMP_MULTI) += decompressor_multi.o
squashfs-$(CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU) += decompressor_multi_percpu.o

fs/squashfs/file_cache.c

deleted100644 → 0
+0 −38
Original line number Diff line number Diff line
/*
 * Copyright (c) 2013
 * Phillip Lougher <phillip@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/fs.h>
#include <linux/vfs.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/string.h>
#include <linux/pagemap.h>
#include <linux/mutex.h>

#include "squashfs_fs.h"
#include "squashfs_fs_sb.h"
#include "squashfs_fs_i.h"
#include "squashfs.h"

/* Read separately compressed datablock and memcopy into page cache */
int squashfs_readpage_block(struct page *page, u64 block, int bsize)
{
	struct inode *i = page->mapping->host;
	struct squashfs_cache_entry *buffer = squashfs_get_datablock(i->i_sb,
		block, bsize);
	int res = buffer->error;

	if (res)
		ERROR("Unable to read page, block %llx, size %x\n", block,
			bsize);
	else
		squashfs_copy_cache(page, buffer, buffer->length, 0);

	squashfs_cache_put(buffer);
	return res;
}
+1 −41
Original line number Diff line number Diff line
@@ -8,46 +8,6 @@
 * the COPYING file in the top-level directory.
 */

#ifndef CONFIG_SQUASHFS_FILE_DIRECT
struct squashfs_page_actor {
	void	**page;
	int	pages;
	int	length;
	int	next_page;
};

static inline struct squashfs_page_actor *squashfs_page_actor_init(void **page,
	int pages, int length)
{
	struct squashfs_page_actor *actor = kmalloc(sizeof(*actor), GFP_KERNEL);

	if (actor == NULL)
		return NULL;

	actor->length = length ? : pages * PAGE_SIZE;
	actor->page = page;
	actor->pages = pages;
	actor->next_page = 0;
	return actor;
}

static inline void *squashfs_first_page(struct squashfs_page_actor *actor)
{
	actor->next_page = 1;
	return actor->page[0];
}

static inline void *squashfs_next_page(struct squashfs_page_actor *actor)
{
	return actor->next_page == actor->pages ? NULL :
		actor->page[actor->next_page++];
}

static inline void squashfs_finish_page(struct squashfs_page_actor *actor)
{
	/* empty */
}
#else
struct squashfs_page_actor {
	union {
		void		**buffer;
@@ -77,5 +37,5 @@ static inline void squashfs_finish_page(struct squashfs_page_actor *actor)
{
	actor->squashfs_finish_page(actor);
}
#endif

#endif