Lines Matching defs:block

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