diff options
| author | Kenneth D. Merry <ken@FreeBSD.org> | 2003-03-08 06:58:18 +0000 |
|---|---|---|
| committer | Kenneth D. Merry <ken@FreeBSD.org> | 2003-03-08 06:58:18 +0000 |
| commit | 9b80d344ec97f7609f3ad08cd5283eab1ec13be9 (patch) | |
| tree | bafe4813576a96350c2cecf2d6c1355c00e092d0 /sys/vm | |
| parent | b4508d7d3f2ac6d19140ec828f77f9e87c0f5d09 (diff) | |
Notes
Diffstat (limited to 'sys/vm')
| -rw-r--r-- | sys/vm/vm_fault.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index e443a0068b23c..a620576485bc9 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -310,11 +310,18 @@ RetryFault:; int queue, s; /* - * check for page-based copy on write + * check for page-based copy on write. + * We check fs.object == fs.first_object so + * as to ensure the legacy COW mechanism is + * used when the page in question is part of + * a shadow object. Otherwise, vm_page_cowfault() + * removes the page from the backing object, + * which is not what we want. */ vm_page_lock_queues(); if ((fs.m->cow) && - (fault_type & VM_PROT_WRITE)) { + (fault_type & VM_PROT_WRITE) && + (fs.object == fs.first_object)) { s = splvm(); vm_page_cowfault(fs.m); splx(s); |
