summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/fs/specfs/spec_vnops.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/fs/specfs/spec_vnops.c b/sys/fs/specfs/spec_vnops.c
index 9ce6c92..d947b9b 100644
--- a/sys/fs/specfs/spec_vnops.c
+++ b/sys/fs/specfs/spec_vnops.c
@@ -765,7 +765,10 @@ spec_getpages(ap)
pmap_qremove(kva, pcount);
gotreqpage = 0;
- VM_OBJECT_LOCK(vp->v_object);
+ /*
+ * While the page is busy, its object field is immutable.
+ */
+ VM_OBJECT_LOCK(ap->a_m[ap->a_reqpage]->object);
vm_page_lock_queues();
for (i = 0, toff = 0; i < pcount; i++, toff = nextoff) {
nextoff = toff + PAGE_SIZE;
@@ -818,7 +821,7 @@ spec_getpages(ap)
}
}
vm_page_unlock_queues();
- VM_OBJECT_UNLOCK(vp->v_object);
+ VM_OBJECT_UNLOCK(ap->a_m[ap->a_reqpage]->object);
if (!gotreqpage) {
m = ap->a_m[ap->a_reqpage];
printf(
OpenPOWER on IntegriCloud