Hello,

On Apr 10, 2013, at 11:18 , Seth Jennings wrote:

> +/* invalidates all pages for the given swap type */
> +static void zswap_frontswap_invalidate_area(unsigned type)
> +{
> +     struct zswap_tree *tree = zswap_trees[type];
> +     struct rb_node *node;
> +     struct zswap_entry *entry;
> +
> +     if (!tree)
> +             return;
> +
> +     /* walk the tree and free everything */
> +     spin_lock(&tree->lock);
> +     /*
> +      * TODO: Even though this code should not be executed because
> +      * the try_to_unuse() in swapoff should have emptied the tree,
> +      * it is very wasteful to rebalance the tree after every
> +      * removal when we are freeing the whole tree.
> +      *
> +      * If post-order traversal code is ever added to the rbtree
> +      * implementation, it should be used here.
> +      */
> +     while ((node = rb_first(&tree->rbroot))) {
> +             entry = rb_entry(node, struct zswap_entry, rbnode);
> +             rb_erase(&entry->rbnode, &tree->rbroot);
> +             zs_free(tree->pool, entry->handle);
> +             zswap_entry_cache_free(entry);
> +     }
> +     tree->rbroot = RB_ROOT;
> +     spin_unlock(&tree->lock);
> +}

Should both the pool and the tree also be freed, here?

-- Suleiman
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to