diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-11-12 23:22:13 +0100 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-11-29 23:59:48 +0100 |
commit | 1b6d78a1a79afe79a71841d914a4e49d6eb9100c (patch) | |
tree | 499be3ed320f95cd6611d95f7b119714971dda49 /ext2fs | |
parent | 4e2d5a81bb2834f7393e9847bfa091f8a0a07556 (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')
-rw-r--r-- | ext2fs/pager.c | 10 |
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); |