Lines Matching refs:block

62 struct block {  struct
66 struct block *next; argument
73 struct block block[1]; member
79 #define HDR_BLOCK (sizeof (struct block) - sizeof (void *))
91 static void split(struct block *, size_t);
109 struct block *block; in malloc_unlocked() local
121 for (block = page->block; block; block = block->next) { in malloc_unlocked()
122 if (block->status == FREE && block->size >= size) in malloc_unlocked()
143 block = page->block; in malloc_unlocked()
144 block->next = 0; in malloc_unlocked()
145 block->status = FREE; in malloc_unlocked()
146 block->size = totpage - HDR_PAGE; in malloc_unlocked()
147 block->page = page; in malloc_unlocked()
150 split(block, size); in malloc_unlocked()
152 block->status = BUSY; in malloc_unlocked()
153 return (&block->memstart); in malloc_unlocked()
159 struct block *block; in realloc() local
169 block = (struct block *)((char *)ptr - HDR_BLOCK); in realloc()
171 osize = block->size; in realloc()
176 if (block->next && block->next->status == FREE) { in realloc()
177 block->size += block->next->size + HDR_BLOCK; in realloc()
178 block->next = block->next->next; in realloc()
181 if (size <= block->size) { in realloc()
182 split(block, size); in realloc()
189 block->status = FREE; in realloc()
190 defrag(block->page); in realloc()
198 struct block *block; in free() local
205 block = (struct block *)((char *)ptr - HDR_BLOCK); in free()
206 block->status = FREE; in free()
208 defrag(block->page); in free()
225 split(struct block *block, size_t size) in split() argument
227 if (block->size > size + sizeof (struct block)) { in split()
228 struct block *newblock; in split()
229 newblock = (struct block *)((char *)block + HDR_BLOCK + size); in split()
230 newblock->next = block->next; in split()
231 block->next = newblock; in split()
233 newblock->page = block->page; in split()
234 newblock->size = block->size - size - HDR_BLOCK; in split()
235 block->size = size; in split()
245 struct block *block; in defrag() local
247 for (block = page->block; block; block = block->next) { in defrag()
248 struct block *block2; in defrag()
250 if (block->status == BUSY) in defrag()
252 for (block2 = block->next; block2 && block2->status == FREE; in defrag()
254 block->next = block2->next; in defrag()
255 block->size += block2->size + HDR_BLOCK; in defrag()
262 if (page->block->size == page->size - HDR_PAGE) { in defrag()