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

Commit d7fbd893 authored by Ajeet Yadav's avatar Ajeet Yadav Committed by Phillip Lougher
Browse files

Squashfs: optimise squashfs_cache_get entry search



squashfs_cache_get() iterates over all entries to search for
 block its looking for. Often get() / put() are called for
 same block.

If we cache the current entry index, then we can optimise the
subsequent *_get() calls.

Signed-off-by: default avatarAjeet Yadav <ajeet.yadav.77@gmail.com>
Signed-off-by: default avatarPhillip Lougher <phillip@squashfs.org.uk>
parent 89cab5b5
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -70,11 +70,15 @@ struct squashfs_cache_entry *squashfs_cache_get(struct super_block *sb,
	spin_lock(&cache->lock);

	while (1) {
		for (i = 0; i < cache->entries; i++)
			if (cache->entry[i].block == block)
		for (i = cache->curr_blk, n = 0; n < cache->entries; n++) {
			if (cache->entry[i].block == block) {
				cache->curr_blk = i;
				break;
			}
			i = (i + 1) % cache->entries;
		}

		if (i == cache->entries) {
		if (n == cache->entries) {
			/*
			 * Block not in cache, if all cache entries are used
			 * go to sleep waiting for one to become available.
@@ -245,6 +249,7 @@ struct squashfs_cache *squashfs_cache_init(char *name, int entries,
		goto cleanup;
	}

	cache->curr_blk = 0;
	cache->next_blk = 0;
	cache->unused = entries;
	cache->entries = entries;
+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
struct squashfs_cache {
	char			*name;
	int			entries;
	int			curr_blk;
	int			next_blk;
	int			num_waiters;
	int			unused;