Messages in this thread | | | Subject | Re: [RFC PATCH 1/3] kmemleak: Allow partial freeing of memory blocks | From | Pekka Enberg <> | Date | Wed, 08 Jul 2009 09:40:43 +0300 |
| |
On Tue, 2009-07-07 at 14:39 +0100, Catalin Marinas wrote: > @@ -552,8 +557,27 @@ static void delete_object(unsigned long ptr) > */ > spin_lock_irqsave(&object->lock, flags); > object->flags &= ~OBJECT_ALLOCATED; > + start = object->pointer; > + end = object->pointer + object->size; > + min_count = object->min_count; > spin_unlock_irqrestore(&object->lock, flags); > put_object(object); > + > + if (!size) > + return; > + > + /* > + * Partial freeing. Just create one or two objects that may result > + * from the memory block split. Note that partial freeing is only done > + * by free_bootmem() and this happens before kmemleak_init() is > + * called. The path below is only executed during early log recording > + * in kmemleak_init(), so GFP_KERNEL is enough. > + */ > + if (ptr > start) > + create_object(start, ptr - start, min_count, GFP_KERNEL); > + if (ptr + size < end) > + create_object(ptr + size, end - ptr - size, min_count, > + GFP_KERNEL); > }
Looks good to me. I think it would be better to have delete_object_full() and delete_object_part(), and extract the common code to __delete_object() or something instead of passing the magic zero from kmemleak_free().
In any case:
Acked-by: Pekka Enberg <penberg@cs.helsinki.fi>
Pekka
| |