66 |
void |
void |
67 |
vm_object_destroy (struct vm_object *object) |
vm_object_destroy (struct vm_object *object) |
68 |
{ |
{ |
69 |
|
struct vm_page *page; |
70 |
|
|
71 |
if (--object->refcnt != 0) |
if (--object->refcnt != 0) |
72 |
return; |
return; |
73 |
|
|
74 |
|
/* If we are a shadow object (ie if we're a COW object |
75 |
|
for another object) we have to release reference to it. */ |
76 |
|
|
77 |
|
if (object->shadow_object) |
78 |
|
vm_object_destroy (object->shadow_object); |
79 |
|
|
80 |
|
/* Iterate through all pages of object and release them. */ |
81 |
|
queue_iterate (& object->pageq, page, struct vm_page *, pageq) |
82 |
|
{ |
83 |
|
vm_page_remove (page); |
84 |
|
vm_page_release (page); |
85 |
|
} |
86 |
|
|
87 |
kmem_cache_free (object_cache, object); |
kmem_cache_free (object_cache, object); |
88 |
} |
} |
89 |
|
|