summaryrefslogtreecommitdiff
path: root/ext2fs/pager.c
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2015-11-12 23:22:13 +0100
committerJustus Winter <4winter@informatik.uni-hamburg.de>2015-11-29 23:59:48 +0100
commit1b6d78a1a79afe79a71841d914a4e49d6eb9100c (patch)
tree499be3ed320f95cd6611d95f7b119714971dda49 /ext2fs/pager.c
parent4e2d5a81bb2834f7393e9847bfa091f8a0a07556 (diff)
ext2fs: improve the block cache
* ext2fs/pager.c (disk_cache_block_ref): Improve the cache by using the new lookup and insertion functions that return and use a location pointer.
Diffstat (limited to 'ext2fs/pager.c')
-rw-r--r--ext2fs/pager.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/ext2fs/pager.c b/ext2fs/pager.c
index 9df7e0b1..2528856b 100644
--- a/ext2fs/pager.c
+++ b/ext2fs/pager.c
@@ -960,6 +960,7 @@ disk_cache_block_ref (block_t block)
{
int index;
void *bptr;
+ hurd_ihash_locp_t slot;
assert (block < store->size >> log2_block_size);
@@ -968,7 +969,7 @@ disk_cache_block_ref (block_t block)
retry_ref:
pthread_mutex_lock (&disk_cache_lock);
- bptr = hurd_ihash_find (disk_cache_bptr, block);
+ bptr = hurd_ihash_locp_find (disk_cache_bptr, block, &slot);
if (bptr)
/* Already mapped. */
{
@@ -1091,12 +1092,13 @@ retry_ref:
#endif
/* Re-associate. */
+
+ /* New association. */
+ if (hurd_ihash_locp_add (disk_cache_bptr, slot, block, bptr))
+ ext2_panic ("Couldn't hurd_ihash_locp_add new disk block");
if (disk_cache_info[index].block != DC_NO_BLOCK)
/* Remove old association. */
hurd_ihash_remove (disk_cache_bptr, disk_cache_info[index].block);
- /* New association. */
- if (hurd_ihash_add (disk_cache_bptr, block, bptr))
- ext2_panic ("Couldn't hurd_ihash_add new disk block");
assert (! (disk_cache_info[index].flags & DC_DONT_REUSE & ~DC_UNTOUCHED));
disk_cache_info[index].block = block;
assert (! disk_cache_info[index].ref_count);