Re: [PATCH v19 3/7] xbitmap: add more operations

From: Wei Wang
Date: Mon Dec 18 2017 - 03:03:32 EST


On 12/17/2017 11:16 PM, Tetsuo Handa wrote:
Wang, Wei W wrote:
Wei Wang wrote:
But passing GFP_NOWAIT means that we can handle allocation failure.
There is no need to use preload approach when we can handle allocation failure.
I think the reason we need xb_preload is because radix tree insertion
needs the memory being preallocated already (it couldn't suffer from
memory failure during the process of inserting, probably because
handling the failure there isn't easy, Matthew may know the backstory
of
this)
According to https://lwn.net/Articles/175432/ , I think that preloading is
needed only when failure to insert an item into a radix tree is a significant
problem.
That is, when failure to insert an item into a radix tree is not a problem, I
think that we don't need to use preloading.
It also mentions that the preload attempts to allocate sufficient memory to *guarantee* that the next radix tree insertion cannot fail.

If we check radix_tree_node_alloc(), the comments there says "this assumes that the caller has performed appropriate preallocation".
If you read what radix_tree_node_alloc() is doing, you will find that
radix_tree_node_alloc() returns NULL when memory allocation failed.

I think that "this assumes that the caller has performed appropriate preallocation"
means "The caller has to perform appropriate preallocation if the caller does not
want radix_tree_node_alloc() to return NULL".

For the radix tree, I agree that we may not need preload. But ida_bitmap, which the xbitmap is based on, is allocated via preload, so I think we cannot bypass preload, otherwise, we get no ida_bitmap to use.

Best,
Wei