pad = (struct xmalloc_pad *)p - 1;
hdr = (struct xmalloc_hdr *)((char *)p - pad->hdr_size);
+ /* Big allocs free directly. */
+ if ( hdr->size >= PAGE_SIZE )
+ {
+ free_pages(hdr, get_order(hdr->size));
+ return;
+ }
+
/* We know hdr will be on same page. */
if(((long)p & PAGE_MASK) != ((long)hdr & PAGE_MASK))
{
*(int*)0=0;
}
- /* Big allocs free directly. */
- if ( hdr->size >= PAGE_SIZE )
- {
- free_pages(hdr, get_order(hdr->size));
- return;
- }
-
/* Merge with other free block, or put in list. */
/* spin_lock_irqsave(&freelist_lock, flags); */
list_for_each_entry_safe( i, tmp, &freelist, freelist )