[sheepdog] [PATCH UPDATE] object cache: remove RECLAIM flag from reclaim path

levin li levin108 at gmail.com
Mon Jul 30 09:33:02 CEST 2012


From: levin li <xingke.lwp at taobao.com>

Since we hold lock while calling find_cache_entry() and
reclaiming the cache entry, there's no necessary for RECLAIM flag

Signed-off-by: levin li <xingke.lwp at taobao.com>
---
 sheep/object_cache.c |   25 ++++---------------------
 1 files changed, 4 insertions(+), 21 deletions(-)

diff --git a/sheep/object_cache.c b/sheep/object_cache.c
index 1f3e631..bf4e8a7 100644
--- a/sheep/object_cache.c
+++ b/sheep/object_cache.c
@@ -40,13 +40,10 @@
 #define CACHE_VDI_BIT         (UINT32_C(1) << CACHE_VDI_SHIFT)
 #define CACHE_BLOCK_SIZE      ((UINT64_C(1) << 10) * 64) /* 64 KB */
 
-#define CACHE_RECLAIM_SHIFT   27
-#define CACHE_RECLAIM_BIT     (UINT32_C(1) << CACHE_RECLAIM_SHIFT)
-
-#define CACHE_CREATE_SHIFT    26
+#define CACHE_CREATE_SHIFT    27
 #define CACHE_CREATE_BIT      (UINT32_C(1) << CACHE_CREATE_SHIFT)
 
-#define CACHE_INDEX_MASK      (CACHE_RECLAIM_BIT | CACHE_CREATE_BIT)
+#define CACHE_INDEX_MASK      (CACHE_CREATE_BIT)
 
 struct global_cache {
 	uint64_t cache_size;
@@ -457,8 +454,6 @@ static int reclaim_object(struct object_cache_entry *entry)
 		}
 	}
 
-	entry->idx |= CACHE_RECLAIM_BIT;
-
 	ret = remove_cache_object(oc, entry->idx);
 	if (ret == SD_RES_SUCCESS)
 		del_from_object_tree_and_list(entry, &oc->object_tree);
@@ -668,18 +663,6 @@ static void add_to_object_cache(struct object_cache *oc, uint32_t idx)
 	}
 }
 
-static inline struct object_cache_entry *
-find_cache_entry(struct object_cache *oc, uint32_t idx)
-{
-	struct object_cache_entry *entry;
-
-	entry = object_tree_search(&oc->object_tree, idx);
-	if (!entry || entry->idx & CACHE_RECLAIM_BIT)
-		return NULL;
-
-	return entry;
-}
-
 static int object_cache_lookup(struct object_cache *oc, uint32_t idx,
 			       int create)
 {
@@ -689,7 +672,7 @@ static int object_cache_lookup(struct object_cache *oc, uint32_t idx,
 
 	if (!create) {
 		pthread_rwlock_wrlock(&oc->lock);
-		if (!find_cache_entry(oc, idx))
+		if (!object_tree_search(&oc->object_tree, idx))
 			ret = SD_RES_NO_CACHE;
 		pthread_rwlock_unlock(&oc->lock);
 		return ret;
@@ -917,7 +900,7 @@ get_cache_entry(struct object_cache *cache, uint32_t idx)
 	struct object_cache_entry *entry;
 
 	pthread_rwlock_rdlock(&cache->lock);
-	entry = find_cache_entry(cache, idx);
+	entry = object_tree_search(&cache->object_tree, idx);
 	if (!entry) {
 		/* The cache entry may be reclaimed, so try again. */
 		pthread_rwlock_unlock(&cache->lock);
-- 
1.7.1




More information about the sheepdog mailing list