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 devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel