|
From: | Wei Wang |
Subject: | Re: [Qemu-devel] [PATCH v19 3/7] xbitmap: add more operations |
Date: | Mon, 18 Dec 2017 16:05:28 +0800 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 |
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
[Prev in Thread] | Current Thread | [Next in Thread] |