On Fri, Jan 19, 2024 at 12:04 PM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > On Fri, Jan 19, 2024 at 11:29:42AM -0800, Yosry Ahmed wrote: > > I see, but it's not clear to me if the xarray is being properly > > cleaned up in this case. > > > > Do we have to call xa_destroy() anyway to make sure everything is > > cleaned up in the xarray? In that case, we can just do that after the > > loop. > > You do not need to call xa_destroy(). xa_destroy() exists for two > patterns: first, that you're storing values, not pointers in the tree, > and you can just delete the tree without leaking memory. second, that > you do xas_for_each() { kfree(p); }; xa_destroy(); that's more > efficient than xas_for_each() { kfree(p); xas_store(NULL); } as it > batches the freeing of the nodes to the end. > > if your code is naturally structured so that you delete the entries > after freeing them, you have no reason to call xa_destroy(). Thanks for elaborating. Based on this, I believe doing xas_for_each() { zswap_free_entry(); }; xa_destroy(); is both closer to the current code structure and more efficient.