From: Liu Yuan <liuy...@cmss.chinamobile.com> This reverts commit 58f0d6dcdfa370df4456ed08cd32983731fc0c4e.
Signed-off-by: Liu Yuan <liuy...@cmss.chinamobile.com> --- sheep/ops.c | 1 - sheep/sheep_priv.h | 1 - sheep/vdi.c | 110 ----------------------------------------------------- 3 files changed, 112 deletions(-) diff --git a/sheep/ops.c b/sheep/ops.c index 0e5ac64..5dd736c 100644 --- a/sheep/ops.c +++ b/sheep/ops.c @@ -198,7 +198,6 @@ static int post_cluster_del_vdi(const struct sd_req *req, struct sd_rsp *rsp, if (ret == SD_RES_SUCCESS) { atomic_set_bit(vid, sys->vdi_deleted); vdi_mark_deleted(vid); - run_vid_gc(vid); } if (!sys->enable_object_cache) diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h index 26afa89..4a4274b 100644 --- a/sheep/sheep_priv.h +++ b/sheep/sheep_priv.h @@ -363,7 +363,6 @@ void invalidate_other_nodes(uint32_t vid); int inode_coherence_update(uint32_t vid, bool validate, const struct node_id *sender); void remove_node_from_participants(const struct node_id *left); -void run_vid_gc(uint32_t vid); extern int ec_max_data_strip; diff --git a/sheep/vdi.c b/sheep/vdi.c index 8114fb5..9bf6b23 100644 --- a/sheep/vdi.c +++ b/sheep/vdi.c @@ -89,7 +89,6 @@ static void update_vdi_family(uint32_t parent_vid, INIT_LIST_NODE(&new->roots_list); INIT_LIST_HEAD(&new->child_list_head); - INIT_LIST_NODE(&new->child_list_node); list_add_tail(&new->roots_list, &vdi_family_roots); @@ -103,7 +102,6 @@ static void update_vdi_family(uint32_t parent_vid, new->entry = entry; entry->family_member = new; - INIT_LIST_NODE(&new->roots_list); INIT_LIST_HEAD(&new->child_list_head); INIT_LIST_NODE(&new->child_list_node); @@ -151,30 +149,6 @@ ret: sd_mutex_unlock(&vdi_family_mutex); } -static main_fn struct vdi_family_member *lookup_root(struct vdi_family_member - *member) -{ - if (!member->parent) - return member; - - return lookup_root(member->parent); -} - -static main_fn bool is_all_members_deleted(struct vdi_family_member *member) -{ - struct vdi_family_member *child; - - if (!member->entry->deleted) - return false; - - list_for_each_entry(child, &member->child_list_head, child_list_node) { - if (!is_all_members_deleted(child)) - return false; - } - - return true; -} - /* * ec_max_data_strip represent max number of data strips in the cluster. When * nr_zones < it, we don't purge the stale objects because for erasure coding, @@ -1905,39 +1879,12 @@ out: return ret; } -static void clean_family(struct vdi_family_member *member) -{ - struct vdi_family_member *child; - - list_for_each_entry(child, &member->child_list_head, child_list_node) { - clean_family(child); - } - - if (list_linked(&member->child_list_node)) - list_del(&member->child_list_node); - - if (!list_linked(&member->roots_list)) - free(member); -} - void clean_vdi_state(void) { - struct vdi_family_member *member; - sd_write_lock(&vdi_state_lock); rb_destroy(&vdi_state_root, struct vdi_state_entry, node); INIT_RB_ROOT(&vdi_state_root); sd_rw_unlock(&vdi_state_lock); - - sd_mutex_lock(&vdi_family_mutex); - - list_for_each_entry(member, &vdi_family_roots, roots_list) { - clean_family(member); - list_del(&member->roots_list); - free(member); - } - - sd_mutex_unlock(&vdi_family_mutex); } int sd_delete_vdi(const char *name) @@ -2098,60 +2045,3 @@ main_fn void free_vdi_state_snapshot(int epoch) panic("invalid free request for vdi state snapshot, epoch: %d", epoch); } - -static main_fn void do_vid_gc(struct vdi_family_member *member) -{ - struct vdi_state_entry *entry = member->entry; - uint32_t vid = entry->vid; - uint64_t oid = vid_to_vdi_oid(vid); - struct vdi_family_member *child; - - rb_erase(&entry->node, &vdi_state_root); - free(entry); - - list_for_each_entry(child, &member->child_list_head, child_list_node) { - do_vid_gc(child); - } - - if (list_linked(&member->roots_list)) - list_del(&member->roots_list); - - free(member); - - if (sd_store && sd_store->exist(oid, -1)) - /* TODO: gc other objects */ - sd_store->remove_object(oid, -1); - - atomic_clear_bit(vid, sys->vdi_inuse); - atomic_clear_bit(vid, sys->vdi_deleted); -} - -main_fn void run_vid_gc(uint32_t vid) -{ - struct vdi_state_entry *entry; - struct vdi_family_member *member, *root; - - sd_write_lock(&vdi_state_lock); - sd_mutex_lock(&vdi_family_mutex); - entry = vdi_state_search(&vdi_state_root, vid); - if (!entry) { - sd_alert("vid %"PRIx32" doesn't have its entry", vid); - goto out; - } - - member = entry->family_member; - root = lookup_root(member); - - if (is_all_members_deleted(root)) { - sd_info("all members of the family (root: %"PRIx32 - ") are deleted", root->vid); - do_vid_gc(root); - } else - sd_info("not all members of the family (root: %"PRIx32 - ") are deleted", root->vid); - -out: - sd_mutex_unlock(&vdi_family_mutex); - sd_rw_unlock(&vdi_state_lock); - -} -- 1.9.1 -- sheepdog mailing list sheepdog@lists.wpkg.org https://lists.wpkg.org/mailman/listinfo/sheepdog