diff options
-rw-r--r-- | fs/squashfs/cache.c | 11 | ||||
-rw-r--r-- | fs/squashfs/squashfs_fs_sb.h | 1 |
2 files changed, 9 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; |
diff --git a/fs/squashfs/squashfs_fs_sb.h b/fs/squashfs/squashfs_fs_sb.h index 651f0b31d296..52934a22f296 100644 --- a/fs/squashfs/squashfs_fs_sb.h +++ b/fs/squashfs/squashfs_fs_sb.h | |||
@@ -28,6 +28,7 @@ | |||
28 | struct squashfs_cache { | 28 | struct squashfs_cache { |
29 | char *name; | 29 | char *name; |
30 | int entries; | 30 | int entries; |
31 | int curr_blk; | ||
31 | int next_blk; | 32 | int next_blk; |
32 | int num_waiters; | 33 | int num_waiters; |
33 | int unused; | 34 | int unused; |