diff options
author | Ajeet Yadav <ajeet.yadav.77@gmail.com> | 2011-12-27 04:40:04 -0500 |
---|---|---|
committer | Phillip Lougher <phillip@squashfs.org.uk> | 2011-12-29 20:24:13 -0500 |
commit | d7fbd893388d9e86d29b7cfbd5457bcf03496fbf (patch) | |
tree | ea94d043ee3e842f7273391b143a5949afb39975 /fs/squashfs/cache.c | |
parent | 89cab5b5727d3139adc247e3a3d4ee5b10e3eda5 (diff) |
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: Ajeet Yadav <ajeet.yadav.77@gmail.com>
Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
Diffstat (limited to 'fs/squashfs/cache.c')
-rw-r--r-- | fs/squashfs/cache.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/squashfs/cache.c b/fs/squashfs/cache.c index ea6e798e548b..af0b73802592 100644 --- a/fs/squashfs/cache.c +++ b/fs/squashfs/cache.c | |||
@@ -70,11 +70,15 @@ struct squashfs_cache_entry *squashfs_cache_get(struct super_block *sb, | |||
70 | spin_lock(&cache->lock); | 70 | spin_lock(&cache->lock); |
71 | 71 | ||
72 | while (1) { | 72 | while (1) { |
73 | for (i = 0; i < cache->entries; i++) | 73 | for (i = cache->curr_blk, n = 0; n < cache->entries; n++) { |
74 | if (cache->entry[i].block == block) | 74 | if (cache->entry[i].block == block) { |
75 | cache->curr_blk = i; | ||
75 | break; | 76 | break; |
77 | } | ||
78 | i = (i + 1) % cache->entries; | ||
79 | } | ||
76 | 80 | ||
77 | if (i == cache->entries) { | 81 | if (n == cache->entries) { |
78 | /* | 82 | /* |
79 | * Block not in cache, if all cache entries are used | 83 | * Block not in cache, if all cache entries are used |
80 | * go to sleep waiting for one to become available. | 84 | * go to sleep waiting for one to become available. |
@@ -245,6 +249,7 @@ struct squashfs_cache *squashfs_cache_init(char *name, int entries, | |||
245 | goto cleanup; | 249 | goto cleanup; |
246 | } | 250 | } |
247 | 251 | ||
252 | cache->curr_blk = 0; | ||
248 | cache->next_blk = 0; | 253 | cache->next_blk = 0; |
249 | cache->unused = entries; | 254 | cache->unused = entries; |
250 | cache->entries = entries; | 255 | cache->entries = entries; |