On 7/22/24 6:29 PM, Danilo Krummrich wrote: > Besides the obvious (and desired) difference between krealloc() and > kvrealloc(), there is some inconsistency in their function signatures > and behavior: > > - krealloc() frees the memory when the requested size is zero, whereas > kvrealloc() simply returns a pointer to the existing allocation. > > - krealloc() behaves like kmalloc() if a NULL pointer is passed, whereas > kvrealloc() does not accept a NULL pointer at all and, if passed, > would fault instead. > > - krealloc() is self-contained, whereas kvrealloc() relies on the caller > to provide the size of the previous allocation. > > Inconsistent behavior throughout allocation APIs is error prone, hence make > kvrealloc() behave like krealloc(), which seems superior in all mentioned > aspects. > > Besides that, implementing kvrealloc() by making use of krealloc() and > vrealloc() provides oppertunities to grow (and shrink) allocations more > efficiently. For instance, vrealloc() can be optimized to allocate and > map additional pages to grow the allocation or unmap and free unused > pages to shrink the allocation. > > Signed-off-by: Danilo Krummrich <dakr@xxxxxxxxxx> Acked-by: Vlastimil Babka <vbabka@xxxxxxx> with same caveat about the __GFP_ZERO comment on kvrealloc_noprof()