Lines Matching refs:block

60 struct block {  struct
64 struct block *next; argument
71 struct block block[1]; argument
77 #define HDR_BLOCK (sizeof (struct block) - sizeof (void *))
89 static void split(struct block *, size_t);
107 struct block *block; in malloc_unlocked() local
119 for (block = page->block; block; block = block->next) { in malloc_unlocked()
120 if (block->status == FREE && block->size >= size) in malloc_unlocked()
141 block = page->block; in malloc_unlocked()
142 block->next = 0; in malloc_unlocked()
143 block->status = FREE; in malloc_unlocked()
144 block->size = totpage - HDR_PAGE; in malloc_unlocked()
145 block->page = page; in malloc_unlocked()
148 split(block, size); in malloc_unlocked()
150 block->status = BUSY; in malloc_unlocked()
151 return (&block->memstart); in malloc_unlocked()
157 struct block *block; in realloc() local
167 block = (struct block *)((char *)ptr - HDR_BLOCK); in realloc()
169 osize = block->size; in realloc()
174 if (block->next && block->next->status == FREE) { in realloc()
175 block->size += block->next->size + HDR_BLOCK; in realloc()
176 block->next = block->next->next; in realloc()
179 if (size <= block->size) { in realloc()
180 split(block, size); in realloc()
187 block->status = FREE; in realloc()
188 defrag(block->page); in realloc()
196 struct block *block; in free() local
203 block = (struct block *)((char *)ptr - HDR_BLOCK); in free()
204 block->status = FREE; in free()
206 defrag(block->page); in free()
223 split(struct block *block, size_t size) in split() argument
225 if (block->size > size + sizeof (struct block)) { in split()
226 struct block *newblock; in split()
227 newblock = (struct block *)((char *)block + HDR_BLOCK + size); in split()
228 newblock->next = block->next; in split()
229 block->next = newblock; in split()
231 newblock->page = block->page; in split()
232 newblock->size = block->size - size - HDR_BLOCK; in split()
233 block->size = size; in split()
243 struct block *block; in defrag() local
245 for (block = page->block; block; block = block->next) { in defrag()
246 struct block *block2; in defrag()
248 if (block->status == BUSY) in defrag()
250 for (block2 = block->next; block2 && block2->status == FREE; in defrag()
252 block->next = block2->next; in defrag()
253 block->size += block2->size + HDR_BLOCK; in defrag()
260 if (page->block->size == page->size - HDR_PAGE) { in defrag()