From: levin li <[email protected]>
Signed-off-by: levin li <[email protected]> --- sheep/object_cache.c | 23 +++++++++++++++-------- 1 files changed, 15 insertions(+), 8 deletions(-) diff --git a/sheep/object_cache.c b/sheep/object_cache.c index cc39a90..335cb1e 100644 --- a/sheep/object_cache.c +++ b/sheep/object_cache.c @@ -1291,7 +1291,8 @@ void object_cache_remove(uint64_t oid) uint32_t vid = oid_to_vid(oid); uint32_t idx = object_cache_oid_to_idx(oid); struct object_cache *oc; - struct dirty_cache_entry *entry; + struct dirty_cache_entry *dirty_entry; + struct object_cache_entry *entry; int tree_id = 0; oc = find_object_cache(vid, 0); @@ -1299,16 +1300,22 @@ void object_cache_remove(uint64_t oid) return; pthread_mutex_lock(&oc->lock); - entry = dirty_tree_search(&oc->dirty_trees[tree_id], idx); - if (!entry) { + + dirty_entry = dirty_tree_search(&oc->dirty_trees[tree_id], idx); + if (!dirty_entry) { tree_id = 1; - entry = dirty_tree_search(&oc->dirty_trees[tree_id], idx); + dirty_entry = dirty_tree_search(&oc->dirty_trees[tree_id], idx); } - if (!entry) - goto out; - del_from_dirty_tree_and_list(entry, &oc->dirty_trees[tree_id]); -out: + if (dirty_entry) { + del_from_dirty_tree_and_list(dirty_entry, + &oc->dirty_trees[tree_id]); + entry = dirty_entry->sys_entry; + } else + entry = object_tree_search(&oc->object_tree, idx); + if (entry) + del_from_object_tree_and_list(entry, &oc->object_tree); pthread_mutex_unlock(&oc->lock); + return; } -- 1.7.1 -- sheepdog mailing list [email protected] http://lists.wpkg.org/mailman/listinfo/sheepdog
